Описание
Vachr Short-Term Rental Reservations is a free WordPress booking engine and channel manager for vacation rentals. Accept direct bookings without commission, synchronize availability with Airbnb, Booking.com, and other iCal-compatible platforms, accept online payments, and automate guest communication.
100% FREE — Unlimited properties — No commission on direct bookings. Manage apartments, vacation homes, rooms, and other short-term rental properties from one WordPress site.
Direct bookings and reservation management
Add a booking calendar and reservation form to your pages with the included shortcodes. Guests can check availability, choose dates and services, submit a reservation, and receive booking communication. Manage reservations, guests, services, pricing, payments, and external calendars from one place.
Airbnb, Booking.com, and iCal sync
Use two-way iCal synchronization to keep availability aligned with Airbnb, Booking.com, VRBO, and other platforms that support iCal. Import external reservations and export availability from your direct booking system to reduce calendar conflicts.
Payments and invoices
Accept online card payments through Stripe or Mollie, as well as bank transfer or cash. Track payment status and transactions, issue invoices, and generate Czech SPD QR payment codes for CZK bank transfers when the supplier uses a Czech IBAN. Set a global advance-payment schedule under Bookings -> Settings -> Payments by adding rows for days before arrival and the required deposit percentage. For example, use 365 days / 10%, 21 days / 50%, and 7 days / 80%; reservations closer than the smallest threshold require full payment. Each apartment can inherit the global schedule, define custom rules, or disable advance payments. The selected percentage applies to the first payment for card, bank transfer, cash, and manual payment methods. Reservations show the amount received and the remaining balance, and are marked paid only when recorded payments cover the amount due. Optionally connect a dedicated IMAP mailbox for bank payment notifications: the importer matches a variable symbol or payment reference and records the payment amount, keeping the reservation partially paid until the balance is covered.
Vacation rental automation
Automate guest and team communication for your short-term rental operation:
- Send arrival instructions to guests before check-in.
- Notify owners, cleaners, managers, repair staff, or other recipients about new bookings, arrivals, departures, guest registrations, unpaid reservations, and iCal cancellations.
- Turn arrival and departure notifications into staff tasks with confirmation links and email escalation.
- Display color-coded staff duty calendars and booking lists on protected WordPress pages.
Guest management
Collect guest registration and ID document photos through a public form, store registration details with reservations, and match registrations to direct or imported bookings. Create custom contact fields and consent checkboxes for the booking form.
More booking engine features
- Manage unlimited properties, each with its own availability, settings, content, services, amenities, and public booking pages.
- Configure seasonal and weekend rates, recurring rental seasons, closures, stay-length discounts, surcharge rules, and reusable discount codes.
- Create multilingual apartment descriptions, amenities, arrival instructions, and bank-transfer instructions with apartment-specific overrides.
- Use multiple currencies and configured conversion rates.
- Set the default booking form design, layout, section and contact-field order, calendar size, and visible fields in Bookings Settings Appearance. Set available languages, the default form language, selected country, and base currency in General; choose global payment methods in Payments. The booking form uses the base currency unless a block or shortcode overrides it. Choose from Classic, Modern, Dark mode, Compact, Old fashioned, Forest, Coastal, Rose, Lavender, Sunset, Monochrome, High contrast, Alpine, or Terracotta.
- Individual booking form blocks and shortcodes inherit those defaults. Set
design="dark",layout="two-column", payment or visibility attributes, or anordervalue to override them for one form. - Customize the booking calendar and reservation form, then preview the appearance on desktop and mobile before publishing.
- Generate editable
VacationRentalJSON-LD from apartment data with the optional Vachr Short-Term Rental Reservations Pro add-on.
Video tutorial
Video tutorial: https://www.youtube.com/watch?v=v1sXajxPurg
The plugin is free and supports unlimited apartments. Donations help fund continued development.
Optional setup assistance
Need help with setup? I offer one-time WordPress setup for short-term rentals, including connection to Booking.com, Airbnb, and more for 100 EUR, plus optional yearly light support for 20 EUR.
Скриншоты

















