BoxCart is a standalone click and collect ordering plugin for WordPress. Give your customers a polished pickup-ordering experience with configurable time slots, a modern card-view storefront, customer accounts, and a built-in admin dashboard - all without WooCommerce.
Whether you call it local pickup, click and collect, store pickup, or order ahead, it is the same idea: customers order online and collect in person, at a time that suits them. BoxCart handles the whole flow, from storefront to time slots to order management, without the weight of a full e-commerce platform.
Built for: farm shops, bakeries, butchers, delis, greengrocers, fishmongers, florists, coffee roasters, pizza shops, meal-prep kitchens, and any business where customers order ahead and collect.
What you get in the free build
- Guided Setup - a five-minute wizard creates your shop pages, your collection point and time slots, your first product, how customers pay, and VAT.
- Click & collect ordering with configurable time slots on your pickup schedule. Set up one day, then copy its slots to the others.
- Order cut-offs your way - close orders a set number of hours before each slot, or at a set time before the collection day, such as 1pm the day before.
- One pickup location with its own address, collection instructions, opening hours, and per-slot capacity.
- Card-view storefront with category filters, search, and mini-basket.
- Sell by unit, weight, or pack - offer multiple quantity options per product, such as single units, 500g, 1kg, or a 6-pack.
- Customer accounts with order history, plus optional up-front registration.
- Admin order management with a status lifecycle (pending, processing, ready, completed, cancelled). Delete cancelled orders, such as test orders.
- Order export to CSV from the orders screen, filtered by date, status, and location.
- Transactional email templates (order confirmation and status updates) with branding controls and a live preview editor. Plus a new-order admin notification.
- Cash on collection and bank transfer payment methods.
- 5 Gutenberg blocks and 5 shortcodes for embedding BoxCart anywhere - products, basket, checkout, account, mini basket.
- Developer-friendly - 50+ action hooks and 35 filter hooks, CSS custom properties throughout, zero external PHP dependencies.
- Cache-resilient - pages render as empty shells that hydrate via AJAX, with a bypass cookie for customer sessions. Compatible with Cloudflare, WP Rocket, LiteSpeed, and similar.
- Translation-ready with a
.pot file included.
- GDPR-aware - self-hosted fonts, optional full data cleanup on uninstall.
Why BoxCart?
- Standalone - no WooCommerce required. A single, focused plugin with its own data model.
- Time-slot ordering baked in. Configure your schedule, slot length, and capacity. Customers see live availability.
- Developer extensible - documented hooks, filters, and CSS custom properties.
- Not a stripped-down demo - the free build is a complete, working click & collect store.
Paid Pro upgrade (optional)
A paid Pro build is available from
boxcart.dev with additional features:
- Multiple pickup locations
- Stripe card payments (with Apple Pay, Google Pay, Link, Klarna, PayPal, Afterpay)
- Table-view storefront
- Members-only pricing (hide prices and the add-to-cart button from logged-out visitors)
- Customer favourites and one-click reorder
- Two-way order messaging
- Customer-side order changes, including orders paid by card: the difference is refunded automatically, or paid at collection
- Card refunds from the order screen
- Holiday closures and per-date capacity overrides
- Printable pick lists & packing slips
- Sales reports
- CSV product & category import/export
- 195+ customisation settings
Pro is optional - the free build will continue to receive updates and is genuinely useful on its own.
Live demo
Three demo stores at
demo.boxcart.dev - a greengrocer, a bakery, and a butcher - each configured differently to show the range of what BoxCart can do.
Documentation
Full documentation at
docs.boxcart.dev covering every admin workflow and the developer API.
- In your WordPress admin, go to Plugins → Add New.
- Search for BoxCart, then click Install Now and Activate.
- Guided Setup opens. In about five minutes it creates your Shop, Basket, Checkout and My Account pages, adds your collection point with its days and time slots, adds your first product, and asks how customers pay, who your order emails come from, and whether you charge VAT. Any step can be skipped and done later from BoxCart → Setup.
- Add the rest of your products under BoxCart → Products, and fine-tune each day's time slots under BoxCart → Locations.
- Place a test order end-to-end, then cancel and delete it from BoxCart → Orders.
Prefer to use your own pages? Add the matching BoxCart shortcode or Gutenberg block to each page and choose them in
BoxCart → Settings → General → Page Setup.
Full step-by-step walkthrough at
docs.boxcart.dev/getting-started.
1.5.1
- Fix: Accounts customers create through BoxCart now always get the Customer role, whatever your site's default role for new users is set to. If any existing customer accounts have more access than a customer needs, BoxCart points them out so you can check them.
- Fix: Returning customers can sign in right on the checkout page and come straight back to it, with the collection slot they picked still selected.
- Fix: The basket panel and basket page show each item's unit (such as kg or bunches) when prices are hidden, and plain-text shop emails list items in your category order, show "&" correctly, include a working order link and end with the number of items.
1.5.0
- New: Guided Setup gets your shop ready in about five minutes: pages, collection point and time slots, first product, payments and VAT.
- New: Copy a day's time slots to other days.
- New: Customers can change orders they've paid for by card. If the order costs less, the difference goes back to their card; if it costs more, they pay the rest when they collect (BoxCart Pro).
- New: Refund card payments from the order screen, or when you cancel an order (BoxCart Pro). Refunds you make in your Stripe dashboard show on the order too. Delete cancelled orders, such as test orders.
- Improvement: Much faster with hundreds of products, a simpler checkout with no billing address, and receipts that show VAT clearly whether your prices include it or add it on top, plus what's been paid, refunded and is left to pay.
- Fix: Weighed quantities (such as 1.5 kg) are no longer rounded to whole numbers when BoxCart is deactivated and reactivated. Orders already affected are repaired where they have prices.
- Fix: A declined card no longer leaves customers stuck: their basket stays so they can try again (BoxCart Pro).
- Fix: Customers can't change an order once its order cut-off has passed, and many smaller fixes to item counts, quantities, emails, settings and theme styling.
1.4.0
- New: Choose when orders close. As well as a set number of hours before each collection slot, you can now close orders at a set time before the collection day, such as 1pm the day before. Customers see the rule above the collection dates.
- Fix: The order lead time now uses your site's timezone. During British Summer Time, slots could be booked up to an hour later than your lead time allowed.
- Fix: Dates where every slot has passed its cut-off now show as closed, instead of looking bookable.
- Removed: The "Slot Cutoff Time" setting, which had no effect. Use "When Orders Close" instead.
1.3.2
- Improvement: Updated Freemius SDK to the latest version.
1.3.1
- Security: Important for BoxCart Pro shops taking card payments. An order is now only marked as paid when Stripe confirms the full amount was paid for that particular order.
- Security: When customers change an order (BoxCart Pro), prices, stock and any new collection slot are now checked on your site, exactly as at checkout. The items on an order already paid by card can no longer be changed online.
- Security: A collection slot is now only held for a basket with something in it, so empty baskets can no longer make slots look fully booked.
- Security: SVG image uploads are now limited to administrators, and are checked for scripts before they are accepted.
- Fix: Changing an order (BoxCart Pro) now recalculates its VAT or sales tax.
- Fix: Paid orders now stay at "Order Received" until you move them on, like every other order. Card payments, and payments you confirm yourself, used to jump straight to "Being Prepared" and email the customer that their order was being prepared.
- Fix: The time customers have to change an order (BoxCart Pro) is now measured in your site's timezone. Outside the UK it could run out early, or never open at all.
- Fix: Activating a BoxCart Pro licence now works on sites that had already opted in to updates on the free version. The "Enter your licence key" button used to return to the dashboard instead of opening the licence box.
- Improvement: Tested with WordPress 7.1 and PHP 8.5, plus a Freemius SDK update and smaller fixes and hardening throughout.
1.3.0
- New: Two options for shops that do not open every day (Settings → Collection → Slot Selection). Hide the dates you are closed instead of showing them greyed out, and choose whether customers see a "slots left" count against each time slot.
- Fix: Important. Stores set up using the Setup screen could end up with no payment methods on the checkout page and no collection slot bar on the products page, even though Settings showed both as switched on. Any settings you have saved yourself are left exactly as they are; only genuinely missing values are filled in, automatically, on update. Please do check your checkout after updating.
- Fix: The slot selector on the products page always showed "slots left" in English, ignoring the site's language.
1.2.1
- Fix: the order link in admin notification emails now opens the correct order.
- Tidy-up: corrected wording across the admin, help panels, and this listing.
1.2.0
- New: Up-front customer registration. A new option (Settings, Accounts) lets customers create an account before they order, not only after checkout. The branded registration form runs through WordPress's native registration flow, so customers never type a password into BoxCart.
- Fix: Checkout could log a database notice ("Unknown column 'sort_order'") when a basket contained products with more than one quantity option. The fallback pricing lookup now queries the correct column.
1.1.0
- New: Guided setup. A new "Setup" screen (always available in the BoxCart menu) shows a live checklist of what is left to do, with one-click creation of the Shop, Basket, Checkout, and My Account pages. It drops in the correct shortcode, assigns each page in Settings, and reuses any pages you already made instead of duplicating them.
- New: The dashboard Quick Start guide now stays available with live progress ticks until setup is complete, and can be dismissed early, rather than disappearing as soon as you add your first product. The welcome screen also links straight to Guided Setup.
- New: "BoxCart Today" dashboard widget on the main WordPress dashboard, showing today's collections, takings, and this week's order counts at a glance.
- Improvement: Storefront shortcodes can be copied with a single click from the new Setup screen.
- Improvement: A "Hide Setup page" option (Settings, Misc, Advanced) removes the Setup screen from the menu once you have finished setting up, and can be switched back on at any time.
1.0.1
- Fix: Fatal error when previewing email templates from the Settings → Emails screen. The mock-order helper was missing several methods that the email templates expect, causing "Call to undefined method BoxCart_Mock_Order::get_view_url()" and similar errors. Thanks to @dansart for the report.
- Fix: Mini Basket block did not enqueue its assets when placed in a global block-theme template part (e.g. the site header), so the badge appeared unstyled and the item count never hydrated on non-BoxCart pages. The page-detection now checks active header / footer template parts for BoxCart blocks.
- Fix: Currency symbol on the "Add new product" screen could fall back to £ even when the shop's configured currency was different. The admin product editor now reads the currency symbol from the localised settings array instead of querying the DOM, which fixed the case where no quantity-type row had yet been rendered.
1.0.0
Initial public release.
- Click & collect ordering with configurable time slots.
- Pickup location with opening hours, slot capacity, and per-slot availability.
- Guest checkout by default - customers can place an order without creating an account, and view their order any time via a per-order magic link emailed to them.
- Optional customer accounts with order history. Sign-in, lost-password, and password-reset all use WordPress's native authentication flow, styled to match the storefront.
- Admin order management with a status lifecycle (pending, processing, ready, completed, cancelled).
- Cash on collection and bank transfer payment methods.
- Seven transactional email templates with branding controls and live preview.
- Card-view storefront with category filters, search, and mini basket.
- 5 Gutenberg blocks and 5 shortcodes.
- Cache-resilient architecture with AJAX hydration and bypass cookie.
- Developer API - 50+ action hooks, 35 filter hooks, CSS custom properties.
- WordPress 6.0+ / PHP 7.4+.