| 开发者 |
codeholt
ashrafulsarkar |
|---|---|
| 更新时间 | 2026年10月1日 23:45 |
| PHP版本: | 7.4 及以上 |
| WordPress版本: | 7.1 |
| 版权: | GPLv2 or later |
| 版权网址: | 版权信息 |
[bookyzo_booking] anywhere with the shortcode, use the Booking Form block, or drop it in with the Elementor widget if you build pages that way. Customers pick a time, enter their details, get a booking confirmation, and can add it straight to Google Calendar or download it as an .ics file — no account required.
Customer management
Every customer is saved automatically the first time they book — searchable by name, email or phone under Bookyzo → Customers, with notes and tags you can add yourself. Already have a customer list elsewhere? Import it from a CSV file.
Email notifications
Automatic emails when a booking is received, confirmed or cancelled, plus a reminder email the day before it's due. Every email carries the booking's own details — number, quantity, total and location — and a self-service link the customer can use themselves: from it they can move their booking to another open time or cancel it, right up to your cancellation cutoff. Every email's subject and body is a plain-text template you can edit yourself, with placeholders for the customer's name, the bookable item, the booking time, the total and your business name.
Payments
Mark bookings as paid manually for cash or in-person payments, or connect a Stripe account to let customers pay online by card when they book. An optional flat tax rate is added to every paid booking's total automatically.
Dashboard
See today's, this week's and this month's booking counts at a glance when you log in.
Developer friendly
Actions and filters throughout (REST controllers, pricing, rate limiting, notifications) and a REST API under bookyzo/v1. See Other Notes for the hook list.
Customer accounts
Customers can optionally create an account (turn it on under Bookyzo → Settings) and manage their own bookings from a [bookyzo_account] page — upcoming and past bookings, rescheduling and cancelling within your cutoff. Off by default: guests can book, and manage that booking from the link in their email, without one.
Growing out of the free plugin (Pro)
Everything in this plugin is complete on its own, with no limits and no locked-out UI. Bookyzo Pro is a separate paid add-on with more features: services with per-staff pricing and "any available staff" booking, deposits and PayPal, SMS/WhatsApp reminders on your own schedule, seasonal and dynamic pricing, add-ons and booking fees, custom form fields, a table floor plan, event ticket tiers with QR e-tickets and a check-in scanner, staff calendar sync, an analytics dashboard, and WooCommerce checkout.
/wp-content/plugins/ or install it via the Plugins screen.[bookyzo_booking] shortcode (or the Booking Form block) to any page.byzo_bookable_items_offering_service — ( int[] $bookable_item_ids, int $service_id ) Which bookable items offer a given service, for "any available staff" resolution. Default array().byzo_service_price — ( float|null $price, int $service_id, int $bookable_item_id ) Resolved price for a service booked with a specific staff member. Default null (falls back to the bookable item's own price).byzo_deposit_amount — ( float|null $amount, float $payment_amount, int $bookable_item_id ) How much of a booking's total is due online now as a deposit. Default null (pay in full).byzo_default_settings — ( array $defaults ) Default values seeded into the business-settings option on activation.byzo_rest_controllers — ( array $controllers ) REST controller instances registered on rest_api_init.byzo_payment_gateways — ( array $gateways ) Registered payment gateways shown on the Payments settings screen, keyed by gateway id. Default: Stripe only.byzo_payment_gateway_defaults — ( array $defaults ) Default settings shape for each registered gateway, keyed by gateway id. Default: Stripe only.byzo_validate_payment_gateway_settings — ( array|WP_Error $current, string $gateway_id, array $data ) Validates and merges a settings patch for a non-Stripe gateway. Only consulted for a gateway that byzo_payment_gateways actually registered.byzo_rest_public_permission — ( bool $allowed, WP_REST_Request $request ) Permission check for guest-allowed REST routes.byzo_booking_rate_limit_max / byzo_booking_rate_limit_window — ( int ) Per-IP guest booking rate limit (default 20 requests / 600 seconds) and its window in seconds.byzo_client_ip — ( string $ip ) The IP address used for rate limiting.byzo_dev_server_url — ( string $url ) Vite dev server URL used only in local development.byzo_unit_price — ( float $price, int $bookable_item_id, array $slot ) Per-booking unit price adjustment applied right after service-price resolution and before tax. Default: unmodified $price.byzo_pdf_invoice_enabled — ( bool $enabled ) Whether a downloadable PDF invoice is available from the customer dashboard. Default false.byzo_custom_fields_for_bookable_item — ( array $fields, int $bookable_item_id ) Custom form fields to render on the booking widget for a given bookable item, each { id, label, field_type, options, required }. Default array().byzo_addons_for_bookable_item — ( array $addons, int $bookable_item_id ) Add-ons to render on the booking widget for a given bookable item, each { id, name, price }. Default array().byzo_resolve_addons — ( array $resolved, int[] $addon_ids, int $bookable_item_id ) Resolves client-submitted add-on ids into real, currently-active, correctly-scoped { id, name, price } rows at booking-creation time — an id that doesn't resolve is silently dropped. Default array().byzo_appearance_css_vars — ( string $css, array $settings ) --prop:value; custom-property pairs generated from the Appearance settings. Default: the built-in property set, or '' when nothing was customized.byzo_appearance_css_declarations — ( string $css, array $settings ) prop:value; plain CSS declarations generated from the Appearance settings. Default: the built-in declaration set, or '' when nothing was customized.byzo_ticket_tiers_for_bookable_item — ( array $tiers, int $bookable_item_id ) Ticket tiers to render on the booking widget for a given Event bookable item, each { id, name, price, capacity_remaining }. Default array().byzo_ticket_tier_price — ( float|null $price, int $ticket_tier_id ) Resolved price for a specific ticket tier. Default null (falls back to the bookable item's own price).byzo_claim_ticket_tier — ( bool|null $claimed, int $ticket_tier_id, int $party_size ) Atomically claims capacity on a ticket tier at booking-creation time; false means sold out (rolls back the slot's own capacity claim). Default null (no tier system installed, nothing to claim).byzo_qr_ticket_enabled — ( bool $enabled ) Whether a downloadable QR e-ticket is available from the customer dashboard. Default false.byzo_loaded — Fires once the plugin is fully loaded.byzo_bookable_item_created — ( int $bookable_item_id ) After a new bookable item is created.byzo_bookable_item_activated — ( int $bookable_item_id ) After a bookable item transitions from inactive to active.byzo_booking_created — ( int $booking_id ) After a new booking is created.byzo_widget_rendered — ( array $config ) Each time a booking form is rendered on a page, so an add-on can enqueue its own front-end scripts.byzo_booking_status_changed — ( int $booking_id, string $new_status, string $old_status ) After a booking's status changes.byzo_booking_payment_status_changed — ( int $booking_id, string $new_status, string $old_status ) After a booking's payment status changes.byzo_notification_sent — ( string $event, int $booking_id ) After a notification email is sent (or attempted).byzo_notification_channels — ( string $event, array $booking, array $placeholders ) Fires after a notification email is sent, with the same placeholders — lets an add-on send the same event via another channel (e.g. SMS/WhatsApp).byzo_booking_rescheduled — ( int $booking_id, int $new_slot_id, int $old_slot_id ) After a booking is moved to a different slot (status itself is untouched, so this is separate from byzo_booking_status_changed).byzo_release_ticket_tier — ( int $ticket_tier_id, int $party_size ) Fires when a ticket-tiered booking is cancelled/rejected/marked no-show, so its tier's claimed capacity can be released back.No. Bookyzo has its own booking system and database tables — it doesn't use WooCommerce products or orders at all.
Yes. Booking is a guest checkout by default — a customer only needs to give their name, email and phone number.
Yes, from Bookyzo → Emails in the admin panel. Every email is a plain-text template with placeholders for the customer's name, the bookable item, the booking time and your business name.
An hourly background task checks for bookings starting in roughly 24 hours and sends a reminder — no setup needed beyond keeping the booking confirmed.
No. Every feature listed above is fully usable with no artificial limits, nag screens or disabled UI.
Yes. It includes all four booking types: Appointment (one staff member, one customer), Table (party-size reservations), Event (ticketed occurrences on dates you set yourself), and Slot (a generic recurring slot with room for more than one booking).
As many as you need, of every type. There is no limit on bookable items, shifts per day or bookings.
The admin app, the booking widget and the account page are Vue apps, built with Vite. Their source is included with the plugin in the src/ folder, along with package.json and the Vite configuration. Run npm install and then npm run build to rebuild the files in assets/.