Configuration
All of Pickup’s settings live on one screen, WooCommerce → Pickup, and are stored in a single option, pickup_settings. The form has three cards: General (the toggle and four booking rules), Weekly opening hours, and Pickup locations. Saving is nonce-checked and gated to the manage_woocommerce capability; every number is clamped to a safe minimum, and times outside HH:MM are discarded.
Pickup rides on top of WooCommerce Local Pickup, so enable that shipping method first under WooCommerce → Settings → Shipping.
General
Section titled “General”Enable pickup scheduling
Section titled “Enable pickup scheduling”The master switch (enabled), on by default. When off, your locations and hours stay saved but no pickup fields are shown at checkout and the checkout hooks are not registered at all, the storefront is untouched. Turn it back on to resume without re-entering anything.
Slot length (minutes)
Section titled “Slot length (minutes)”slot_minutes, how far apart pickup times are offered. Default 30, clamped to a minimum of 5. A 09:00-17:00 day at 30 minutes gives 09:00, 09:30, 10:00 and so on. A longer length means fewer, wider slots.
Capacity per slot
Section titled “Capacity per slot”capacity, how many orders may book the same location + date + slot before it is treated as full and dropped from the list. Default 5, minimum 1. The count includes orders in the pending, processing, on-hold and completed states (see How scheduling works).
Lead time (hours)
Section titled “Lead time (hours)”lead_hours, the minimum notice before the earliest bookable slot, so staff have time to prepare. Default 2, minimum 0. With a lead time of 2, any slot less than two hours from now is hidden.
Booking horizon (days)
Section titled “Booking horizon (days)”horizon_days, how far ahead customers may book. Default 14, minimum 1. The date field’s max is set to today plus this many days, and the schedule is generated only within that range.
Weekly opening hours
Section titled “Weekly opening hours”One start and end time per weekday (Monday-Sunday), entered as 24-hour HH:MM in native <input type="time"> fields. Leave a day’s fields blank to close it, the default schedule opens Mon-Fri 09:00-17:00 and closes the weekend.
On save, a day is kept only when both times are valid HH:MM and the end is later than the start; anything else is dropped, so a half-filled or reversed window simply closes that day. The schedule is store-wide: the same weekly hours apply to every location, Pickup has no per-location hours.
Note: the admin screen exposes a single window per day. The stored shape (
windows, keyed by ISO weekday 1-7) can hold a list of windows per day, but the UI reads and writes only the first one.
Pickup locations
Section titled “Pickup locations”Each location has a Name and an optional Address (shown after the name in the checkout dropdown, e.g. Downtown store, 12 High St), plus an Enabled checkbox. Use Add location to add rows and Remove to drop them.
- A row with a blank Name is discarded on save.
- The location id is derived from the name with
sanitize_title(), and duplicate names get a-2,-3suffix so ids stay unique and stable. - Disabled locations are kept but never shown at checkout. You need at least one enabled location for the fields to appear; with none, the checkout shows a “no pickup locations are configured yet” notice instead of broken controls.
Renaming or removing a location does not rewrite past orders: the chosen location’s name is snapshotted onto each order at checkout (_pickup_location_name), so historic orders stay readable.
Timezone and date format
Section titled “Timezone and date format”Slots are generated in your store timezone (wp_timezone()), and the date is displayed using your WordPress Date format setting. There is nothing to configure here, Pickup follows your existing WordPress settings. The stored date is kept as Y-m-d and the slot as HH:MM; only the display is reformatted.
What is fixed by design
Section titled “What is fixed by design”- The fields appear only when the chosen shipping method is Local Pickup (method id starting
local_pickuporpickup_location). - Once Local Pickup is chosen and a location exists, location, date and time are all required, there is no “location only” mode.
- The selection is re-validated on the server before the order is created, regardless of JavaScript.
Storage and cleanup
Section titled “Storage and cleanup”Settings live in the single pickup_settings option (autoload off). Per-order choices are stored as order meta: _pickup_location, _pickup_location_name, _pickup_date and _pickup_slot. Pickup creates no custom table and calls no external service.
Deleting the plugin runs uninstall.php, which removes the pickup_settings option. Per-order pickup meta is intentionally left in place, it is order history needed for fulfilment and accounting records.