WooCommerce local delivery and pickup plugins fall into three layers that get sold under one search term, and buying the wrong layer is the most expensive mistake in this category: a date picker at checkout, a pickup location manager, and a dispatch tool for whoever drives the van. Most stores need one of the three, some need two, and almost nobody needs all three — yet the roundups list them together as if they were interchangeable.
Below: the three layers separated out, the criteria I judged each option against, a table of versions, install counts and prices checked on 30 September 2026 against WooCommerce 11.1.2 on WordPress 7.1.2, what WooCommerce already gives you free before you buy anything, and the two things that break local delivery stores regardless of which plugin you pick — cut-off times and pickup tax.
The three layers people call "local delivery"
Separate these before you open a pricing page. They solve different problems, they are written by different vendors, and a plugin that is excellent at one is usually indifferent at the others.
- Scheduling at checkout. The customer picks a delivery date, a time window, or a pickup slot before they pay. This is where the date-picker plugins live. The hard parts are capacity (how many Saturday 10am–noon slots exist), lead time (how many hours of notice you need), and cut-offs (order by 2pm for same-day).
- Pickup locations. You have more than one place customers can collect from, or products that only exist at one of them. This is a shipping and inventory problem, not a calendar problem, and WooCommerce core covers a thin version of it for nothing.
- Dispatch and fulfilment. The order is paid; now somebody has to be assigned to it, drive it, and mark it delivered. This layer lives entirely after checkout, has its own user role, and has nothing to say about dates or slots.
The question that picks your layer
What WooCommerce already does for free
Start here, because a surprising number of stores buy a $99/yr extension for something core has shipped for years. WooCommerce 11.1.2 includes Local Pickup as a core shipping method. You add it per shipping zone under WooCommerce > Settings > Shipping > Shipping Zones, give it a name, set its tax status, and optionally attach a cost. Customers in that zone then see it at checkout as an alternative to shipping.
There are two implementations, and knowing which one you are looking at saves an hour of confusion. The legacy method is the shipping-zone one just described. The newer Local Pickup block is configured separately and is what the Cart and Checkout blocks use. If you have migrated to block checkout and your pickup settings appear to have vanished, they have not — you are editing the wrong one.
What core does not do: pickup dates, pickup time slots, delivery dates, capacity limits, or cut-offs. There is no calendar anywhere in it. If all you need is "let people collect instead of paying shipping", you are finished and you have spent nothing. If you need to know when they are collecting, that is the first paid or add-on decision.
One core behaviour to know about before it surprises you at tax time: by default, WooCommerce calculates tax on a local pickup order using your store address rather than the customer’s. That is the correct treatment for plenty of US stores and the wrong one for others, and it is a one-line filter to change.
<?php
// wp-content/plugins/wpfairs-store-snippets/local-pickup-tax.php
// Stop WooCommerce taxing local pickup orders at the store's base address
// and fall back to your normal tax configuration instead.
add_filter( 'woocommerce_apply_base_tax_for_local_pickup', '__return_false' );
// Or keep base-address taxing, but point it at the pickup location
// rather than the address in WooCommerce > Settings > General.
add_filter( 'woocommerce_countries_base_postcode', fn() => '80903' );
add_filter( 'woocommerce_countries_base_city', fn() => 'COLORADO SPRINGS' );
Put that in a small site-specific plugin, not in your theme’s functions.php, so a theme switch does not silently change how you collect tax. Which of the two behaviours is right for you is a question for whoever files your returns — sourcing rules differ by state and I am not going to guess yours. WooCommerce sales tax plugins compared for US stores covers the automation options once you know the answer.
The six criteria I judged each WooCommerce local delivery plugin on
Stated up front so you can reweight them if your store looks nothing like the one I assumed: a US business doing 50 to 600 local orders a month, one or two pickup points, deliveries inside a metro area, payment taken at checkout, and one person who configures plugins between other jobs.
- Which layer it actually sits in. Scheduling, locations or dispatch. This decides everything else, and every vendor’s marketing blurs it.
- Whether capacity limits are in the free tier. A date picker with no cap per slot is a promise generator. Twelve people book Saturday 10am, you have three delivery runs, and you find out on Saturday. This is the single most common reason a free delivery-date plugin gets replaced within a month.
- Cut-off handling. "Order by 2pm for same-day" is a scheduled comparison, not a static setting, and how the plugin evaluates it decides whether your 2:01pm orders quietly become same-day anyway.
- Block checkout support, stated explicitly. WooCommerce’s Cart and Checkout blocks need extensions written against the Store API. A plugin that only hooks the classic checkout template will render nothing on a block checkout, and it will not tell you — the field just is not there.
- Maintenance signals, read strictly. Tested-up-to version, time since last release, install count against review count. This code sits in your checkout and holds customer addresses; a stale delivery plugin is a liability, not just a missing feature.
- What renewal costs, not what the first year costs. Discounted first years are standard here. A $95.20 first year that renews at $119 is a $119 plugin, and you should budget it as one.
WooCommerce local delivery and pickup plugins compared
Versions, install counts and ratings come from WordPress.org and the vendors’ own listings; prices come from each vendor’s pricing page. All checked on 30 September 2026, against WooCommerce 11.1.2 and WordPress 7.1.2. On a narrow screen this table stacks into one card per option rather than scrolling sideways.
| Option | Layer | What you get for nothing | Paid price (30 Sep 2026) | Where it falls short |
|---|---|---|---|---|
| WooCommerce core Local Pickup | Locations (thin) | All of it. A shipping method per zone, an optional pickup cost, a tax status, and a Local Pickup block for the Cart and Checkout blocks. Ships with WooCommerce 11.1.2 | Free | No dates, no time slots, no capacity, no cut-offs, no second location with its own stock. Tax on pickup orders defaults to your store address, which is a decision you should make rather than inherit. It is a checkbox, not a system — but it is the right starting point and it costs nothing to rule out |
| Order Delivery Date for WooCommerce (Tyche Softwares) | Scheduling | v4.6.2, 10,000+ installs, 4.3/5 across 61 reviews, tested to WP 7.0.6, PHP 7.3+, updated about four weeks ago. Delivery date at checkout, configurable delivery weekdays, holiday blocking, daily capacity limits, time slot selection with bulk slot generation, the date shown on the order, admin editing, and stated support for both block and classic checkout plus HPOS | Order Delivery Date Pro v14.1.0, updated 29 September 2026. Starter 1 site $119/yr ($95.20 first year), Business 5 sites $249/yr ($199.20 first year), Enterprise 10 sites $349/yr ($279.20 first year). 30-day money-back guarantee. Pro adds same-day and next-day with cut-off times, scheduling per shipping method, product category or user role, Google Calendar sync, recurring deliveries with WooCommerce Subscriptions, and dynamic delivery charges | The free tier is the most complete one here, and the feature you most likely need — cut-off times for same-day — is not in it. Tested only to WordPress 7.0.6 while 7.1.2 is current; that is one minor version behind rather than abandonment, but check it before a major update. Pro tiering is by site count, not by feature, which is unusually honest for this category |
| Delivery Date Time & Pickup for WooCommerce (WooODT Lite) | Scheduling + locations | v2.5.7, 400+ installs, 4.2/5 across 112 reviews, tested to WP 7.0.6, PHP 7.4+, updated three months ago. Customer chooses delivery or pickup at checkout, with dates and time slots for either, multiple pickup locations in the free version, a widget and shortcode for placing the picker elsewhere, and support for classic and block checkout | Paid tier available from the vendor; the WordPress.org listing does not draw a clear free-versus-pro line, so price the upgrade on their site before you depend on any specific feature | Read the rating properly: 4.2/5 looks fine until you see it is 85 five-star reviews and 20 one-star reviews out of 112 — a split verdict, not a consensus. That pattern usually means it works well for the common case and badly for an edge case, so test yours in the first week. 400 installs is a small base for checkout code, and three months without a release is worth watching |
| Orderable | Scheduling (restaurant-shaped) | v1.21.1, 5,000+ installs, 4.6/5 across 40 reviews, tested to WP 6.9.9, PHP 7.4+, updated five months ago. Delivery and pickup days, delivery zones with variable fees, delivery slots, ASAP ordering, lead times and preorder windows, holiday blocking, open-hours restriction, a live order dashboard filtered by delivery versus pickup, receipt printing to a local printer, and a floating cart widget | Orderable Pro adds table ordering, multiple locations, product add-ons, a custom checkout, tipping and SMS/WhatsApp notifications | Built for takeaway and food ordering, and it shows in every screen — if you sell furniture or flowers you will be working around a restaurant’s mental model all day. Tested only to WordPress 6.9.9 and last updated five months ago, which is the weakest maintenance signal in this table. The live order dashboard and receipt printing are genuinely good and nothing else here has them |
| Local Pickup Plus (Woo Marketplace) | Locations | Nothing — paid only | $99/yr for one year, or $158.40/yr on the two-year plan. v2.12.2, updated 13 August 2026. 4.2/5 across 51 verified reviews, 30-day money-back guarantee. Multiple pickup locations with customer selection at checkout, per-product and per-order location restrictions, scheduled pickups with business hours and appointment limits, location-specific product availability, email notifications to the staff at that location, CSV import and export of locations, Google Maps distance sorting, and pickup costs or discounts | This is the locations layer done properly and it is priced accordingly. If you have one shop, you are paying $99/yr for a feature core gives you free. The value starts at two locations and climbs sharply at five. Scheduled pickups are included, but it is a pickup scheduler, not a delivery scheduler — it will not put a delivery date on an order that ships |
| Order Delivery for WooCommerce (Kestrel) | Scheduling | Nothing — paid only | $149/yr. Product page last updated 17 August 2026. Delivery and pickup scheduling side by side, configurable days and time frames, 30 to 60 minute slots with availability calculated automatically, preparation days, order cut-off times, working days and holiday exclusions, per-slot capacity with fully booked slots hidden, delivery ranges by shipping method ("1–3 days" on standard, next day on express), optional tipping and time-slot fees, plus order filtering from the dashboard. Bundled with CheckoutWC Pro | The most expensive scheduler here and no free tier or trial is advertised on the product page, so you evaluate it by buying it — confirm the refund terms at checkout rather than assuming the usual 30 days. Everything it does, the Tyche Pro Starter tier also does for $119/yr on one site. The reason to pay the extra is the capacity-and-cut-off model, which is the cleanest implementation in this list, and the CheckoutWC bundle if you already pay for that |
The honest summary of that table: if you need a delivery date with capacity limits and nothing else, the free Tyche plugin does it and you can stop reading. If you need same-day with a cut-off, you are buying something, and the real choice is $119/yr against $149/yr. If you need multiple pickup points, that is a separate $99/yr purchase that does not overlap with either.
Delivery fees: flat, zone-based, or by distance
Scheduling and charging are separate decisions and most stores conflate them. You can have a beautiful delivery calendar and still charge $8 to drive two blocks and $8 to drive eleven miles. Three ways to price it, in order of how much work they are:
- A flat rate inside one shipping zone. Free, core, five minutes. Draw the zone by postcode, attach a flat rate, done. This is right far more often than store owners believe, and the margin you lose on the far edge of the zone is usually smaller than the cost of maintaining anything cleverer.
- Several zones as concentric rings. Still free and still core: zone A is your inner postcodes at $5, zone B the outer ring at $12, everything else gets shipping only. The cost is maintenance — every postcode list is a thing you now own. WooCommerce shipping methods compared for US stores covers how zones, classes and table rates interact once you have more than two.
- Real distance or drive time. WooCommerce Distance Rate Shipping is $99/yr (v1.9.0, updated 16 September 2026, 3.5/5 from just 6 reviews) and prices by road distance or travel time using Google’s Distance Matrix API. It is the only one of the three that reflects what a delivery actually costs you.
Distance-based rates come with a second bill
Cut-off times are a WP-Cron problem
"Order by 2pm for same-day delivery" sounds like a setting. It is a time comparison that has to be correct at 1:59pm and at 2:01pm, and it fails in two specific ways that no feature list mentions.
The first is the time zone. If your WordPress time zone is set to a UTC offset instead of a city, daylight saving is not handled and your cut-off is an hour wrong for roughly eight months of the year. Fix it under Settings > General by picking an actual city — America/Chicago, not UTC-6. This takes ten seconds and is worth checking even if you think you did it.
The second is scheduling. Anything a delivery plugin does on a timer — rolling the available dates forward at midnight, closing a slot when it fills, releasing a held capacity slot from an abandoned order — usually runs as a WordPress scheduled event, and WP-Cron only fires when somebody visits the site. On a local store with no overnight traffic, a job scheduled for 3am runs whenever your first morning visitor arrives, which might be 7:40am. Your customers see yesterday’s dates until then. The missed schedule error in WordPress covers switching to a real system cron, which is the fix for this and for every other quiet-hours scheduling bug on the same site.
Test the cut-off before you launch, not after the first angry phone call: set it to two minutes from now, place a test order, and check the date options change. Then set it back.
Checkout caching and the delivery date field
A delivery date picker renders live availability: which days are open, which slots still have capacity, whether today is still same-day eligible. That is the same problem a booking calendar has, and it has the same answer — it cannot be served from a full-page cache.
In practice your cart and checkout pages are already excluded by any competent caching setup, so the picker itself is usually fine. The trouble starts when the picker lives somewhere else. If you put the delivery date selector on the product page or in a cart widget — several of these plugins offer a shortcode or block precisely for that — you have just put live availability on a cached page, and customers will pick slots that filled up an hour ago and get rejected at checkout. That reads to them as a broken store.
Either keep the picker on checkout where the cache already excludes it, or exclude every page you put it on and accept the performance cost. WooCommerce caching plugins: what breaks and what works covers which plugins set store exclusions automatically and which need them written by hand.
One more thing worth doing before you migrate anything: find out where your current delivery data actually lives. With High-Performance Order Storage enabled, order meta is in wp_wc_orders_meta, not wp_postmeta, and a plugin swap that does not carry the meta key across loses every scheduled delivery on your open orders.
# Not sure whether you are on HPOS at all? This answers it.
# "yes" means order meta lives in wp_wc_orders_meta, not wp_postmeta.
wp option get woocommerce_custom_orders_table_enabled
# Find the meta keys your delivery plugin writes, most-used first,
# before you change plugins.
wp db query "SELECT meta_key, COUNT(*) AS rows_found
FROM wp_wc_orders_meta
GROUP BY meta_key
ORDER BY rows_found DESC
LIMIT 30;"
# Then count the orders still open that carry one, substituting the
# key you found above for the placeholder.
wp db query "SELECT COUNT(*) AS open_orders_with_date
FROM wp_wc_orders o
JOIN wp_wc_orders_meta m ON m.order_id = o.id
WHERE m.meta_key = '_your_delivery_date_key'
AND o.status IN ( 'wc-processing', 'wc-on-hold' );"
If the first command returns nothing or no, you are not on HPOS: your order meta is still in wp_postmeta keyed by post_id, so query that table instead. Change the table prefix in both queries if yours is not wp_, and take a database backup before you run anything that writes.
Dispatch: who actually drives the van
Layer three, and the one most stores reach last. The order is paid and scheduled; now it needs a person attached to it, a status that is not "Processing", and a way for that person to see their runs on a phone without you giving them admin access to your store.
The established free option is Local Delivery Drivers for WooCommerce by powerfulwp — v3.0.1, 800+ installs, 4.3/5 across 18 reviews, tested to WordPress 7.0.6, updated two weeks ago. The free version gives you a driver user role, custom order statuses (Driver Assigned, Out for Delivery, Failed Delivery Attempt), manual assignment, a mobile-friendly driver view and automatic order notes. Route optimisation, live customer tracking, SMS and WhatsApp alerts, proof of delivery with signatures and photos, automatic assignment and driver commissions are in the paid tier.
My own Delivery Manager for WooCommerce does the same job from the other direction — disclosure: I build and maintain it. It adds a Delivery Person role, AJAX driver assignment from the order screen, a visual delivery timeline, automatic order notes on status changes, a driver dashboard inside My Account, and a customer-facing progress view with the expected date and the assigned person. It is v1.2.1, updated three days ago, tested against WordPress 7.1.2 and built for HPOS and block checkout.
Judged by the same criteria as everything else above
Whichever you use, the dispatch layer generates mail: assignment notices to drivers, status updates to customers, failed-delivery notes. WordPress sends that through PHP’s mail() by default, straight from your web server, which is the exact sending pattern mailbox providers treat as suspicious — and a delivery notification that lands in spam costs you a phone call every time. Route it through authenticated SMTP with SPF, DKIM and DMARC before you scale the driver count. WooCommerce SMTP plugins compared for order emails covers the options and what each one verifies.
What to pick for your situation
- One shop, customers collect, you do not care when. Core Local Pickup. Free, five minutes, nothing to maintain. Decide the pickup tax question deliberately and move on.
- You deliver and need a date with a daily cap. Order Delivery Date for WooCommerce, free tier. Capacity limits and time slots are in it, 10,000+ installs behind it, and it costs nothing to find out whether you also need cut-offs.
- You promise same-day with a cut-off. Now you are paying. Tyche Pro Starter at $119/yr on one site is the cheaper route and the one with a public free tier you have already tested. Kestrel’s Order Delivery at $149/yr has the cleaner capacity-and-cut-off model and is bundled with CheckoutWC Pro, so if you already pay for that it is effectively free.
- Two or more pickup locations with different stock. Local Pickup Plus at $99/yr. Nothing free does per-location product availability, and working around it with product visibility rules costs more hours than the licence costs dollars.
- Takeaway, food, or anything with a kitchen. Orderable, with your eyes open about the WordPress 6.9.9 tested-up-to flag. The live order dashboard and printed tickets are worth real money on a busy Friday and nothing else here has them. Test it on staging against your WordPress version first.
- Drivers, not dates. Local Delivery Drivers for WooCommerce, free tier, and buy the pro tier when you need route optimisation or proof of delivery. This is a separate problem from scheduling and you can solve it independently.
- Customers book a service rather than receiving goods. Wrong category entirely. A haircut or a consultation is a bookable product with resources and availability rules, not a delivery date — WooCommerce booking plugins compared is the list you want.
Frequently asked questions
Does WooCommerce support local delivery without a plugin?
Partly, and further than most people expect. WooCommerce core ships Local Pickup as a shipping method you add per zone, and you can build local delivery out of shipping zones and flat rates: draw a zone around your postcodes, attach a flat rate, and only customers inside it see the option. What core has no concept of is time. There is no delivery date, no time slot, no daily capacity and no cut-off anywhere in it. If "when" matters to your customers, that is the point at which you need a plugin.
Is there a free WooCommerce delivery date plugin with capacity limits?
Order Delivery Date for WooCommerce by Tyche Softwares is the one that qualifies. Its free version includes daily delivery capacity limits and time slot selection with bulk slot generation, alongside delivery weekdays and holiday blocking, and it states support for both block and classic checkout plus High-Performance Order Storage. 10,000+ active installs and 4.3/5 across 61 reviews. The catch is that same-day and next-day cut-off times are a Pro feature, and cut-offs are what most stores discover they need in week two.
Why does my delivery date field not show on block checkout?
Almost always because the plugin was written for the classic checkout template and has not been updated for the Cart and Checkout blocks, which need extensions integrated through the Store API. The symptom is exactly this: no error, no warning, just no field. Two things to check before you blame the plugin. First, confirm your checkout page actually uses the Checkout block rather than the [woocommerce_checkout] shortcode — edit the page and look. Second, check the plugin’s WordPress.org page for an explicit statement about block checkout support; vendors that have done the work say so prominently. If it is silent on the subject, assume it has not been done.
How is sales tax calculated on a WooCommerce local pickup order?
By default WooCommerce uses your store’s base address rather than the customer’s when local pickup is selected, on the reasoning that the sale happens where the goods change hands. Whether that matches your obligations depends on your state’s sourcing rules, and it is not a question to settle from a blog post — ask whoever files your returns. Mechanically, the woocommerce_apply_base_tax_for_local_pickup filter turns the behaviour off so your normal tax configuration applies, and the woocommerce_countries_base_postcode and woocommerce_countries_base_city filters let you keep base-address taxing but point it at the pickup location instead of your registered address. Put those in a site-specific plugin, never in a theme.
Do I need a pickup plugin if I only have one location?
No. With one location, core Local Pickup does the visible job: the customer chooses collection instead of shipping and pays no delivery fee. Local Pickup Plus at $99/yr earns its price on the second location and clearly on the fifth, because it adds per-location product availability, per-product location restrictions, location-specific staff notifications and CSV import of locations. The one reason a single-location store might still want it is scheduled pickups with business hours and appointment limits — but compare that against a delivery-date plugin doing the same thing for less, since several of them handle pickup slots too.
How do I charge delivery by distance in WooCommerce?
Three options, and the free one is usually good enough. Concentric shipping zones built from postcodes give you rings at different flat rates using nothing but core, and cost you only the maintenance of the postcode lists. Table rate shipping adds weight and cart-value tiers on top. True road distance or drive time needs WooCommerce Distance Rate Shipping at $99/yr, which calls Google’s Distance Matrix API at checkout and therefore requires a Google Cloud account with billing enabled — so your shipping calculator carries a usage bill that scales with checkout traffic. Start with zones. Move to distance pricing only when you can point at the orders that are losing you money.
What is the difference between a delivery date plugin and a booking plugin?
What is being scheduled. A delivery date plugin schedules the fulfilment of a normal product the customer has already chosen — the date is an attribute of the order, added at checkout. A booking plugin makes the time itself the thing being sold, so the product has a calendar instead of a stock number, plus resources, durations and its own booking status running alongside the order status. If you sell goods and deliver them, you want this category. If you sell someone’s time, you want the other one, and a delivery-date plugin will never model it correctly no matter how you configure it.
Will switching delivery plugins lose the dates on my open orders?
Yes, unless you move the data deliberately. Each plugin writes the delivery date to its own order meta key, and the new one will not read the old one’s. Before you switch, find the key: with High-Performance Order Storage enabled, order meta lives in wp_wc_orders_meta rather than wp_postmeta, and a grouped count of meta_key on that table shows you exactly what your current plugin stores. Then either fulfil your open orders before the switch, or copy the values across to the new key. Take a database backup first, and do the switch on a quiet day rather than a Friday.
The short version
Name your layer first. Scheduling, locations or dispatch — and then check whether WooCommerce core already covers the thin version of it, because for single-location pickup and flat-rate zone delivery it does, for nothing.
After that the money is easy to predict. A delivery date with capacity limits is free. Same-day with a cut-off is $119 to $149 a year. A second pickup location is $99 a year. Distance-based pricing is $99 a year plus a Google API bill. Drivers are free until you want route optimisation. Nothing in this category should cost you more than that, and if a vendor is quoting more, they are selling you a layer you have not established you need.
Then spend your first week on the two things that actually break local delivery stores: whether your cut-off is correct at 2:01pm in the right time zone, and whether the slot capacity you configured is really being enforced. Neither is on a feature comparison page, including this one, and both cost you a Saturday when they are wrong.

Leave a Reply to This Post