All articles
2026-08-14 · Dreamfox Team

Block Delivery Dates in WooCommerce

Set blackout delivery dates in WooCommerce: holidays, closures and carrier blackouts, recurring weekday rules, and per-product date restrictions.

Delivery calendar grid with several days crossed out as unavailable blackout dates

Every delivery calendar needs a list of days that must not be selectable. Christmas Day is the obvious one. Less obvious are your own stocktake week, the Friday the whole team is at a supplier event, and the carrier blackout days that appear in late November when the network runs at capacity. If those dates are pickable, customers will pick them — and each one becomes a phone call.

Four categories of blocked date

Keeping them separate makes the list maintainable:

  1. Recurring weekdays. Sundays, and often Mondays when there is no Sunday dispatch. Express these as a weekday rule, never as individual dates.
  2. Public holidays. Fixed per country and worth entering a full year ahead. Moving holidays like Easter need re-entry annually.
  3. Company closures. Stocktake, team days, refits, the week between Christmas and New Year.
  4. Carrier blackouts. Peak-season days when your carrier refuses new bookings, plus their own holiday schedule, which frequently differs from yours.

Recurring rules beat date lists

A store that blocks Sundays by adding 52 dates every January will eventually forget. A weekday rule ("never Sunday") holds indefinitely and survives the person who set it up leaving. Use explicit dates only for the exceptions that genuinely are exceptions.

Same logic for holidays: if your plugin or code supports a country holiday set, use it and add only your local extras on top.

Enforce the list twice

A blocked date greyed out in the calendar is a hint, not a guarantee. Validate the submitted date again on the server:

```php add_action( 'woocommerce_checkout_process', function () { $date = isset( $_POST['delivery_date'] ) ? sanitize_text_field( wp_unslash( $_POST['delivery_date'] ) ) : '';

if ( $date === '' ) { return; }

if ( store_is_blocked_delivery_date( $date ) ) { wc_add_notice( __( 'We cannot deliver on that date. Please choose another.', 'your-textdomain' ), 'error' ); } } ); ```

Client-side only enforcement fails in three ordinary ways: a cached checkout page from before you added a date, a modified request, and a customer who left the tab open across midnight so "tomorrow" is no longer what it was.

Per-product blocked dates

Some restrictions belong to the product rather than to the store. Fresh produce cut off before a holiday weekend, made-to-order furniture with a fixed production calendar, installations that need a fitter. Those products carry their own unavailable days.

In a mixed cart, apply strictest-wins: a date is selectable only if every item in the cart can make it. Anything more permissive promises a date that one of the products cannot hit, which is exactly the failure the calendar was supposed to prevent.

Doing it as configuration

Our Delivery Date & Timeslot for WooCommerce plugin holds all four categories as settings — weekday rules, individual blocked dates, per-product restrictions and lead times — and enforces them in the picker and again at checkout. The practical benefit is not the code you avoid writing; it is that a shop manager can block next Tuesday at 9am on the morning the van breaks down.

Blocked dates work alongside two other rules worth reading: the cut-off time that removes today after your dispatch deadline, and slot capacity that stops the remaining days filling beyond what the route can carry.

An annual maintenance habit

Put a recurring reminder in November: add next year's public holidays, confirm the Christmas closure dates, and ask your carrier for their peak blackout list. Ten minutes a year prevents the single most common delivery-date failure, which is a January order accepted for a day the store is shut.

Also check the list after any change of carrier. Their blackout calendar rarely matches the previous one, and the old dates linger silently until a customer finds them.

FAQ

How do I block specific delivery dates in WooCommerce?
Keep a list of blocked dates and disable them in the checkout date picker, then re-validate the submitted date on the server. Recurring closures are better expressed as weekday rules than as hundreds of individual dates.
What dates should a store block?
Public holidays, your own closures such as stocktake or staff days, carrier blackout days around peak season, and any weekday you never deliver. Add the following year's holidays before December.
Can I block dates for one product only?
Yes. Products with their own constraints — fresh goods, made-to-order items, installations — can carry their own blocked days, and the checkout should apply the strictest combination in a mixed cart.
How do I handle a cart where two products have different blocked dates?
Use strictest-wins: a date must be available for every item in the cart to be selectable. It is the only rule that never promises a date one of the products cannot make.
Why do blocked dates still appear at checkout?
Usually a caching layer serving an old calendar, or a rule applied only in JavaScript. Exclude the checkout from page caching and enforce the same list server-side during checkout validation.

This article is part of our WooCommerce delivery dates topic hub, where the related plugins and guides live together.

Keep reading