1. Overview
PowerfulWP – Order Delivery Scheduler for WooCommerce lets customers choose a delivery date, time slot, or “as soon as possible” at checkout. It works with both WooCommerce Legacy Checkout and WooCommerce Blocks Checkout, is HPOS compatible, and supports blackout dates, time-slot fees, and (in Premium) capacity limits, shipping rules, pickup locations, Google Calendar, and more.Requirements
- WordPress 5.0+
- WooCommerce 3.0+
- PHP 7.4+
2. Installation
- Install the free plugin from WordPress.org or upload the plugin ZIP.
- Activate PowerfulWP – Order Delivery Scheduler for WooCommerce.
- (Optional) Activate a Premium license for advanced features.
- Go to WooCommerce → Delivery Slots (or Delivery Slots in the admin menu) to configure.
Please read our general installation & activation doc at the link below.
3. Getting Started
- Delivery Slots → Settings → General
- Enable the plugin.
- Choose Delivery days (e.g. Mon–Fri).
- Set Minimum days and Maximum days (e.g. 0 and 30).
- Optionally add Blackout dates.
- Set Delivery Date and Delivery Time Slot labels if needed.
- Delivery Slots → Settings → Slots & Fees
- Add at least one time slot (e.g. 09:00–12:00, 14:00–18:00).
- Optionally set same-day, next-day, and ASAP fees.
- Save. The delivery date and time picker will appear on checkout (Legacy and Blocks).
4. Admin Menu & Pages
- Delivery Slots (main menu, podsfw-dashboard)
- Dashboard (Premium): Today view, calendar, slot utilization, order filtering, complete orders, analytics.
- Settings: All configuration tabs.
- Settings URL: admin.php?page=powerfulwp-order-delivery-scheduler-for-woocommerce
- Tabs: General, Slots & Fees, Shipping, Product/Category Rules, Pickup Locations, Advanced.
5. Settings Tabs
5.1 General
- Enable plugin – Turn delivery scheduling on/off.
- Require time slot – Make time slot required (recommended).
- Delivery days – Weekdays when delivery is available.
- Minimum / Maximum days – How many days from today customers can book (e.g. 0–30).
- Blackout dates – Specific dates when delivery is disabled.
- Enable ASAP – Allow “As soon as possible”.
- Labels – “Delivery Date” and “Delivery Time Slot” (customizable).
- Calendar theme – default, dark, material_blue, material_green, material_red, material_orange, airbnb, confetti.
- Date language – en, es, fr, he, pt, ru, de, it, ar.
5.2 Slots & Fees
- Time slots – Add slots (from, to, optional fee, optional capacity per slot).
- Disable slot X minutes before start/end – Cutoff before slot start/end.
- Global slot capacity (Premium) – Fallback limit for slots without individual capacity.
- Show remaining capacity (Premium) – e.g. “5 / 10 left”.
- Minimum / Maximum order amount – Hide delivery if cart is below/above these.
- Order limit per day – Max orders per day across all slots.
- Same-day / Next-day / ASAP fee – Flat fees.
- Date-based fees (Premium) – Fee per date.
- Slot-based fees (Premium) – Fee per slot.
- Coupon-based delivery fees (Premium) – Rules by coupon.
5.3 Shipping (Premium)
- Shipping zones – Enable delivery for “All zones” or “Selected zones”.
- Shipping methods – “All methods” or “Selected methods”.
- Slot-level shipping – Assign slots to zones/methods.
5.4 Product/Category Rules (Premium)
- Disable delivery for specific products, categories, or user roles.
- Enable delivery only for selected products, categories, or roles.
- Processing rules – Processing time by product, category, zone, weekday (multi-condition).
5.5 Advanced
- Debug notice on checkout – Show admins why delivery might be hidden (no days, no slots, etc.).
- Disable for virtual/downloadable – Hide delivery when cart is only virtual/downloadable.
- Disabled payment methods – Hide delivery for selected payment methods.
- Google Calendar (Premium) – Enable, Client ID, Client Secret, selected calendar.
- Special days – Recurring open/closed or special rules (Premium).
- Hide fully booked slots – Don’t show slots with 0 capacity.
- Show slot capacity (Premium) – “X left” on checkout.
- Show empty slots – Show slots even when no capacity (for debugging).
- Weekday restrictions (Premium) – Extra rules per weekday.
- Real-time updates – Refresh slot availability (Premium).
- Customer delivery notes – Allow a notes field.
- Enable/Hide shipping methods – Restrict by shipping method (Premium).
6. Options Reference (key get_option names)
| Option | Type | Description |
|---|---|---|
| podsfw_enabled | 0/1 | Plugin on/off |
| podsfw_time_slots_required | 0/1 | Time slot required |
| podsfw_delivery_days_array | array | Mon–Sun toggles |
| podsfw_min_days | int | Min days from today |
| podsfw_max_days | int | Max days from today |
| podsfw_blackout_dates_array | array | Blackout dates |
| podsfw_asap_enabled | 0/1 | ASAP option |
| podsfw_label_date | string | Date field label |
| podsfw_label_time | string | Time field label |
| podsfw_calendar_theme | string | Theme key |
| podsfw_date_lang | string | Language code |
| podsfw_time_slots_array | array | Slots (from, to, fee, capacity…) |
| podsfw_slot_disable_minutes | int | Minutes before start |
| podsfw_slot_disable_minutes_before_end | int | Minutes before end |
| podsfw_order_limit_per_day | int | Daily order cap |
| podsfw_slot_lockout | 0/1 | Use global capacity (Premium) |
| podsfw_slot_lockout_max | int | Global capacity (Premium) |
| podsfw_show_slot_capacity | 0/1 | Show “X left” (Premium) |
| podsfw_same_day_fee | float | Same-day fee |
| podsfw_next_day_fee | float | Next-day fee |
| podsfw_asap_fee | float | ASAP fee |
| podsfw_min_order_amount | float | Min order for delivery |
| podsfw_max_order_amount | float | Max order for delivery |
| podsfw_debug_notice_checkout | 0/1 | Admin debug on checkout |
| podsfw_disable_virtual | 0/1 | Disable for virtual/downloadable |
| podsfw_disabled_payment_methods | array | Payment methods that hide delivery |
| podsfw_google_calendar_enabled | 0/1 | Google Calendar (Premium) |
| podsfw_google_client_id | string | OAuth client ID |
| podsfw_google_client_secret | string | OAuth client secret |
| podsfw_google_selected_calendar | string | Calendar ID (e.g. primary) |
| podsfw_special_days | array | Special open/closed (Premium) |
| podsfw_hide_fully_booked | 0/1 | Hide slots at capacity |
| podsfw_pickup_locations | array | Pickup locations (Premium) |
| podsfw_shipping_zones_mode | all/configure | Zones rule (Premium) |
| podsfw_shipping_methods_mode | all/configure | Methods rule (Premium) |
| podsfw_* (product/processing) | various | Product/category/role rules (Premium) |
7. Checkout Behavior
- Legacy checkout: Fields are added after billing; date picker and time dropdown (or ASAP) load via AJAX; fees are applied with woocommerce_cart_calculate_fees.
- Blocks checkout: Same logic is driven by REST API and Store API; script is powerfulwp-order-delivery-scheduler-for-woocommerce-blocks.js; fees are applied via REST and cart updates.
Delivery is hidden when: plugin disabled, no delivery days, no slots, min/max days invalid, all dates blacked out, cart below min or above max order, virtual-only cart (if set), disabled payment method, or (Premium) product/category/zone/method rules not met.
8. Order Meta Keys
Stored on the order (HPOS and legacy):
- _podsfw_delivery_date – Selected date (e.g. Y-m-d).
- _podsfw_delivery_time – Selected slot key (e.g. 09:00-12:00) or asap.
- _podsfw_pickup_location – Selected pickup location ID/name (if used).
- _podsfw_delivery_fee – Calculated delivery fee amount.
Use $order->get_meta( ‘_podsfw_delivery_date’ ) etc. in code.
9. REST API (Blocks checkout & integrations)
Base namespace: podsfw/v1. All below are used by the Blocks checkout; /slots and /fees can be used by custom apps.
| Method | Route | Auth | Purpose |
|---|---|---|---|
| GET | /podsfw/v1/slots | Public | Get available slots for a date. Query: date (Y-m-d). |
| POST | /podsfw/v1/save-session | Public | Save delivery date, time, pickup_location in session. Body: date, time, pickup_location. |
| POST | /podsfw/v1/fees | Public | Get fee breakdown for a date/time. Body: date, time. |
| POST | /podsfw/v1/update-fee | Public | Apply delivery fee to cart. Body: date, time_slot (and optionally coupons). |
| GET | /podsfw/v1/debug-info | Admin only | Debug info (config, why delivery might be hidden). |
Example – get slots for a date:
GET /wp-json/podsfw/v1/slots?date=2026-02-01
10. Filters (for developers)
| Filter | Where | Purpose |
|---|---|---|
| podsfw_asap_label | Checkout, admin, slots | Change “As soon as possible” label. |
| podsfw_pickup_location_label | Checkout | Change “Pickup Location” label. |
| podsfw_pickup_location_placeholder | Checkout | Change “Select a pickup location” placeholder. |
| podsfw_addon_enqueue_admin_assets | Admin | Control whether to enqueue plugin admin assets (default true on relevant pages). |
Example:
add_filter( ‘podsfw_asap_label’, function( $label ) {
return __( ‘As fast as possible’, ‘your-theme’ );
} );
11. Action
- podsfw_fs_loaded – Fired when Freemius is loaded (for licensing/add-ons). No args documented in core.
12. Google Calendar (Premium)
- Optional. Enable in Delivery Slots → Settings → Advanced.
- Uses OAuth (Client ID + Secret). Choose which calendar to use.
- When an order has a delivery date/time, the plugin can create an event (customer, date, time, address, notes). No data is sent to Google until you enable and connect.
See README “External Services” and Google’s Calendar API terms and privacy policy.
13. Troubleshooting
Delivery picker not showing
- Ensure Delivery Slots → Settings → General: plugin enabled, at least one delivery day, min/max days valid (min < max), and at least one time slot in Slots & Fees.
- If you use Blackout dates or Special days, ensure some dates remain available.
- Check Order requirements: min/max order amount, and (if used) payment method, virtual/downloadable, and (Premium) product/category/shipping rules.
- As an admin, enable Debug notice on checkout in Advanced to see a short message explaining why delivery is hidden.
Slots not loading / wrong slots
- Check time slot format (from/to). Check capacity and “order limit per day”. For Premium, check shipping zone/method and pickup location rules.
Fees not applying
- Verify same-day, next-day, ASAP, and (Premium) date/slot/coupon fees in Slots & Fees. For Blocks, ensure REST /fees and /update-fee are not blocked by security/cache.
HPOS
- Plugin stores delivery data in order meta (_podsfw_*). Use $order->get_meta() / update_meta_data(); compatible with HPOS.
14. FAQ (short)
- Blocks checkout? Yes, fully supported.
- Legacy checkout? Yes, fully supported.
- HPOS? Yes.
- Different settings per product/category? Yes, in Premium (Product/Category Rules).
- Block specific dates? Blackout dates (all versions); recurring/special days in Premium.
- Extra fees for slots/dates? Yes; Premium adds date-, slot-, and coupon-based fees.
- Google Calendar? Optional, Premium; disabled by default.
- Restrict by order amount? Yes; min/max order in Slots & Fees; more rules in Premium.
15. Support & Changelog
- Docs: https://powerfulwp.com/docs
- Support: https://powerfulwp.com/contact-us/ (response within 24 hours)
- Changelog: See README.txt in the plugin or your dashboard after updates.