CodeCrafters Pickup Slots for WooCommerce

Description

Let customers choose a pickup date and time at checkout. Manage locations, schedules, and booking rules from WooCommerce > Pickup Slots.

Pickup booking

  • Supports the WooCommerce Checkout block and classic checkout shortcode.
  • Picker shown for supported Local Pickup methods.
  • Offers fixed-length slots within each location’s opening hours.
  • Global preparation time, booking window, and same-day cutoff.
  • Required or optional pickup date and time selection.
  • Live availability checks and capacity reservations before payment.

Locations and schedules

  • Multiple locations with names, addresses, collection instructions, status, and sort order.
  • Separate opening days, hours, slot lengths, and capacity for each weekday.
  • Slots from 15 minutes to 4 hours, ending before closing.
  • Date overrides for special opening hours or an all-day closure.
  • Blackout dates/ranges per location or globally, with optional labels.
  • Regularly closed weekdays are omitted, even with a blackout.

Checkout and order details

  • Independent settings for showing location addresses and collection instructions.
  • A shared checkout panel shows only enabled, non-empty details.
  • Pickup details on the confirmation page, My Account order view, and admin order screen.
  • Dedicated Pickup details sections in HTML and plain-text WooCommerce order emails.
  • Address/instruction snapshots preserve new selections for order history.
  • Staff can change an order’s pickup location, date, and slot.

Daily order management

  • Sortable Pickup Date column in the WooCommerce orders list.
  • Pickup date range and location filters.
  • CSV export of matching pickup orders for preparation and collection lists.
  • High-Performance Order Storage (HPOS) and legacy order storage support.
  • Translation ready, including checkout blocks.

Requirements and scope

Requires WordPress 6.6+, PHP 8.0+, active WooCommerce 8.9+, and an available Local Pickup method.

Plugin locations are separate from WooCommerce pickup locations, with no automatic mapping. Configure shipping prices and methods in WooCommerce.

Preparation time is global. Product/category preparation rules, named custom slots, customer self-service rescheduling, reminders, and calendar synchronization are not included in this release.

Developed by Code Crafters.

Source code

