# WooCommerce Bookings

`meteorgpl-plugin/woocommerce-bookings` — a WordPress plugin as a Composer package.

Setup bookable products such as for reservations, services and hires.

- Author: WooCommerce — https://woocommerce.com
- Homepage: https://woocommerce.com/products/woocommerce-bookings/
- License: not declared
- Buy a license from the vendor: https://woocommerce.com/products/woocommerce-bookings/
- Page: https://meteorgpl.com/packages/meteorgpl-plugin/woocommerce-bookings
- Requires WordPress: 6.8
- Tested up to WordPress: 7.0
- Requires PHP: 7.4
- Translations: da_DK, de_DE, es_ES, fa_IR, fr_FR, hr, it_IT, ja, ko_KR, lt_LT, nb_NO, nl_NL, pt_BR, pt_PT, sv_SE, vi, zh_CN
- Vendor: WooCommerce — https://meteorgpl.com/vendors/woocommerce.com

## About

Looking for help? Read the full documentation [here](https://woocommerce.com/document/introduction-to-woocommerce-bookings/).

## Changelog

### 2026.09.02

* Add - New "Share max bookings per block?" resource setting that makes a bookable product's max bookings per block a single allowance shared by all of its resources, so a slot taken on one resource can no longer be booked again on another.
* Fix - Bounded public availability requests by the product booking window and a one-year hard limit.
* Fix - Prevented public slot requests from exposing non-public booking products.
* Fix - Prevented public booked-day requests from exposing unpublished booking products.
* Fix - Required object-level edit access and relevant booking capabilities for booking product AJAX mutations, and prevented duplicate resource links.
* Fix - Required exact-order permission before booking REST requests can change existing order associations.
* Fix - Required access to the target booking before confirming it from the admin list.
* Fix - Restricted the store-wide booking calendar to users who can edit other users' bookings.
* Fix - Restricted store-wide booking notifications to users who can edit other users' bookings.
* Fix - Rejected availability requests for resources not assigned to the requested product.
* Fix - Preserved caller-selected CSV source files after an import finishes.
* Fix - Restricted store availability AJAX reads to users with the availability read permission.
* Fix - Enforced the current cancellation policy and cutoff for saved cancellation links.
* Fix - Restricted booking product metadata in REST responses to product editors.
* Fix - Kept cached slot responses separate for requests that show or hide unavailable times.
* Fix - Hardened private-read checks for booking and resource REST records.
* Fix - Required delete permission when a REST update trashes a team member.
* Fix - Blocked payment for orders with bookings awaiting confirmation.
* Fix - Limited public team-member REST responses to profile fields.
* Fix - Rendered imported Google Calendar event summaries as text in the merchant schedule.
* Fix - Prevented translations from loading before WordPress initialization.
* Tweak - Improved booking form performance by fetching availability for all blocks and resources in one query instead of one per combination.
* Dev - Managed changelog entries with Jetpack Changelogger: pull requests add a change file under changelog/ instead of editing changelog.txt, which is compiled at release time.
* Dev - Added E2E coverage for the bookable product editor, asserting settings persist by reading the saved product back over the REST API.
* Dev - Removed redundant and low-value tests.

### 2026.08.19

* Fix - Fixed a fatal error on the product page and when adding to the cart if a person type cost was stored with a currency symbol or other non-numeric characters.
* Fix - Fixed a person type cost stored with a thousands separator or a decimal comma being priced as only the digits before the separator.
* Fix - Fixed a fatal error when a pricing rule was set to divide by an empty or zero amount.
* Fix - Fixed the admin calendar single-day view defaulting to the server (UTC) date instead of the site timezone, which shifted bookings by a day once UTC and the site were on different calendar dates (for example, past 7 PM in UTC-5).
* Fix - Fixed a false "Error while deleting the item" error when permanently deleting bookings on HPOS stores.
* Dev - Removed the vulnerable extract-zip package from the development toolchain to resolve a Dependabot security alert.
* Fix - Prevented manual booking creation from changing orders without edit permission.
* Dev - Restored TLS certificate verification and fail-closed error handling in the release deployment script.
* Fix - Prevented team-member updates from changing unauthorized booking products.
* Add - Support for importing accommodation bookings from a CSV file.
* Fix - Fixed a blocking Google Calendar API call being made on every request (front end, REST API, cron, login) when a Google account is connected; the calendar list is now fetched only when the settings form fields are actually used.
* Dev - Pinned and checksum-verified the WP-CLI executable used in release builds.
* Dev - Wired the pull request CI checks required by the trunk branch protection rules (PHP coding standards, @version tag validation).
* Dev - Aligned AI-agent docs, ignore rules, and npm script aliases with the sibling extensions.
* Dev - Updated the npm build toolchain to resolve all remaining Dependabot security alerts.
* Fix - Restricted booking product template creation to authorized product editors with a valid request nonce.
* Fix - Fixed the "Booking Person Discount" coupon applying a discount 100 times too large at cart and checkout for currencies with zero decimals (for example JPY).
* Fix - Fixed console errors on admin screens when the WooCommerce Tracks object is unavailable.
* Fix - Fixed the date picker calendar availability announcement not being read by screen readers when the calendar opens on focus.
* Fix - Fixed the admin Add Booking screen and reschedule dialog showing times in the merchant's browser timezone instead of the store timezone when "Display visitor's local time" is enabled.
* Fix - Fixed the admin calendar month and schedule views defaulting an out-of-range year to the server (UTC) year instead of the site timezone, so the calendar could open on the wrong year around New Year.
* Dev - Update the shipped @babel/runtime helpers to resolve a security advisory.
* Dev - Fixed Markdown documentation lint violations and wired the Markdown docs lint into CI.
* Dev - Standardized the package license identifier on GPL-3.0-or-later.
* Dev - Removed the dead lint:md:js script.
* Dev - Documented the isolated worktree setup for local development.
* Dev - Stop waiting on networkidle when opening the front-end product page in E2E specs; wait on the date picker's own readiness signal instead.
* Dev - Enabled TLS certificate verification for translation downloads.
* Dev - Seed bookable products for E2E specs through the REST API instead of driving the admin product editor.
* Dev - Suppressed dependency deprecation notices in the PHP unit test suites.
* Dev - Added a CI check that fails when the plugin's own PHP sources raise compile-time deprecation notices.
* Dev - Added a pre-commit check that enforces updating the @version tag to x.x.x on modified PHP classes.
* Dev - Enabled JavaScript linting in CI and fixed source violations.
* Dev - Migrated the ESLint setup to the flat config format required by ESLint 10, aligning the lint and formatting toolchain with WooCommerce core.
* Dev - Update wp-coding-standards/wpcs to 3.4.1 (security release) in the phpcs lint tooling.
* Dev - Allow-listed the dev-only GPLv3 dependency `@woocommerce/e2e-utils-playwright` and wired `check-licenses` into CI.
* Dev - Update PHPUnit to 9.6.35 to resolve a security advisory in the PHP test toolchain.
* Dev - Update development npm dependencies to resolve security advisories in the build toolchain.
* Dev - Update the shipped phpseclib library to resolve security advisories, and move Strauss and QIT CLI to require-dev.
* Dev - Update the shipped Guzzle libraries and the Symfony YAML development dependency to resolve security advisories.
* Dev - Enabled CSS linting in CI and fixed source style violations.
* Fix - Prevented resource REST requests from reading or deleting team members.
* Fix - Enforced global availability permissions for AJAX create, update, and delete requests.
* Fix - Bound booking product exports to the authorized product and global availability permissions.
* Fix - Limited booking order search results to orders the current user can access.
* Dev - Hardened the QIT test workflow: pinned the QIT CLI version and stopped workflow inputs from being interpolated into shell source.
* Fix - Prevented fatal errors when a bookable product references a resource that cannot be resolved. Prices can fall back to product-level costs, and bookings reject stale submitted resources.

### 2026.07.22

* Add - Reschedule flow on the booking details admin view: availability-aware calendar that preselects the current slot, keeps the original price, and re-syncs to Google Calendar.
* Add - Added the ability to edit the "Requires confirmation" payment method title and description from its settings.
* Fix - Fixed hourly bookings ending exactly at midnight incorrectly blocking the following day from being booked.
* Fix - Fixed a JS error when multiple bookable products are displayed on the same page.
* Fix - Fixed the admin calendar Day view displaying a booking that ends at midnight as an all-day block on the following day.
* Fix - Fixed calendar date picker navigation arrows being hidden at narrower screen resolutions due to a z-index conflict with the table navigation bar.
* Fix - The `woocommerce_bookings_booked_day_blocks` filter is now consistently applied even when a product has no existing bookings.
* Fix - Replaced legacy `{blogname}` placeholder with `{site_title}` in all booking email subject defaults to align with WooCommerce core.
* Fix - The add-to-cart button on the single product page now inherits the theme's Global Styles button design on block themes.
* New - Important: WordPress 6.8+ is now required.
* New - Important: WooCommerce 10.6+ is now required.
* Tweak - Bumped WooCommerce "tested up to" version to 11.0.

### 2026.06.29

* Tweak - Important: Updated frontend templates.
* Fix - Improved accessibility.
* Fix - Fixed availability times on the product edit screen when admin and site timezones differ.
* Fix - Fixed calendar showing days as available when remaining slots are below the minimum persons per booking.

### 2026.06.16

* Add - Bookings CSV exporter to download bookings as a CSV file.
* Add - Bookings CSV importer to create and update bookings in bulk from a CSV file.
* Add - Added a "Bookings" endpoint setting under WooCommerce > Settings > Advanced > Page Setup > Account endpoints.
* Fix - Booking reminder emails and automatic completions now happen at the correct local time on sites outside the UTC timezone.
* Fix - Fixed a fatal error when importing a bookable product CSV with person types disabled (empty Person types column).
* Fix - Bookable product CSV import/export now uses readable column labels and auto-detects them on import.
* Fix - Fixed clipped Date created hour/minute inputs on the booking edit screen in WordPress 7.0.
* Fix - Fixed the booking list in WP Admin showing the wrong customer email after reassigning a booking to a different customer.
* Fix - Prevented the "Move to trash" link from displaying on the Edit Booking screen for users who cannot delete bookings.
* Fix - Fixed a fatal error when enabling "Restrict selectable days" without selecting any days.
* Fix - Fixed admin calendar possibly showing a stale customer note on bookings without a note.
* Fix - Fixed the `woocommerce_bookings_account_endpoint` filter not working when used in a theme's functions.php.
* Fix - Used the configured bookings account endpoint slug for the email "View my bookings" link and My Account pagination links instead of the hardcoded default.
* Tweak - Removed the "Enable Bookings Timezone Calculation" setting, as booking events now always follow your site's timezone automatically.
* Tweak - Improved the booking edit screen responsive layout by stacking details columns before fields become crowded.
* Tweak - Improved booking form calculation AJAX requests.
* Tweak - Performance improvements when fetching bookings for availability requests.
* Tweak - Bumped WooCommerce tested up to version to 10.9.
* Dev - Fixed Plugin Check compatibility reporting for guarded block metadata registration helpers.

Full changelog: https://meteorgpl.com/packages/meteorgpl-plugin/woocommerce-bookings/changelog

## Install

```sh
composer config repositories.meteorgpl composer https://composer.meteorgpl.com
composer require meteorgpl-plugin/woocommerce-bookings
```

The repository needs a token (see https://meteorgpl.com/docs). The vendor's license checks are intact: activate the plugin in WordPress with a key bought from the vendor.

## Versions

No version has been published yet.

