Install
This is the repository archive. It installs, but the folder name will carry the branch suffix and updates will not flow.
Install straight from GitHub with WP-CLI:
wp plugin install https://github.com/franke-bailey/wc-pickup-slots/archive/refs/heads/main.zipNo built-in updater. New versions won't appear under Dashboard → Updates. Install new releases yourself, or let Git Updater track the repository.
A WooCommerce plugin that lets customers select a physical pickup location and provide at least two preferred collection date/time slots at checkout. Built for stores with multiple collection points and incompatible with standard delivery-date plugins. Compatible with the Elementor checkout widget.
Developed by Frank Bailey / Studio256.
Features
- Admin-managed pickup locations — define as many physical collection points as needed, each with its own schedule
- Per-location configuration — weekend disabling, blackout dates, and available collection hours per location
- Hour-range time slots — select available hours via checkboxes; adjacent hours are automatically merged into a window (e.g. 07:00–17:00)
- Convenience buttons — Select All, Clear, and Weekday Hours (06:00–18:00) per location
- Minimum 2 preferred slots — customers must provide at least 2 date/time preferences; more can be added
- Elementor checkout widget compatible — works with Elementor's checkout widget as well as the classic WooCommerce shortcode
- Local pickup detection — collection details section only appears when a local pickup shipping method is selected
- Global lead time and booking window — control how far ahead customers can book (30, 60, or 90 days) and minimum lead time in days
- Saves to order meta — supports both classic post meta and WooCommerce HPOS (High-Performance Order Storage)
- Displays in admin order view, order confirmation email, and thank-you page
Requirements
- WordPress 6.0+
- WooCommerce 7.0+
- PHP 7.4+
- A local pickup shipping method configured in WooCommerce → Settings → Shipping
Installation
- Download or clone this repository
- Copy
wc-pickup-slots.phpinto/wp-content/plugins/wc-pickup-slots/ - Activate the plugin in WordPress → Plugins
- Go to WooCommerce → Pickup Slots to configure your locations and schedules
Configuration
Global Settings
| Setting | Description |
|---|---|
| Minimum Lead Time | How many days ahead the earliest selectable date is. 0 = same day, 1 = next day, etc. |
| Booking Window | How far ahead customers can book — 30, 60, or 90 days |
Pickup Locations
Add as many locations as needed. Each location has:
| Field | Description |
|---|---|
| Location Name | Displayed in the checkout dropdown and on the order |
| Address | Optional — shown beneath the dropdown when the customer selects this location |
| Disable Weekend Pickups | Blocks Saturdays and Sundays in the date picker |
| Blackout Dates | Click to select individual dates to block (holidays, closures, etc.) |
| Available Collection Hours | 24 checkboxes (00:00–23:00). Adjacent checked hours are merged into a single window |
Convenience buttons per location:
- Select All — checks all 24 hours
- Clear — unchecks all hours
- Weekday hours (06:00–18:00) — checks hours 6 through 17 in one click
How It Works
On the Checkout Page
- When the customer selects a Local Pickup shipping method, the Collection Details section appears
- The customer selects a pickup location from the dropdown
- The location's address is shown (if configured)
- Two date/time slot rows appear, pre-filtered to that location's available days and hours
- The customer can add more slots with + Add another preferred time
- At least 2 complete slots (date + time both selected) are required to place the order
Order Data
The following is saved to the order and displayed in:
- Admin order view (below billing address)
- Order confirmation email
- Thank-you / order details page
Pickup Location: Cape Town Warehouse
Preferred Collection Slots:
1. March 10, 2026, 7:00 AM – 5:00 PM
2. March 18, 2026, 7:00 AM – 5:00 PM
Order Meta Keys
| Key | Description |
|---|---|
_wcps_location_index |
Index of the selected location in the plugin settings array |
_wcps_location_name |
Human-readable name of the selected location |
_wcps_slots |
Array of slot objects: date, time, formatted |
Compatibility Notes
- Elementor checkout widget — the plugin uses
woocommerce_after_order_notesfor field output and JS-based DOM repositioning to place the section correctly within Elementor's rendered layout - WooCommerce HPOS — order meta is saved via both
woocommerce_checkout_update_order_meta(classic) andwoocommerce_checkout_create_order(HPOS) - Flatpickr — loaded under the handle
wcps-flatpickrto avoid conflicts with other plugins or Elementor registering their ownflatpickrhandle
Changelog
1.4.0
- JS DOM repositioning to place collection details below the shipping method table
- Switched email output to
woocommerce_email_order_metaaction for proper HTML rendering with<br>-separated slot lines - Fixed time validation regex to accept window format (
07:00-17:00) rather than single times only - Improved server-side pickup detection to read
$_POST['shipping_method']directly
1.3.0
- Renamed Flatpickr script/style handles to
wcps-flatpickrto prevent Elementor conflicts - Moved all checkout JS to
wp_add_inline_scriptfor guaranteed load order - Added
wp_deregister_script('flatpickr')to clear conflicting registrations - Improved submit sync: hooks into form submit, Place Order button click, and
checkout_place_order - Fixed server-side pickup detection using POST data as primary source
1.2.0
- Replaced comma-separated time slot input with 24-hour checkbox grid
- Adjacent checked hours automatically merged into collection windows (e.g. 07:00–17:00)
- Added Select All / Clear / Weekday Hours convenience buttons per location
- Grid flows vertically (6 rows × 4 columns) for intuitive reading
1.1.0
- Replaced WC shipping zone detection with admin-managed location list
- Per-location name, address, weekend toggle, blackout dates, and time slots
- Dynamic add/remove location cards in admin with live heading update
- Location address shown beneath checkout dropdown when selected
- Slot rows rebuilt when customer switches location
1.0.0
- Initial release
- Checkout field rendered via
woocommerce_after_order_notes - Flatpickr date picker with per-location blackout dates and weekend disabling
- At least 2 preferred date/time slots required
- Saves to order meta, displays in admin order view, confirmation email, and thank-you page
License
GPL-2.0-or-later — see LICENSE for details.