Блоки
Этот плагин предоставляет 2 блока.
- bookingForm
- searchForm
Установка
Video tutorial: https://youtu.be/v1sXajxPurg Watch this video to see how to manage and use the system.
- Загрузите файлы плагина в каталог
/wp-content/plugins/vachr-short-term-rental-reservationsили установите плагин напрямую через экран плагинов WordPress. - Активируйте плагин через экран «Плагины» в WordPress.
- Перейдите в меню «Апартаменты», чтобы создать свою первую арендуемую квартиру.
- Используйте предоставленные короткие коды для отображения формы бронирования или календаря на ваших страницах.
Часто задаваемые вопросы
-
How do I configure WP Super Cache or a CDN with this plugin?
-
The plugin sends
Cache-Control: no-store, no-cache, must-revalidate, max-age=0, private,Pragma: no-cache, andExpires: 0for every endpoint in its REST namespace (/wp-json/vstrb/v1/...). It also sets WordPress’DONOTCACHEPAGEflag while those requests are handled.In Settings -> WP Super Cache -> Advanced -> Accepted Filenames & Rejected URIs, add this rule and then delete any existing cache:
^/wp-json/vstrb/v1/Add the same path exclusion to any CDN, Nginx FastCGI cache, or reverse proxy in front of WordPress. The server/CDN exclusion is required because a previously cached response can be served before WordPress or this plugin runs.
Frontend and admin JavaScript/CSS are versioned with the plugin version and the asset modification time, so browser caches fetch changed assets automatically. If an old frontend still appears, clear page/minification caches in WP Optimize and any CDN cache.
-
How do I match bank-payment emails to reservations?
-
Open Bookings -> Settings -> Email Payments and connect a dedicated IMAP mailbox. Add a bank parser profile for each bank, such as Revolut and Air Bank, and enter that bank’s sender email or domain. The importer checks unread messages every 15 minutes, reads the message body and subject, then selects a profile by sender; an exact sender match takes precedence over a domain, which takes precedence over a profile with no sender restriction. Each profile has its own generic, Czech variable-symbol, and international reference templates plus custom PCRE fields for reference (
(?<reference>...)), amount ((?<amount>...)), and three-letter ISO currency code ((?<currency>...)). Common adjacent currency symbols, such as Revolut’s€89.00, are also recognized automatically. Extracted amounts and currencies are shown in the audit log and recorded on the payment.The reference is matched exactly against the reservation payment reference, invoice number, or reservation number. Czech variable symbols are also compared to the numeric part of stored payment references. A payment is applied only when precisely one unpaid reservation matches; ambiguous or unmatched messages are logged but never assigned automatically. The importer keeps a compact audit record and does not retain email bodies. Your server needs PHP’s IMAP extension enabled; ask your hosting provider to enable it if the settings page reports it missing.
-
Как отобразить форму бронирования?
-
Используйте короткий код
[vstrb_booking_form unit="YOUR_ID"].Дополнительные параметры:
months="N"— number of calendar months to display (default:1).grid="N"— number of month columns in the calendar grid (default:1).availability_days="N"— number of upcoming days included in the public machine-readable availability endpoint (default:180, maximum:366).currency="CODE"— currency code used in the price breakdown (default:EUR).language="CODE"— two-letter language code (e.g.cs,de,en) used for services, contact field labels, and the price quote. If omitted, the language of the current page (reflected in the<html lang>attribute, set automatically by multilingual plugins) is used; the visitor’s browser language serves as a last resort fallback.enable_stripe="1"— show card payment via Stripe. Configure Stripe keys and webhook secret in Bookings -> Settings -> Payments.enable_mollie="1"— show card payment via Mollie. Configure the Mollie API key and use the displayed Mollie webhook URL in Bookings -> Settings -> Payments.enable_bank_transfer="1"— show bank transfer payment. Configure default bank instructions in Bookings -> Settings -> Payments, or translated per-apartment instructions in Bookings -> Apartment Content.enable_cash="1"— show cash payment.
Billing details in the booking form are optional for all payment methods. Guests can enable them with Add Billing Details when they need an invoice. Card and bank-transfer payments without billing details create only a payment record; bank-transfer instructions and Czech QR payments use the booking ID as the payment reference and variable symbol.
*show_gender="0"— hide the gender field (shown by default).
*show_country="1"— show an ISO 3166-1 country selector (shown by default; useshow_country="0"to hide it).
*show_children="0"— hide the children field and use one combined guest count instead. Adults and children are shown separately by default; capacity and prices use their combined total.
*show_children_ages="1"— show a required age field for each child (0–17 years), dynamically matching the selected number of children. Enabled by default; useshow_children_ages="0"to disable it. Ages are stored with the reservation.
*country="CZ"— preselect an ISO 3166-1 country. If omitted, the form detects it from the shortcode or page language.
*consent_key,consent_label,consent_required="1"— add one consent checkbox directly to this form. The label supports[link url="https://example.com/terms"]Terms[/link]; useorder="...,consents,..."to position it.For reusable consent or terms checkboxes, open Bookings -> Settings -> Contact Fields. Create a field with type Checkbox / consent, choose whether it is required, add a translated label (including an optional
[link url="..."]...[/link]link), then select the field in the apartment editor’s Contact Fields section. The selected value is saved with every reservation.The Terms and conditions step in the apartment setup wizard creates and assigns the required
terms_and_conditionsconsent automatically. Its label can use the same[link]syntax and is saved with the reservation. In the public booking form, this Terms checkbox is always displayed immediately before the submit button.
*layout="stacked|two-column|compact"— choose the form layout.stackedis the default;two-columnuses a responsive two-column layout on larger screens.
*order="calendar,guests,services,pricing,contact,consents,payment,security,submit"— define the order of the form sections. Omitted sections are appended in the default order.When creating a page from an apartment with Create apartment page, the page creation wizard also lets you choose how many calendar months the generated booking form displays (1–12) and how many month columns it uses (1–6). The wizard defaults to 2 months and 1 column; the layout automatically adapts to smaller screens.
Example:
[vstrb_booking_form unit="YOUR_ID" language="de" show_gender="0" show_country="1" country="DE"]Layout example:
[vstrb_booking_form unit="YOUR_ID" layout="two-column" order="calendar,guests,contact,consents,services,pricing,payment,security,submit"]The booking form is lazy-loaded by default: its HTML is requested only when the visitor reaches it, which helps page caches serve the page without storing the form markup. Toggle this in Bookings -> Settings -> General -> Lazy-load Booking Form. Use
defer="0"in a shortcode to disable lazy loading for that one form.Payment example with Mollie and bank transfer:
[vstrb_booking_form unit=»YOUR_ID» enable_mollie=»1″ enable_bank_transfer=»1″ enable_cash=»1″]Payment example with all payment methods:
[vstrb_booking_form unit=»YOUR_ID» enable_stripe=»1″ enable_mollie=»1″ enable_bank_transfer=»1″ enable_cash=»1″] -
How do I configure discount codes?
-
Open Bookings -> Rates and find the Reusable discount codes section. Select an apartment, then:
- In the Reusable discount codes section, select the accommodation and add one or more codes, for example
WELCOME10andSUMMER15. - Enter the percentage discount for each code, from 0 to 100.
- Optionally set Valid from and Valid to for each code. The code is checked against the date on which the reservation is created; an empty boundary means no limit on that side.
- Enable Show the discount code field in the booking form if guests should be able to enter a code manually.
The discount is applied to the accommodation price only. It does not reduce selected services or the refundable deposit. Calendar-visible accommodation rules (such as seasonal and weekend adjustments) are applied first, then the valid code is deducted; stay-length discounts are calculated afterwards from that reduced price. Each code can be reused by an unlimited number of guests while it is valid. Codes are case-insensitive and must be unique within an accommodation.
To distribute the code through a private or campaign link without showing a field, add the
discount_codeGET parameter to the booking page URL:https://example.com/book/?discount_code=WELCOME10The code is validated again on the server when the quote is calculated and when the reservation is created, so the final reservation price cannot be changed by editing the frontend request. The calendar displays calendar-relevant pricing rules such as seasonal and weekend prices, with a valid discount code already reflected in the daily price. Stay-length discounts are calculated only after the dates are selected, after the discount code has been applied. A valid code, its percentage, and the applied discount amount are saved with the reservation and included in the administrator and guest booking emails.
- In the Reusable discount codes section, select the accommodation and add one or more codes, for example
-
How do I collect the age of each child?
-
The booking form shows child-age fields automatically by default. The number of fields follows the selected number of children: no fields are shown for zero children, and adding or removing a child immediately adds or removes the corresponding age field. Each age is required and accepts values from 0 to 17 years.
The ages are saved with the reservation and are visible in the reservation details in the administration. To disable this feature for a specific form, use:
[vstrb_booking_form unit="YOUR_ID" show_children_ages="0"] -
How do I collect billing details for an existing reservation?
-
Use
[vstrb_billing_form]on a separate page. The form contains only billing data (company/name, company ID, VAT ID, address, ZIP code, and country) and saves it to an existing reservation without collecting the guest’s contact details again.For a public link, pass the reservation ID and its secure token:
https://example.com/billing/?booking_id=123&token=TOKEN. The token is the same token used by the reservation’s price-offer link. You can also use an external channel reservation ID withexternal_idandexternal_id_paramwhen the imported reservation hasexternal_booking_idstored.Examples:
[vstrb_billing_form]or[vstrb_billing_form booking_id="123" token="TOKEN"]. -
How do I enable Mollie payments?
-
- Go to Bookings -> Settings -> Payments.
- Enter your Mollie API key (
test_...orlive_...). - Copy the displayed Mollie Webhook URL into your Mollie dashboard webhook settings.
- Add
enable_mollie="1"to your booking form shortcode.
Example:
[vstrb_booking_form unit="YOUR_ID" enable_mollie="1"] -
How do I let guests search for free accommodation?
-
Use the shortcode
[vstrb_search]or the «Accommodation search» block. Guests choose dates and the number of guests, see the matching accommodation with prices and continue in the booking form. Useunits="12,15"to limit the search to selected accommodation; the other attributes (currency,language,design,layout,enable_stripe, …) are passed to the booking form. -
Как отобразить календарь доступности?
-
Используйте короткий код
[vstrb_availability_calendar unit="YOUR_ID" months="3"].The booking form and calendar pages advertise their public JSON availability endpoint with a machine-readable link in the HTML
<head>. This adds no visible list of dates; the booking form and interactive calendar continue to work as usual. To advertise the endpoint on another page without adding visible output, use[vstrb_ai_availability unit="YOUR_ID" days="180"].For a public JSON availability snapshot, request
/wp-json/vstrb/v1/availability?unit_id=YOUR_ID&days=180. It returns the accommodation name and, when available, its published booking-page URL, booking limits, the time and date range checked, and consecutive free-night ranges. The range is a calendar snapshot; to verify exact dates and get a current quote, send aPOSTrequest to/wp-json/vstrb/v1/quotewithunit_id,date_from,date_to, andadults(orguests). Neither endpoint exposes guest or reservation details.Allow public crawling of the apartment page and include it in the site’s sitemap for Google and other crawlers to discover the page and its API link. The JSON endpoint is public, so anyone who knows or finds its URL can request it. Search engines may fetch machine-readable data, but Google does not guarantee that it will index or show availability dates. Do not serve availability only to search crawlers or add hidden availability markup: Google treats content hidden from visitors but shown to crawlers as cloaking or hidden-text abuse. For Google Travel vacation-rental listings and itinerary prices, use Google’s separate Vacation Rentals integration process.
-
Как мне собрать регистрационные данные гостей (например, от гостей Booking.com)?
-
Use the shortcode
[vstrb_guest_registration unit="YOUR_ID"]on any page. Share the link with your guest — they fill in their personal details without needing to register. Submitted data is saved to the database and sent by email to both the admin and the guest. You can review all registrations under Bookings -> Guest Registrations in the admin panel.If the registration link contains a specific apartment (
unit), that apartment is kept as the primary assignment. The plugin then tries to link the registration to a matching booking for the same apartment and stay dates. When the apartment is not known and there is exactly one matching booking for the submitted stay dates, the registration can be linked automatically to that booking. If the match is not clear, you can manually pair or unpair the registration group in the admin panel.The Guest Registrations admin screen includes filters for apartment, booking source, stay date range, guest/email/reference search, booking ID, and linked or unlinked registration groups. You can also change the apartment for a whole registration group when a guest submitted the form under the wrong apartment.
Дополнительные параметры:
title="TEXT"— custom heading displayed above the form. If omitted, the apartment name is used as the heading.language="LOCALE"— locale code (e.g.cs_CZ,de_DE,en_US) to render the form labels in a specific language. If omitted, the current site language is used.param="accommodation"— resolve the apartment from a URL parameter instead of a fixedunitID. This is useful for Booking.com links with[PROPERTY_NAME].match="contains"— allow one unique partial match when Booking.com sends a longer or shorter property name.fallback="TEXT"— text shown when no unique apartment is matched.
Example:
[vstrb_guest_registration unit="YOUR_ID" title="Apartment Modry Dum" language="cs_CZ"]Booking.com example page shortcode:
[vstrb_guest_registration param=»accommodation» language=»en_US» fallback=»Accommodation not found. Please contact us.»]Booking.com message URL:
https://example.com/accommodation-registration-tourist-tax/?accommodation=[PROPERTY_NAME]&source=booking_comAdd the exact Booking.com property name to External accommodation names / aliases in the matching apartment editor. One alias per line is supported. Matching ignores case, accents, and extra punctuation.
-
How do I manage multilingual apartment descriptions, amenities, arrival instructions, and bank transfer instructions?
-
Create reusable content templates under Bookings -> Apartment Content. Each template can contain translated apartment descriptions, amenities text, arrival instructions, and bank transfer payment instructions for the languages configured in Bookings -> Settings.
Then open an apartment and use the Guest-facing Apartment Content section in the apartment details. You can assign a template and optionally override any language directly for that apartment.
-
How do I add the reservation ID, amount, and currency to bank transfer instructions?
-
Use
{{reservation_id}}for the reservation ID,{{payment_amount}} {{payment_currency}}for the amount and currency, and{{payment_reference}}for the full payment reference.{{invoice_number}}is filled when an invoice has been issued. Short aliases{{amount}}and{{currency}}are also available.Template texts support placeholders in double braces. Built-in placeholders include:
{{apartment_name}}{{checkin_time}}{{checkout_time}}{{booking_id}}and{{reservation_id}}— aliases for the reservation ID. Use{{reservation_id}}in bank transfer instructions; both keys are available in arrival instruction emails.{{guest_name}}— available in arrival instruction emails.{{date_from}}and{{date_to}}— available in arrival instruction emails.
Bank transfer templates additionally support:
{{iban}}— the supplier account in international IBAN format.{{account_number}}and{{bank_account}}— the domestic account number. A Czech IBAN is converted to formats such as19-2000145399/0800.{{invoice_number}}— the invoice number, when an invoice has been issued. In the booking form, an invoice is issued when the guest requests billing details.{{payment_reference}}— the full payment reference. It uses the invoice number when available, otherwise the reservation ID.{{payment_amount}}and{{payment_amount_due}}— the amount to pay.{{payment_currency}}— the payment currency, for exampleCZK.
Bank transfer callbacks use the generic Bank Notify URL from settings. The endpoint accepts JSON, form-encoded payloads, and simple XML bodies, and recognizes common wrapper keys (
transaction,payment,data,entry,accountStatement) and common aliases for the token (also via theX-VSTRB-Token,X-Webhook-Token, orAuthorization: Bearer ...header), booking ID, invoice number, reference / variable symbol, amount, and currency.The plugin matches payments by booking ID first, then invoice number, then exact reference/variable-symbol match against stored payment references or invoice numbers. It does not connect to a bank API directly; an export or middleware must call the endpoint.
You can also define custom placeholders in the apartment editor, for example
door_pin,wifi_password, orparking_note. Custom placeholders can have one global value or language-specific values. Use them as{{door_pin}}or with a fallback like{{door_pin|provided before arrival}}.Example: add
door_pinandwifi_passwordunder Guest-facing Apartment Content -> Template Placeholders in the apartment editor, then useDoor PIN: {{door_pin}}, Wi-Fi: {{wifi_password}}in an arrival instruction template.Fill the language-specific values (for example CS or DE) to translate a placeholder; if no matching language value exists, the global value is used. A fallback such as
{{door_pin|provided before arrival}}is shown when the value is empty.You can display the saved content with these shortcodes:
[vstrb_unit_description unit="YOUR_ID" language="cs"][vstrb_unit_amenity_list unit="YOUR_ID" language="cs"][vstrb_unit_arrival_instructions unit="YOUR_ID" language="cs"][vstrb_unit_arrival_instructions_by_code param="unit_code" language="cs"][vstrb_unit_arrival_instructions_by_name param="accommodation" language="cs"][vstrb_unit_arrival_instructions_by_reservation]
If the
languageattribute is omitted, the site language is used. Apartment-specific text has priority over the selected template.To show arrival instructions without exposing an internal apartment ID, prefer
[vstrb_unit_arrival_instructions_by_code]. Set a Public apartment code in the apartment editor and put that code into the external channel link. This is more reliable than matching a name sent by Booking.com, Airbnb, or another channel.Example page shortcode:
[vstrb_unit_arrival_instructions_by_code param=»unit_code» language=»cs» fallback=»Accommodation not found. Please contact us.»]Example guest URL:
https://example.com/arrival/?unit_code=blue-houseIf an external channel can only send the accommodation name, use
[vstrb_unit_arrival_instructions_by_name]and add the exact channel-specific names to External accommodation names / aliases in the apartment editor. The shortcode matches the URL value against the apartment title and these aliases. Matching ignores case, accents, and extra punctuation.Optional parameters:
param(GET parameter name; defaultsunit_code/unit_name),codeorname(fixed value for testing),match(exactby default;containsfor the name shortcode allows one unique partial match),show_title="1", andfallback(text shown when no unique apartment is matched). -
How do automated arrival instruction emails work?
-
In the apartment editor, enable Email arrival instructions automatically before check-in and set Send days before arrival.
The daily WordPress cron checks confirmed bookings with a customer email address. If arrival instructions exist for the apartment, the guest receives an email with the apartment description, amenities, and arrival instructions in the saved booking language when available. Each booking is marked after sending so the instructions are not sent repeatedly.
To display arrival instructions by matching a guest stay, use:
[vstrb_unit_arrival_instructions_by_reservation]The shortcode reads arrival date, departure date, first name, and last name from URL parameters. It accepts ISO dates and common local numeric date formats such as
2026-06-01,1.6.2026,01/06/2026, and06/01/2026; ambiguous formats are tried against stored reservations without converting through UTC. It first tries to find one apartment by stay dates only. If multiple apartments match the same dates, it narrows the result by both guest names, then by last name only, then by first name only. Name matching ignores accents and letter case. If no unique match is found, it displays the first apartment with available instructions in alphabetical order.Example page shortcode:
[vstrb_unit_arrival_instructions_by_reservation date_from_param=»checkin» date_to_param=»checkout» first_name_param=»guest_first_name» last_name_param=»guest_last_name» language=»cs» available_days_before=»1″ unavailable_text=»Arrival instructions are not available yet.» fallback=»Arrival instructions are not available. Please contact us.»]Example guest URL, password:
testtest:
https://vachr.cz/apartment-1-demo-pin/?checkin=2026-06-23&checkout=25.6.2026&guest_first_name=Jan&guest_last_name=NovakДополнительные параметры:
unit="ID"— limit matching to one apartment, useful when date combinations may repeat across apartments.date_from_param="date_from"— URL parameter containing arrival.date_to_param="date_to"— URL parameter containing departure.first_name_param="first_name"— URL parameter containing first name.last_name_param="last_name"— URL parameter containing last name.date_from="YYYY-MM-DD"— fixed arrival date instead of a URL parameter.date_to="YYYY-MM-DD"— fixed departure date instead of a URL parameter.first_name="TEXT"— fixed first name instead of a URL parameter.last_name="TEXT"— fixed last name instead of a URL parameter.language="cs"— language used for apartment instructions.show_title="1"— show the matched or fallback apartment title above the instructions.fallback="TEXT"— text shown when no apartment has arrival instructions.available_days_before="1"— how many days before arrival the instructions may be shown. Default:1. Use0to show them only on the arrival day.unavailable_text="TEXT"— text shown when the guest opens the page too early. If omitted, a translated default message is shown.
-
Могу ли я предварительно заполнить форму регистрации гостя по URL-адресу?
-
Да. Короткий код
[vstrb_guest_registration]считывает следующие параметры GET и предварительно заполняет соответствующие поля формы:date_from— check-in date (format:YYYY-MM-DD)date_to— check-out date (format:YYYY-MM-DD)first_name— guest’s first name (pre-fills the first guest block)last_name— guest’s last name (pre-fills the first guest block)source— booking source; accepted values:booking_com,airbnb,vrbo,expedia,direct,otherbooking_ref— booking reference numberaccommodation— external accommodation name used to resolve the apartment when[vstrb_guest_registration param="accommodation"]is used
Пример URL-адреса:
https://bayernrelax.eu/en/accommodation-instructions/?accommodation=[PROPERTY_NAME]&date_from=2026-07-01&date_to=2026-07-07&first_name=John&last_name=Doe&source=booking_com&booking_ref=1234567890Это полезно при отправке ссылки на регистрацию прямо из электронного письма с подтверждением бронирования.
-
How do admin price offers work for imported reservations?
-
Open Bookings, click Offer on any reservation, and use the Price offer panel. The plugin calculates the price from the current reservation unit, dates, guest count, services, seasonal rates, discounts, surcharges, and refundable deposit settings.
You can add a one-time manual discount as a fixed amount or percentage. The generated result is saved back to the booking total and into the booking price breakdown, so notification emails and admin details show the same final amount.
For imported iCal reservations from e-chalupy.cz, Booking.com, Airbnb, and similar channels, the guest email is often not stored as the booking customer email. In that case you can enter any recipient in Send offer to email. If the iCal description contains an email address, the field is prefilled automatically.
Each offer also has a private public link in Public price offer link. Copy that URL and send it manually through any channel. The link uses a random token and displays only the price offer page for that booking.
The email sent from the price offer panel includes the offer summary and the same public price offer link.
-
Where are plugin settings managed?
-
Open Bookings -> Settings. The page is split into tabs so operational configuration is kept in one place:
- General — languages, currencies, conversion rates, default booking-form language and country, and shared defaults.
- Notifications — staff work types, recipients, confirmation, escalation, unpaid reservation alerts, daily send time, and staff calendar shortcode.
- Payments — global booking-form payment methods, Stripe, Mollie, bank transfer, payment callbacks, payment behaviour, and guest reminders for unpaid reservations.
- Invoicing — invoice numbering, language, supplier, tax, and bank details.
- Calendar — the global booking-calendar price display mode.
- Appearance — booking form design, layout, calendar and field display, and styling, including the live desktop/mobile preview.
- Services, Amenities, and Contact Fields — reusable catalogs and fields used by apartments and booking forms.
Document photos can be uploaded for each person from the public guest/contact registration form. They are stored against that person’s registration record and are accessible in the admin guest-registration screen. Only JPG, PNG, and WebP files up to 1 MB per file are accepted. They are not added to the public WordPress Media Library. Under Bookings -> Settings -> General -> Reservation photo uploads, choose Show, optional, Show, required, or Do not show. Configure the absolute server path under Reservation photo folder. When left empty, private files are stored outside the public uploads directory in
../vstrb-private-booking-photos. The configured folder must be writable by PHP; in Docker deployments it must also be mounted into the WordPress container if it is outside the standard WordPress directory.iCal Imports remains a separate item under Bookings, because it is an operational synchronization screen with per-apartment imports, export URLs, and an immediate import action.
-
How do I automate cleaning, handover, manager, or repair notifications?
-
Open Bookings -> Settings -> Notifications. Create a notification type for each duty, for example Cleaning, Manager, Repair, or a custom duty. For every type choose:
- The trigger: new booking, guest registration, arrival, departure/cleaning, unpaid reservation, or iCal cancellation.
- A calendar color.
- The visible booking data for each recipient.
- Recipient language; for the first recipient, the number of days before arrival or departure when the task begins.
- Recipient order and the escalation interval in hours.
- Choose a password-protected staff booking page from existing WordPress pages, or create one immediately from the recipient form. The new page already contains the staff booking shortcode. Select “Do not add a link to emails” when no link should be sent.
Set Daily staff notification time to choose when daily notifications and unpaid-payment reminders are sent. The time uses the WordPress site timezone and is kept local across daylight-saving changes.
For staff alerts about unpaid reservations, use the Unpaid reservation trigger in a notification type. Set First email (days before) for each recipient; for this trigger, the value means days before arrival. Guest reminders are configured separately under Bookings -> Settings -> Payments -> Unpaid Reservation Reminders. Enter comma-separated day offsets such as
7,2. Choose which payment methods should trigger staff and guest reminders in the same Payments section. Direct reservations created without a configured payment method use the Manual payment category. Both features are disabled until configured, and each reminder is sent at most once for each interval and recipient.For arrival and departure types, enable Require confirmation and escalate to turn the notification into a task. The first recipient receives an email with a personal confirmation link. If they do not confirm within their configured interval, the next recipient receives an escalation email. When any notified recipient confirms, the task is assigned to them and earlier recipients receive a takeover notice. The hourly WordPress task runner processes pending escalations; for precise delivery on low-traffic sites, configure a real server cron to call WordPress cron.
The confirmation link is signed for the specific booking, task type, and recipient. It can be used without a WordPress login, which makes it practical for cleaners and contractors; place staff calendar pages behind a WordPress password or another access control method.
Existing installations do not need to re-enter their settings. Legacy rules in the old
email|fields|events|language|days_beforeformat are migrated automatically during the upgrade and shown in the structured form.Available fields:
unit— apartment name.dates— stay dates.guests— guest count.status— booking status.source— booking source.customer— customer name.contact— customer email and phone.price— booking total and currency.note— booking note.booking_reference— external booking reference on guest registrations.-
guest_names— names submitted in guest registrations.
Available triggers: -
new_booking— email when a new booking is created. registration— email when guest registration details are submitted.arrival— email before check-in; it can be turned into a confirmed handover task.departure— email before checkout; it can be turned into a confirmed cleaning task.ical_cancelled— email when a future imported iCal reservation disappears from its source feed and is treated as cancelled.
For each recipient, select only the visible fields they need. For example, a cleaner may receive apartment, dates, and guest count without price or contact information.
For a staff booking list with status controls, create a WordPress page or post, protect it with a WordPress password, and add:
[vstrb_staff_bookings email="cleaner@example.com" fields="unit,dates,guests,status"]For the color-coded duty calendar with daily details, assignment state, and confirmation buttons, use:
[vstrb_staff_tasks email="cleaner@example.com" days="90"] [vstrb_staff_bookings] optional shortcode parameters:email="EMAIL"— staff rule to use.fields="FIELDS"— optional comma-separated subset of the fields allowed for this recipient. For example:unit,dates,guests,status. Useallto use all fields configured for the recipient.days="N"— number of upcoming days to display; use0for all current and future reservations (default:0).unit="ID"— limit to one apartment.limit="N"— maximum number of bookings (default:50).include_registrations="0"— hide guest registration groups.status="all"— include cancelled and blocked bookings too.
Select the staff booking page for the matching notification recipient. Email links add
vstrb_booking_idautomatically and open just that reservation. The page provides a link to clear the filter and return to all current and upcoming reservations; staff can also update a reservation status there.[vstrb_staff_tasks] optional shortcode parameters:email="EMAIL"— required email address of a configured recipient; it limits the calendar to that person’s duties.days="N"— number of upcoming days to display (default:90, maximum:365).unit="ID"— limit the calendar to one apartment.
-
How can AI posts be generated automatically?
-
Open Bookings -> AI Post Generator and use Scheduled AI generation profiles. Each profile can have its own source URLs, pasted source text, or an AI research prompt built from location, radius, date range, event types, source-link rules, and extra instructions. Profiles also include languages, category, draft/publish status, notification email, and daily, every-2-days, every-3-days, weekly, or monthly schedule with a selected time.
WordPress cron runs enabled profiles automatically. After each run, the configured notification email receives a summary telling whether new drafts are ready, posts were published, or errors occurred. The processed-source history is reused, so the same source is not generated repeatedly.
-
Can I add Google Vacation Rental structured data?
-
Yes, with the optional Vachr Short-Term Rental Reservations Pro add-on. Open Bookings -> Google SEO Data, select an apartment, and generate editable
VacationRentalJSON-LD from its existing settings.The generator reuses the apartment name, description or content template, capacity, check-in and check-out times, base price, currency, featured image, and amenities. You can then complete the address, coordinates, room details, floor size, languages, ratings, reviews, and at least eight accommodation photos.
Place the generated structured data on the public apartment detail page with:
[vstrb_vacation_rental_schema unit="YOUR_ID"]Structured data helps search engines understand the accommodation, but Google does not guarantee a rich result. Displaying live prices and availability in Google Vacation Rentals requires a separate Google Hotel Center integration.
Отзывы
Участники и разработчики
«Vachr Short-Term Rental Reservations» — проект с открытым исходным кодом. В развитие плагина внесли свой вклад следующие участники:
Участники«Vachr Short-Term Rental Reservations» переведён на 2 языка. Благодарим переводчиков за их работу.
Перевести «Vachr Short-Term Rental Reservations» на ваш язык.
Заинтересованы в разработке?
Посмотрите код, проверьте SVN репозиторий, или подпишитесь на журнал разработки по RSS.
Журнал изменений
2.2.5
- Added an apartment gallery. The new «Apartment Gallery» box on the apartment edit screen lets you pick several images from the media library and reorder them by dragging.
- The accommodation search results now show the featured image followed by the gallery images, with previous/next arrows on each result.
- The search endpoint returns an
imageslist (url and alt text) for every unit;imageis kept for compatibility. - Added styling of the accommodation search to the Appearance settings: result card background, border and radius, accommodation name, total price and gallery arrows. The form background now applies to the search form too.
- Added translations for the gallery and the search styling to all supported languages.
2.2.4
- Added the
[vstrb_search]shortcode and the «Accommodation search» block. Guests enter check-in, check-out and the number of guests and get a list of the accommodation that is free for the stay, with the total price. Choosing a unit opens the booking form with the dates and guests already filled in and the live price quote, so the guest only enters their details, picks a payment method and sends the reservation. Availability, capacity and stay limits are checked exactly as when a booking is created. - The block has a settings (cog) dialog like the booking form block: searched accommodation, currency, language, layout, design, field order, payment methods and optional fields.
- Added the
POST /wp-json/vstrb/v1/searchendpoint used by the search form. - Added translations for the new search to all supported languages.
2.2.3
- Added a discount by number of guests. When fewer guests than the apartment capacity book a stay, you can set a separate discount for each guest count (fixed amount per night in each currency, or a percentage of the accommodation price), so it does not have to be linear. Configure it in the apartment’s pricing section, under «Discount by number of guests». It is not applied to per-person price modes and appears as its own line in the price breakdown.
- Added translations for the new discount to all supported languages.
2.2.2
- Added per-apartment discount rules for children (by age range) and disabled guests. A rule gives a percentage discount (100 % = free) on per-person services such as the tourist tax, and can be limited to selected services. Configure them in the apartment’s Services tab.
- The booking form shows a «guests with a disability card» field when the apartment has a disabled-guest rule; the live price quote accounts for child ages and disabled guests.
- Reservations store the number of disabled guests (
disabled_guests, new column added automatically on update); it is editable in the admin and accepted by the REST/application API.
2.2.1
- Added an authenticated REST API (
/wp-json/vstrb/v1/api/) for reservations, price offers, payments and invoices. It uses WordPress Application Passwords over HTTPS, per-user permissions and apartment scope (user profile), mandatoryIdempotency-Keyreplay protection for creating/sending operations, an audit log and a common error format. See docs/openapi.yaml. - Added
vstrb_api_requestsandvstrb_api_audittables, created automatically on update.
2.2.0
- Refactored the booking core into shared reservation and price-offer services with apartment-scoped permissions.
- Core refactoring: shared payment and invoice operations for admin, webhooks and scheduled balance collection, with transaction-safe updates and duplicate-payment protection.
2.1.86
- Fixed price-offer emails retaining the previous total or breakdown after a percentage or fixed discount was saved; offer data is refreshed before sending.
- Extracted shared booking operations for availability, calendars, quotes, price snapshots and reservation creation. Existing REST endpoints and admin price recalculation use the shared service; direct integrations can supply explicit caller permissions without REST request objects or form CAPTCHA.
- Fixed a missing payment-metadata reader used by cash payments and balance-payment processing.
- Organized booking-form defaults by purpose: currency follows General base currency, language and selected country are set in General, payment methods are set in Payments, and Appearance contains form presentation settings. Individual blocks and shortcodes can override applicable defaults.
- Added an immediately updating, docked live appearance preview with a slide-out toggle and persistent save control.
- Added translations for the new appearance and booking form settings across the bundled languages.
- Added a public availability JSON endpoint and a machine-readable page-head link for booking pages; availability dates are not added to page content.
- Added the
[vstrb_ai_availability]shortcode to advertise the public JSON endpoint on a page without visible output.
2.1.85
- Fixed apartment setup wizard saves being blocked by native browser validation on pricing fields; the wizard now uses its own validation while active.
- Replaced the lazy booking form’s standalone load button and small spinner with an animated skeleton that reserves space for the calendar and form fields until the form is ready.
- Added a retry action if the lazy booking form cannot be loaded.
- Added a reserved-height, branded loading state to booking and availability calendars, with a clear message if calendar data cannot be fetched.
- Added translations for the branded loading message in all 11 bundled languages.
- Updated frontend asset versions to include stylesheet and lazy-loader modification times so browsers fetch the updated interface.
2.1.84
- Maintenance release.
2.1.83
- Maintenance release.
2.1.82
- Maintenance release.
2.1.81
- Fixed frontend handling of REST API validation errors so guests see specific messages, including the configured minimum or maximum stay and guest limit, instead of a generic booking error.
- Improve rate group deletion logic with enhanced error handling and clearer success messages
2.1.80
- Unified guest payment requests and unpaid reservation reminders into one configurable schedule that always requests the current outstanding amount.
- Kept staff payment notifications on their existing staff rules and removed duplicate guest balance-request emails.
- Aligned the one-time automatic card charge with the final configured guest reminder day; sends the regular payment reminder if a charge fails or needs authentication.
- Migrated existing reminder and balance-request days into the unified schedule and updated translations in all bundled languages.
2.1.79
- Added configurable advance-payment rules based on the time between booking and arrival, with global defaults and per-apartment overrides or opt-outs.
- Added partial-payment tracking that displays amounts received and the remaining balance.
- Added automatic balance requests a configurable number of days before arrival, including card checkout links and bank-transfer instructions.
- Added optional off-session card charging through Stripe and Mollie when the guest explicitly authorizes future charges; sends a payment link if automatic collection needs additional authentication or fails.
- Added translations for the advance-payment and balance-collection settings, booking form, and guest emails in all bundled languages.
2.1.78
- Added multiple bank email parser profiles with sender-based profile selection and profile-specific reference, amount, and currency patterns.
- Added amount and currency extraction to the email-payment parser test and import audit.
- Improved the bank-profile settings layout and added translations for all bundled languages.
- Added accommodation-template placeholders for reservation ID, payment amount, and payment currency, and clarified invoice-number and payment-reference placeholders.
- Made placeholder guidance visible in the accommodation editor and updated the documentation and translations in all available languages; documented the Czech-only variable symbol in Czech.
Older entries are listed in changelog.txt shipped with the plugin.