Human-readable source for the compiled checkout files is included in this plugin.

  • build/pickup-picker-editor.js is built from block-checkout/pickup-picker/index.js.
  • build/pickup-picker-frontend.js is built from block-checkout/pickup-picker/frontend.js and block-checkout/pickup-picker/block.js.

    package.json, package-lock.json, and webpack.config.js are the build tools. @wordpress/* and @woocommerce/* are external dependencies supplied by WordPress and WooCommerce, and are not copied into those compiled files.

To regenerate them, install Node.js and npm, open this plugin’s directory, and run npm ci followed by npm run build.

Privacy

This plugin does not send data to external services or add tracking. Pickup selections are stored locally with WooCommerce orders and in plugin booking tables. Staff CSV exports include customer names, email addresses, and order details; handle these files according to your store’s privacy policy.

Screenshots

Installation

Install and activate

  1. Install and activate WooCommerce 8.9 or newer.
  2. Upload the ZIP in Plugins > Add New Plugin > Upload Plugin and click Install Now, or copy the folder to /wp-content/plugins/cc-pickup-slots-for-woocommerce/.
  3. Activate CodeCrafters Pickup Slots for WooCommerce.
  4. Confirm the store timezone in Settings > General. Pickup rules use this timezone.

Enable Local Pickup

In WooCommerce > Settings > Shipping, add Local Pickup to the relevant shipping zone, or enable block-based Local Pickup and its locations. Controls vary by WooCommerce version and checkout type.

Create plugin scheduling locations separately below.

Create a pickup location

  1. Open WooCommerce > Pickup Slots > Locations and click Add location.
  2. Enter a name, address, and optional Pickup instructions, such as an entrance or floor number.
  3. Set Status to Active. Use Sort order to arrange locations; lower numbers appear first.
  4. Tick each open weekday. Set its opening time, closing time, slot length, and Max orders per slot. Enter 0 for unlimited capacity.
  5. Save the location. Repeat for other locations.

Configure booking and display rules

Open WooCommerce > Pickup Slots > Settings, adjust the following, and save:

  • Preparation time (hours): minimum delay before pickup. Default: 2; 0 disables the delay.
  • Booking window (days): maximum days ahead. Default: 30.
  • Same-day cutoff time: stops same-day booking at this time. Default: 14:00; blank disables it.
  • Require pickup slot: enabled by default; disable to make selection optional.
  • Location address: enabled by default; shows the selected address at checkout.
  • Location instructions: enabled by default; shows instructions at checkout and in order output.
  • Uninstall: disabled by default; enable to remove plugin data on deletion. Order metadata is preserved.

Add exceptional hours and holidays

In a saved location, use Date overrides to set special hours or Closed all day. Repeating a date replaces its override. Slot length and capacity follow that weekday’s schedule, including normally closed weekdays.

In Blackout Dates, choose a date/range, location or All locations, and optional label. Blackouts override special hours. Repeating a location/date updates its label.

Verify checkout

  1. Add a physical product to the cart and open checkout.
  2. Select Local Pickup and confirm the Pickup date & time picker appears.
  3. Choose a location, date, and slot. Check the address and instructions.
  4. Place a test order. Check its confirmation page, email, and admin pickup details.
  5. Also test a delivery method, a closed date, and a capacity-limited slot.

The block picker appears automatically. Classic checkout uses [woocommerce_checkout]; no extra shortcode is needed.

Manage and export orders

In WooCommerce > Orders, apply pickup date/location filters, then click Export Pickup Orders. Click Pickup Date to sort.

To reschedule, open an order > Pickup slot > Change pickup slot. Choose the location, date, and time, then click Update. Staff can exceed capacity, but must select an offered slot. Inform the customer of changes.

FAQ

Does this work with both Block and classic checkout?

Yes. The pickup picker appears automatically in the WooCommerce Checkout block and in classic checkout using [woocommerce_checkout]. Select a supported Local Pickup method to show it. No additional shortcode is needed.

Are WooCommerce pickup locations linked to this plugin’s locations?

No. WooCommerce controls the shipping method and its price. This plugin manages scheduling locations separately. Create your scheduling locations in WooCommerce > Pickup Slots > Locations, even when you already have block-based Local Pickup locations in WooCommerce.

Can each location have different opening hours and capacity?

Yes. Each location has a weekly schedule with opening hours, slot length, and maximum orders per slot for each weekday. Date overrides change hours or close a particular day, and blackout dates can close one location or all locations.

Does the plugin support HPOS?

Yes. High-Performance Order Storage and legacy WooCommerce order storage are supported, including pickup details, staff editing, pickup date filters, and CSV export.

Can customers reschedule their own pickup or receive reminders?

Customer self-service rescheduling, reminder messages, and calendar synchronization are not included in version 1.0.0. Staff can change pickup details from the order screen. Product-specific preparation times are also not included; preparation time is a global setting.

Why does the pickup picker not appear?

Use WooCommerce 8.9+, an Active plugin location, and Block or classic checkout. Select Local Pickup. Supported method identifiers are local_pickup and pickup_location; other third-party methods may need integration.

Why are no dates or slots available?

Check open weekdays, hours, slot length, capacity, blackouts, overrides, booking rules, and timezone. Complete slots must fit before closing. Passed slots and slots within the preparation period cannot be booked.

How do preparation time and the cutoff work together?

Both apply. Two hours of preparation means a 10:00 order cannot use a slot before 12:00. At the cutoff, same-day pickup stops. Future dates must still satisfy the schedule and booking window.

How do capacity limits work?

Capacity counts orders per location/date/slot; 0 means unlimited. Full slots are unavailable to customers. Live checks and a database lock protect reservations before payment. Cancelled, failed, refunded, or trashed orders release capacity; completed orders retain it. Unpaid orders may hold capacity until their status releases it.

Why does a holiday not appear in the date dropdown?

Blackouts appear for otherwise open dates, including dates opened by overrides. Already closed weekdays are omitted; blackout records remain saved.

Which blackout label is shown when two rules apply?

A non-empty location label wins; otherwise the All locations label is used. Either rule prevents booking.

Can customers skip pickup date and time selection?

Yes, when Require pickup slot is disabled. Any supplied selection must still contain valid pickup details. Switching to delivery clears the pickup selection associated with checkout.

Do display settings remove the address from order history?

No. Address visibility affects checkout; instruction visibility affects checkout and order output. New selections save snapshots for history. Older orders without snapshots fall back to current location details.

What is included in the CSV export?

Order number, customer name/email, items/quantities, location/address, date, and slot. Only pickup orders are exported. CSV addresses use the location’s current address. HPOS and legacy storage are supported.

What happens when I deactivate or delete the plugin?

Data is preserved by default. Enabling Uninstall before deletion removes plugin tables/settings. Order pickup metadata is always retained; its display requires the active plugin.

How should I report a problem?

Share software versions, checkout type, settings, and reproduction steps. Remove customer details from screenshots and logs.

Reviews

There are no reviews for this plugin.

Contributors & Developers

“CodeCrafters Pickup Slots for WooCommerce” is open source software. The following people have contributed to this plugin.

Contributors

Changelog

1.0.0

  • Initial release: pickup dates and slots, multiple locations, weekly schedules, date overrides, capacity limits, blackouts, preparation time, cutoff, Block and classic checkout, pickup detail snapshots, order/email display, staff editing, order filters, CSV export, and HPOS support.