=== Dayslot – Delivery Date, Time Slots & Pickup for WooCommerce ===
Contributors: creonix, freemius
Tags: delivery date, time slots, delivery calendar, pickup, woocommerce delivery
Requires at least: 6.2
Tested up to: 7.1
Requires PHP: 7.4
Requires Plugins: woocommerce
Stable tag: 1.1.14
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

Customers choose delivery or pickup, a day and a time slot at checkout. Prices per slot and day, daily limits and a calendar of your deliveries.

== Description ==

[//]: # (VIDEO: put the YouTube link here, alone on its own line, e.g. https://www.youtube.com/watch?v=XXXXXXXXXXX)

Dayslot is for shops that deliver on a chosen day and at a chosen time: flowers, cakes, balloons and party decorations, gifts, catering and restaurants, groceries, furniture and anything else you bring to the door or let customers collect.

At checkout the customer goes through three short steps — **how** (delivery or pickup), **which day**, **what time** — on a calendar made for phones. Busy days and full time slots can't be picked, the price of each option is shown before choosing, and the delivery price lands in the WooCommerce total as a normal shipping cost. You see every order on a delivery calendar and move it with drag & drop.

Right after activation a short setup wizard (about 5 minutes) asks for your days, times, prices and pickup address — and your checkout is ready.

= Delivery days and time slots =

* Time windows (8–10, 10–12 …), an exact time (every 15 minutes or any step you like) and a night window that runs past midnight
* Each kind of delivery shows its hours and an optional note ("the courier calls 15 minutes before")
* Working days, days off, blocked dates and holidays (your own list; Polish public holidays can be added automatically)
* Minimum notice (e.g. "order at least 2 hours ahead") and how far ahead customers can book
* Limits per day and per time window; an exact time takes a place in the window it falls into, so you are never double-booked
* Booked times can be greyed out, hidden, or replaced by your message ("Already booked: 10:00–12:00. Please call us.")
* Block a whole day or a single time window with one click in the calendar
* Every order is checked on the server, so two customers can't take the last place at the same time

= Prices =

* One clear price table: kind of delivery × day type (Monday–Saturday, Sunday, holiday)
* Every option shows its price at checkout; the price becomes the WooCommerce shipping cost
* Free delivery from an order value you choose — or always free — and the options that are free for the cart say "free"
* A small extra charge for small orders
* Price breakdown on the order, in e-mails and on the thank-you page

= Pickup =

* A "Pickup" button with your address next to "Delivery"; the customer picks the day
* Pickup or delivery is saved on the order and shown in the calendar in its own colour

= Checkout =

* Works with the classic checkout and the WooCommerce Checkout block
* Placed automatically before or after the address, or exactly where you want with the "Delivery date & time" block, an Elementor widget or the `[dayslot_checkout_field]` shortcode
* Works inside checkout builders such as FunnelKit, CartFlows and Fluid Checkout
* Appearance tab with a live preview on a phone and a computer: colours, corners, sizes, cards or buttons, list, grid or drop-down and ready-made looks — or simply your theme's look
* "Match my checkout": the picker takes the colours, corners and font of your checkout (FunnelKit, CartFlows, Elementor…)
* Dates as a calendar or as a drop-down list of free dates
* The cart shows the chosen delivery date, or "Delivery possible from …" — also in side carts (FunnelKit Cart, the mini cart); optionally under the price on product pages (classic themes, block themes and Elementor Pro product templates) and anywhere with the `[dayslot_earliest]` shortcode
* "Add to calendar" (Google, Apple, Outlook) for your customers on the thank-you page, in My Account and in e-mails
* Keyboard friendly, screen-reader labels, large touch targets

= For you and your team =

* Delivery calendar in the admin: month, week and day views, order cards with phone, address, products and price
* Filters in the calendar: delivery or pickup, order status, product
* Drag an order to another day or time, with the option to e-mail the customer
* Change the date and time on any order
* The delivery details are also saved as plain custom fields on the order, so the WooCommerce mobile app shows them ("View custom fields")
* E-mails with the delivery date and time in the WooCommerce look
* Private calendar link (.ics) for Google Calendar, Apple Calendar or Outlook
* Setup wizard, a Quick start checklist and a Help page with answers
* Texts tab: change any text customers see, without code
* Modules tab: switch off what you don't need — it isn't loaded at all

= Fast and translated =

* About 9–10 KB of JavaScript and CSS (gzipped), loaded only on the checkout; nothing on your home, shop or product pages
* No jQuery UI, React or Moment on your shop
* Translated into Polish, German, French, Spanish, Italian, Portuguese (Brazil), Dutch, Czech, Ukrainian and Russian; follows your WordPress language
* HPOS (High-Performance Order Storage) compatible

= Dayslot Pro =

Dayslot is fully usable for free. If you need more, Dayslot Pro adds (14-day free trial, no card needed):

* Pickup times: the customer chooses the pickup hour; your own opening hours, limits and days off for pickup
* Several pickup points, each with its own hours, days off and limits; or branches in different cities, each with its own delivery hours
* Delivery zones for any city: a city border from the map, your own drawn area or a radius; outside the zone a price per km of road distance (with your own Google Maps Platform key)
* A delivery price calculator for customers on any page (`[dayslot_delivery_calculator]`): address and day → the price of every delivery option, with its own settings and texts
* A delivery cost calculator for phone orders in the admin, with the route on a map
* Flexible free delivery (e.g. free from 300 but the night always paid, not on Sundays), delivery price by order value and a minimum order for delivery (or delivery hidden below it)
* Special dates (Valentine's Day, Mother's Day…) with an extra price and their own limit
* "As soon as possible" delivery today and extra prices for same-day and next-day delivery
* Six e-mail designs with your colour and logo; your own subject, text and contents for every e-mail, with a preview and a test e-mail
* Extra checkout fields: text, list, checkbox, phone, time and photo upload, with conditions and prices
* Customers change the delivery date themselves in My Account, with your own note
* Reminder e-mails and a daily plan, order cut-off times and extra preparation days per product category
* Google Calendar sync in real time, your own calendar entries (orders by phone or social media) and calendar import
* Orders completed by themselves after delivery, a "your order is ready" e-mail and a review request
* The whole checkout and My Account styled to match, custom CSS and an availability calendar widget

More about Pro: [creonix.pl](https://creonix.pl/)

= Documentation & support =

* The setup wizard and the Help page inside the plugin (Delivery calendar → Help) cover most questions.
* Questions and bug reports: the [support forum](https://wordpress.org/support/plugin/dayslot/) of this plugin.
* Source code: every JavaScript and CSS file is included as readable source next to its minified copy (`*.min.js` / `*.min.css`, made with terser and csso).

== Installation ==

1. In your WordPress admin go to **Plugins → Add New Plugin**, search for **Dayslot**, click **Install Now** and **Activate**. (Or upload the zip under Plugins → Add New Plugin → Upload Plugin.)
2. WooCommerce must be installed and active.
3. The setup wizard opens: working days and limits, delivery times and prices, pickup, placement and look. It takes about 5 minutes and every step can be skipped.
4. The "Delivery by date" shipping method is added to your shipping zones automatically. Place a test order and you will see it in **Delivery calendar → Calendar**.
5. Optionally, join Freemius for security and feature notices — you can skip this; the plugin works the same.

You can run the wizard again at any time (Delivery calendar → Setup wizard). The Quick start list at the top of the settings shows what is still missing.

== Frequently Asked Questions ==

= Does it work with the Checkout block and with the classic checkout? =

Yes, with both. On the Checkout block the date picker appears in the checkout form automatically; you can also place it with the "Delivery date & time" block.

= Does it work with Elementor, FunnelKit, CartFlows or Fluid Checkout? =

Yes. The picker finds its place in their checkout forms. With Elementor you can also drop the "Delivery date & time" widget exactly where you want it.

= How do the limits work? =

You set how many deliveries you accept per day and per time window. When a day or a window is full it can't be chosen any more. An order for an exact time (say 10:30) also takes a place in its window (10–12). Cancelled orders free their place automatically.

= Can I block holidays and days off? =

Yes: choose your working days, add single dates or a list of holidays, or block a day straight from the calendar. Polish public holidays can be added automatically; holidays can also have their own price.

= Can different days cost more? =

Yes. Each delivery option has a price for Monday–Saturday, for Sunday and for holidays.

= Can I keep my own shipping methods and prices? =

Yes. Switch off "Delivery price (own shipping method)" in Settings → Modules; customers then still choose the date and time, and your shipping methods set the price.

= Which languages are included? =

English, Polish, German, French, Spanish, Italian, Portuguese (Brazil), Dutch, Czech, Ukrainian and Russian. The plugin follows the language of your site; in Settings → Texts you can choose another language or change any text.

= Will it slow down my shop? =

No. Nothing from Dayslot loads on your home, shop or product pages. On the checkout it adds about 9–10 KB (gzipped) and one or two small database queries; availability is cached.

= Is it compatible with HPOS? =

Yes, with High-Performance Order Storage and with the older order storage.

= Does it work with caching plugins? =

Yes. The checkout is not cached by caching plugins, and the free times are loaded live. If you use page caching, make sure your checkout page is excluded (most caching plugins do this for WooCommerce automatically).

= What happens to my data if I delete the plugin? =

Nothing is deleted. Your settings stay in the database and the chosen dates and times stay saved on your orders, so reinstalling Dayslot brings everything back. While the plugin is removed, the delivery dates are simply not shown.

= Can customers change the date later? =

You can change it on any order in the admin or by dragging it in the calendar, with an e-mail to the customer. Letting customers change the date themselves in My Account is part of Dayslot Pro.

== Screenshots ==

1. The checkout on a phone: delivery or pickup, the day, then the time with its price.
2. The WooCommerce Checkout block on a computer: booked times show your message, the delivery price appears in the order summary.
3. The same steps in the classic checkout.
4. Delivery options and prices: time windows, exact time and night, prices per day type.
5. The delivery calendar: a month with all deliveries and pickups.
6. A day in the calendar with the order card (customer, phone, address, products, price).
7. The setup wizard: ready in about 5 minutes.
8. The Appearance tab with a live preview of the picker.
9. An order in the admin with the delivery date, time and price breakdown.
10. The order e-mail to the customer with the delivery date and time.

== Changelog ==

= 1.1.14 =
* Multilingual shops (Polylang, WPML): checkout texts follow the page language. Saved texts that are the plugin's defaults (for example "Dostawa", "Data dostawy") show the default of the page language; the shop's own texts (names of the delivery kinds, checkout fields, texts from the Texts tab) can be translated in Languages → Strings translations (Polylang) or WPML → String Translation, group "Dayslot". A language chosen in Settings → Texts applies to the main language only.

= 1.1.13 =
* Changing the date of an order in My Account: the order's own date can be kept with another time (the order no longer takes away its own place), and minimum order values use the order's value, not the current cart.
* Pickup orders say "Change pickup date" and "Your pickup date has been changed".
* "Delivery possible from …" on product pages stays up to date on cached pages, and reads well for today and tomorrow ("Delivery possible from tomorrow").
* The delivery calendar shows, under each day customers can't choose at checkout, why (for example an imported calendar or "Minimum notice").

= 1.1.12 =
* A time exactly "Minimum notice" away can be chosen (with 120 minutes, at 19:00 a delivery at 21:00 is still possible).
* The delivery calendar shows a line on top: can customers choose today at checkout right now, and if not, why (minimum notice, cut-off time, blocked day, limit…). It also warns when the site time zone is UTC.

= 1.1.11 =
* The date calendar opens on the month of the first free day, also after switching between delivery and pickup (for example when today was the last free-looking day of the month but delivery is not possible today).
* Pro: a minimum order for delivery no longer crosses out today's date in the calendar; the delivery kinds show "for orders from …" instead.

= 1.1.10 =
* Works with page cache plugins (LiteSpeed Cache, WP Rocket, W3 Total Cache, WP Super Cache, Breeze, SiteGround Optimizer): the cached pages are purged when you block or unblock a day or change working days, limits, holidays or delivery kinds, and pages with the date picker are not cached.
* Unblocking a day in the delivery calendar also unblocks the time windows blocked on that day. Days with blocked time windows show "N times blocked" with an "Unblock the times" button in the month view.
* Pro: block only delivery or only pickup on a day, with two buttons under each day of the delivery calendar (module "Block delivery or pickup").

= 1.1.9 =
* Pro: in the price calculator, kinds of delivery that need a bigger order show their price with "for orders from …" instead of looking unavailable.

= 1.1.8 =
* After activation the setup wizard opens right away.
* Admin styles load as a normal stylesheet; form controls built in code are filtered before printing; the setup wizard cleans its fields first.
* Custom CSS moved to Dayslot Pro.
* No trial notices across the dashboard.

= 1.1.7 =
* The delivery date line now also shows in side carts (FunnelKit Cart, the mini cart) and under the price in Elementor Pro product templates and block themes.
* The delivery details are also saved as plain custom fields on the order, so the WooCommerce mobile app shows them ("View custom fields"); can be switched off.
* Fixed: the "+ Add delivery kind" and "+ Add field" buttons in the settings did nothing.

= 1.1.6 =
* Pro: delivery price calculator for customers — the [dayslot_delivery_calculator] shortcode on any page (address and day → the price of every delivery option), with its own settings: what it shows, kinds of delivery, width and every text.

= 1.1.5 =
* The 2-hour window card shows its hours too (e.g. 08:00 – 20:00).

= 1.1.4 =
* "Delivery is always free" switch.
* The kinds of delivery that are free for the customer's cart say "free" at checkout.
* Pro: free delivery rules per kind of delivery (own amount or never free), no free delivery on Sundays / holidays, extra charges can stay paid.
* Pro: minimum order for delivery, with its own amount for each kind of delivery and your own message; below the minimum delivery can be hidden completely (pickup only).
* Pro: delivery price by order value (e.g. from 150 the 2-hour window costs 70, from 300 it is free).

= 1.1.3 =
* All global names use the plugin's own prefix (the Freemius function is now dayslot_fs).

= 1.1.2 =
* E-mail texts saved earlier keep working in every version.

= 1.1.1 =
* Pro: the preview and the test of an e-mail show its real button and link (e.g. your review link and button text).

= 1.1.0 =
* Booked times: grey them out, hide them, or show your message with the booked times. An exact time inside a full window is never offered.
* Free delivery from an order value, and an extra charge for small orders.
* "Match my checkout": colours, corners and font taken from the checkout page (FunnelKit, CartFlows, Elementor and others).
* Dates as a drop-down list of free dates (Appearance).
* The cart shows the chosen date, or "Delivery possible from …"; optionally on product pages; shortcode [dayslot_earliest].
* "Add to calendar" (Google, Apple, Outlook) for customers.
* Pro: E-mails tab with six designs for every Dayslot e-mail (or the WooCommerce look), your colour, logo and footer, and for each e-mail its subject, heading, text and what it shows (delivery details, products with photos, prices, "Add to calendar", contact). Preview and a test e-mail.
* Filters in the delivery calendar: delivery / pickup, status, product.
* The selected button of the "Switch" look is highlighted again inside checkout builders.
* Pro: special dates, "As soon as possible" and same-day / next-day prices, several pickup points and branches, Google Calendar live sync, automatic "Completed" status, "your order is ready" and review e-mails, a note when customers change the date.

= 1.0.2 =
* Readme and plugin directory assets.

= 1.0.1 =
* Dates in a sentence always use the right month form (e.g. Polish "25 października 2026"), whatever the site's date format; English stays "October 25, 2026".
* Clearer price breakdown: "4 km × 2,00 zł = 8,00 zł".

= 1.0.0 =
* First release as Dayslot (previously "Delivery & Event Date Calendar"): delivery or pickup, date and time at checkout, price table per day type, limits, holidays, delivery calendar, .ics link, setup wizard, 10 translations.

== Upgrade Notice ==

= 1.1.14 =
Polylang and WPML: the checkout texts follow the page language.

= 1.1.13 =
Fixes changing the date of an order in My Account (same day, minimum order value) and keeps the product page line up to date.

= 1.1.12 =
A time exactly the minimum notice away can be chosen; the delivery calendar says why today is closed.

= 1.1.11 =
The date calendar opens on the month with the first free day.

= 1.1.10 =
Blocked and unblocked days show up at once on sites with a page cache; unblocking a day frees its time windows too.

= 1.1.9 =
Small improvement to the Pro price calculator.

= 1.1.8 =
The setup wizard opens right after activation; code clean-up for the WordPress.org guidelines.

= 1.1.7 =
Fixes the "+ Add" buttons in the settings; the delivery date line works in side carts and Elementor product templates.

= 1.1.6 =
Pro: delivery price calculator for customers on any page.

= 1.1.5 =
Small fix: the 2-hour window card shows its hours.

= 1.1.4 =
New: "delivery is always free" switch; Pro: flexible free delivery rules, a minimum order for delivery and delivery price by order value.

= 1.1.3 =
Code clean-up for the WordPress.org guidelines.

= 1.1.2 =
Small fix for saved e-mail texts.

= 1.1.1 =
Small fix for the e-mail preview and test e-mails (Pro).

= 1.1.0 =
New: booked-time messages, free delivery from an amount, "Add to calendar", calendar filters, the date in the cart, and "Match my checkout".

= 1.0.2 =
First public release on WordPress.org.

== External services ==

The free version of Dayslot connects to one external service, and only for licensing and optional usage data. Your shop's checkout never contacts any outside service.

= Freemius (licensing, updates, optional opt-in) =

Dayslot uses the [Freemius](https://freemius.com) SDK to handle the optional opt-in, the Pro trial, licenses and Pro updates.

* On the plugin's settings page you may be asked whether to share basic data with Freemius. If you click "Skip", nothing is sent. If you agree, these are sent: your site URL, WordPress and PHP versions, the plugin version, your name and e-mail as an admin, the site language, and (only if you allow it in the opt-in details) the list of plugins and themes.
* When you deactivate the plugin you may be asked for a reason; answering is optional.
* When you open the "Upgrade" page, start the free trial or enter a license key, the plugin talks to Freemius to show the plans, start the trial or check the license.

Freemius [Terms of Service](https://freemius.com/terms/) and [Privacy Policy](https://freemius.com/privacy/).

= "Add to calendar" for customers =

The "Google" link opens Google Calendar in the customer's own browser with the event filled in (date, time, address, order number); your site sends nothing to Google. The ".ics" file is served by your own site. You can switch both off in Settings → Checkout. [Google Terms of Service](https://policies.google.com/terms) and [Google Privacy Policy](https://policies.google.com/privacy).

= Calendar link (.ics) =

The private calendar link is served by your own site. No data is sent anywhere: Google Calendar, Apple Calendar or Outlook fetch the link themselves when you subscribe to it. You can create a new link (and stop the old one) at any time.

= Services used only by Dayslot Pro =

These are not part of the free version and are never called by it:

* **Google Maps Platform** (Geocoding API and Routes API) — only in Pro, only when you enter your own API key and switch on delivery zones. The delivery address (street, postcode, city, country) is sent from your server to Google to find it on the map and measure the road distance; results are cached. [Google Maps Platform Terms](https://cloud.google.com/maps-platform/terms) and [Google Privacy Policy](https://policies.google.com/privacy).
* **OpenStreetMap Nominatim** — only in Pro, only in the admin when you look up a city border or an address while setting up a delivery zone; the city or address you type is sent. [Nominatim Usage Policy](https://operations.osmfoundation.org/policies/nominatim/) and [OSMF Privacy Policy](https://osmfoundation.org/wiki/Privacy_Policy).
* **Google Calendar API** — only in Pro, only when you switch on "Google Calendar (live)" and paste your own service account key. For each order with a delivery date your server sends Google the event: order number, customer name and phone, products, delivery address or pickup point, date and time. Cancelled orders are removed. [Google APIs Terms of Service](https://developers.google.com/terms) and [Google Privacy Policy](https://policies.google.com/privacy).
* **OpenStreetMap map tiles** — only in Pro admin screens with a map (delivery zones, cost calculator); your browser loads map images from tile.openstreetmap.org. [Tile Usage Policy](https://operations.osmfoundation.org/policies/tiles/).
