How to receive payment for the booking before creation of the booking.

Short answer to this question, it does not possible. But you can configure auto cancellation of unpaid bookings, and auto approving of paid bookings during specific times.

Booking is created before payment process in any case. You need to activate the auto approve / cancel bookings at the Booking > Settings > Payment page in Stripe or PayPal section, etc..

Also you can activate auto cancellation of pending bookings that have no successfully paid status after a specific amount of time. You can activate this option at the Booking > Settings General page in the "Auto cancellation / approving" section.

It means that if the booking is not approved, and does not have the successfully paid status, this booking can be auto canceled after a specific amount of time.

Or you can even activate to show the "Pending bookings as available dates" - you can activate this option at the Booking > Settings General page in Advanced section.

---
Important info about payment status and auto-cancellation of bookings.
But you need to be sure that all "good" bookings have to be approved or have successfully paid status.

Because if you are using the PayPal standard integration and your visitors make the payment for the booking, but do not click on the "return link" on PayPal site to your site, so Booking Calendar does not know that the payment is successful, and this booking can be auto canceled with that feature.
Stripe has to auto redirect to booking page automatically.

So sometimes it's possible that the successfully paid bookings will not have this status and that's why it can be auto-canceled, if you do not approve them.

Ideally (for PayPal) you will need to activate and correctly configure the PayPal IPN system, at the Booking > Settings > Payment page and in the PayPal account. So in this case the PayPal has to send the messages directly to your booking system.

---
When auto cancellation starts work ?

The Auto cancellation starts work when someone opens the front end side of your website. Please open the page with your booking form, and then check your booking at the Booking Listing page, relative Auto cancellation.
Also please recheck your timezone configuration at the WordPress > Settings General page. It can be an issue relative to the not right time of auto-cancellation.

So please note, auto-cancellation can execute every 1 hour (or other period), if you have configured CRON at your website or if some visitor has visited your website, and cancellation time exceeds that specific "auto cancellation " time duration from last cancellation .

If nobody visit website during "1 hour" (or other period of time), so system just does not start script for initializing checking about (auto cancellation, etc... ) some bookings. In this case, you need to configure CRON script at your server. Please check more about configuration of CRON.

In pure WordPress system it working with pseudo-cron functionality:

WordPress Cron is what many people refer to as a “pseudo-cron system.” The difference is in how UNIX cron and WordPress Cron take action. A typical UNIX cron system runs in this order:
- A time tied to an action occurs.
- Cron runs the action tied to that time.

With WordPress Cron, it works a little differently:

- A visitor comes to any page on your WordPress website.
- WordPress Cron checks each cron event to see whether the scheduled time has passed.
- If the scheduled time for that event has passed, then WordPress Cron executes any actions tied to that event.

Is it possible to select multiple time ranges/time slots ?

Its does not possible to select several timeslots (possible to select only one), if you are using Booking Calendar Free version of in paid versions using timerange shortcode:

[select rangetime "10:00 - 12:00" "12:00- 14:00" "14:00 - 16:00" "16:00 - 18:00" "18:00 - 20:00"]

Instead of timeslots selection you can use start time and end time selections or start time and time duration selections shortcodes at the Booking > Settings > Form page in paid versions of Booking Calendar. So you can book several consecutive hours during specific day.

1) Star time and duration of time shortcodes, for ability to book several consecutive hours during a day:

Start time: [select starttime "10:00" "11:00" "12:00" "13:00" "14:00" "15:00" "16:00" "18:00"]
Time Duration: [select durationtime "15min@@00:15" "30 min@@00:30" "45 min@@00:45" "1 hour@@01:00" "1 hour 30 min@@01:30"]

2) Or you can use start time and end time selections or time entering shortcodes:

Start time: [select starttime "10:00" "11:00" "12:00" "13:00" "14:00" "15:00" "16:00" "18:00"]
End time: [select starttime "11:00" "12:00" "13:00" "14:00" "15:00" "16:00" "19:00"]

You can configure the timeslots selections on the Booking > Settings > Form page. Please use the "shortcode generator" on the right side of that page for the correct generation of the shortcode.
Please watch more in this video: https://wpbookingcalendar.com/help/booking-calendar-video-timeslots/

You can test the bookings for the specific times in action on the live demo of Business Small version (which is configured by default for the bookings of specific time-slots) here: https://bs.wpbookingcalendar.com/
Other live demo you will need to reconfigure.

How to show only one payment form, which was selected in booking form by visitor?

This instruction apply only to updates 8.6 or newer in Booking Calendar Business Small or higher versions.

You can use in the booking form at the Booking > Settings > Form page this shortcode for ability to select payment method that will be showing after booking process:

<p>Select payment method:<br/>
  [select payment-method "All payment methods@@" "Stripe@@stripe_v3" "PayPal@@paypal" "Authorize.Net@@authorizenet" "Sage Pay@@sage" "Bank Transfer@@bank_transfer" "Pay in Cash@@pay_cash" "iPay88@@ipay88" "iDEAL@@ideal"]
</p>

Of course, you can remove from the above shortcode, the payment systems, that you have not activated at the Booking > Settings > Payment page, and use only active payment forms, similar to this:

<p>Select payment method:<br/>
  [select payment-method "All payment methods@@" "Stripe@@stripe_v3" "PayPal@@paypal"]
</p>

P.S. This solution was suggested by "Dan Brown". Thank you.

How to add Booking Calendar in Gutenberg editor in Classic (old) way?

How to add Booking Calendar in Gutenberg editor in Classic (old) way?

  1. Click on "+" Plus button to add new block.
  2. Select Formatting section and click on "Classic" block, or simply enter "Classic" in Search field. New "Classic" block will be added to the page.
  3. Click on "Booking Calendar" icon in "Classic" toolbar.
  4. Configure Booking Calendar parameters in popup dialog and click Insert button. Publish / Save the page.

Add Booking Calendar in Gutenberg editor in Classic (old) way

Add Booking Calendar Blocks in Gutenberg editor in "native" mode.
(available since update 8.4 of Booking Calendar)

Configuration ability to View and Manage bookings by customers, who made the booking

Configuration of ability to view and manage all previous bookings of user, at front-end side of your website. Visitors of your website, can view previous (own) bookings, by clicking on secret link in email, which is sending after booking created.

Important! Please note, if you open this page directly, you will see this warning "You do not set any parameters for booking editing". It's because system allow to open this page only from link(s) in email templates, which your website visitor had to received, after he/she made the booking (inside of that link will be specific parameter (secret HASH) for the identification of the booking). Check more about such type of configuration here.

Arithmetic expressions for Advanced Costs

Its possible to use arithmetic expressions, including fields shortcodes and simple mathematics operations at the Booking > Resources > Advanced cost page.

Its useful, when you are having checkbox (or selectbox), and want to apply some additional cost depend from selected option in other selectbox or checkbox in booking form.


1) For example, you are having increase of booking cost depend from visitors selection ( in N times),
and also you need to add 50 USD for a breakfast per each visitor, if some checkbox is selected.
Example of configuration fields in the booking form at the Booking > Settings > Form page:

</p>
<p>Visitors:  [select visitors "1" "2" "3" "4" "5"]</p>
<p>Breakfast (+50 USD):  [checkbox breakfast ""]</p>
<p>

In this case you can configure at the Booking > Resources > Advanced cost page for visitors option:

[visitors]
1 = 100%  of total booking cost
2 = 200%  of total booking cost
3 = 300%  of total booking cost
4 = 400%  of total booking cost
5 = 500%  of total booking cost

And for breakfast selection you can define expressions like this:
( [visitors] * 50 )

where [visitors] its shortcode of field from the Booking > Settings > Form page in "Content of booking fields data" form.


2) Shortcodes, its the names of form fields, from the "Content of booking fields data" form in Booking > Settings > Form page.
Each such shortcode will be replaced to digital number relative to selected option or checkbox.

3) In case, if the options in selectboxes or checkboxes does not have numbers (but some strings), please DO NOT use such shortcodes!
For example, if you have shortcode like this in booking form:

[select visitors "1" "2" "3" "4"]

so then you can use [visitors] shortcode at the Booking > Resources > Advanced cost page.

But if you are having shortcode like this at the Booking > Settings > Form page:

[select visitors "Person 1" " Person 2" " Person 3" " Person 4"]

so then you CAN NOT use shortcode [visitors] in the Booking > Resources > Advanced cost page.

4) Tip. The value of each selected checkbox = 1 and value of not checked checkbox is 0.

5) Please note, you need to use parentheses ( and ) to separate each mathematical operation.

Please use instead of expression like this

5 - 3 * 2
this expression
( 5 - ( 3 * 2 ) )
otherwise, the result will be 4 instead of correct -1

Supporting since update 8.2 in Booking Calendar Business Medium or higher versions.

Adding additional costs of some additional charges of selection in select boxes or check boxes in booking form (tax, cleaning, breakfast, visitors selection, excursion, etc…)

Please note, this configuration is possible at the Business Medium or higher versions.

Description
If you are need to add the additional costs, like tax or some other additional charges (cleaning,breakfast, excursion...), or just increase the cost depend from the visitor number selection at the selectbox, which is depend from the selection of the selectboxes or checkboxes in the booking form, so then you can make this configuration in the Business Medium or higher versions.

Configuration
1) You can insert into the Booking form, at the Booking > Settings > Fields page some checkbox, like this:

Tax: [checkbox* my_tax ""]

If you are need to have this checkbox hidden and checked by default in this way:

<div style="display:none;">[checkbox my_cleaning default:on ""]</div>

If you are need to have this checkbox as required and checked by default so use it in this way:

Cleaning service: [checkbox* my_cleaning default:on ""]

For the selectbox, its can look like this:

Visitors [select visitors "1" "2" "3" "4"]

Please read more about the booking form fields configuration here

2) Then at the Booking > Resources > Advanced cost page at the advanced cost management section for the option my_tax or/and visitors, set some additional cost.

For example, for the tax 6% you need to set value 106% there.

Or if you want to add the fixed cost value, you can set this value to this "my_cleaning" option:

my_cleaning = 50

or for the visitors selections you can leave this configuration:

visitors:
1 = 100%
2 = 200%
3 = 300%
4 = 400%

etc....

Configuration different form fields, for the different week day (or day in season filters) selection in calendar

Description
Available in Booking Calendar Business Medium or higher versions.
This feature provide possibility to show the different form fields or any other HTML content in the booking form, depends from the selection of specific week day in calendar or different days, which assigned to the specific season filters.


Configuration
If you are not familiar with the booking form fields configuration, please read firstly about the booking form fields configuration here.

The general structure of the configuration condition rule are following:

[condition name="FILTER-NAME" type="FILTER-TYPE" value="VALUE"]
   CONTENT (any HTML or form fields shortcodes), showing if these condition is TRUE
[/condition]

Parameters:
name - its the unique name of the condition group, several conditions with different values. For example, if you want to have the specific HTML content for the different week days, you will be have the several conditions, with the same name but with different value parameters in conditions. Please check more about it, in the examples.
type - type of the condition. There are 2 types of the condition: "weekday" and "season". "weekday" - is mean that condition rule is based on the selected day of week value, like Monday, Tuesday, etc... . "season" - is mean that condition rule is based on the "season filter" name of selected date. In other words the condition is TRUE if the selected day is belong to some season filter in the Booking > Resources > Filters page.
value - value of the specific conditions. If the value is true, so then the content of the conditions is showing in the booking form. You can have the default value (empty - "", or like this - "*") for showing the content of this condition, if all other conditions is FALSE, or at initial stage, when the date in calendar is not selected yet.

Examples:
Week days conditions.

[condition name="weekday-condition" type="weekday" value="*"]
  Default:   [select rangetime  "10:00 - 11:00" "11:00 - 12:00" "12:00 - 13:00" "13:00 - 14:00" "14:00 - 15:00" "15:00 - 16:00" "16:00 - 17:00" "17:00 - 18:00"]
[/condition]
[condition name="weekday-condition" type="weekday" value="1,2"]
  Monday, Tuesday:    [select rangetime  "10:00 - 12:00" "12:00 - 14:00"]
[/condition]
[condition name="weekday-condition" type="weekday" value="3,4"]
  Wednesday, Thursday:  [select rangetime  "14:00 - 16:00" "16:00 - 18:00" "18:00 - 20:00"]
[/condition]
[condition name="weekday-condition" type="weekday" value="5,6,0"]
  Friday, Saturday, Sunday:  [select rangetime  "10:00 - 12:00" "12:00 - 14:00" "14:00 - 16:00" "16:00 - 18:00" "18:00 - 20:00"]
[/condition]

where values are mean following:
"*" - default value, if no dates are selected, or none of the exist condition is true.
0 - Sunday,
1 - Monday,
2 - Tuesday,
3 - Wednesday,
4 - Thursday,
5 - Friday,
6 - Saturday
You can use the several values, separated by comma.

Season filters conditions.

[condition name="season-times" type="season" value="*"]
  Default: [select rangetime "14:00 - 16:00" "16:00 - 18:00" "18:00 - 20:00"]
[/condition]
[condition name="season-times" type="season" value="High_season"]
  High season: [select rangetime  "10:00 - 12:00" "12:00 - 14:00" "14:00 - 16:00" "16:00 - 18:00" "18:00 - 20:00"]
[/condition]
[condition name="season-times" type="season" value="Low_season"]
  Low season: [select rangetime "12:00 - 14:00" "14:00 - 16:00"]
[/condition]

where
High_season - its a name of the some Season filter on the Booking > Resources > Filters page,
Low_season - its a name of the some Season filter on the Booking > Resources > Filters page
You can use only single season filter name in the one value.

Additional info.
Please note, if you will activate the "Multiple days" selection or "Range days" selection in the General Booking Settings page at calendar section, so all these conditions will be based on the "first" day of that selection in the calendar.

Configuration different time slots, for the different week days in calendar (or day in season filter(s))

Description
Available in Booking Calendar Business Medium or higher versions.
This feature provide possibility to use the different time slots selections in the booking form for the different week days or different days, which assigned to the specific season filters. So each week day (day of specific season filter) can have different time slots list.


Configuration
You can configure the time slots at the Booking > Settings > Fields page. If you are not familiar with the booking form fields configuration, please read firstly about the booking form fields configuration here.

The general structure of the configuration condition rule are following:

[condition name="FILTER-NAME" type="FILTER-TYPE" value="VALUE"]
   CONTENT (any HTML or form fields shortcodes), showing if these condition is TRUE
[/condition]

Parameters:
name - its the unique name of the condition group, several conditions with different values. For example, if you want to have the different time slots for the different week days, you will be have the several conditions, with the same name but with different value parameters in conditions. Please check more about it, in the examples.
type - type of the condition. There are 2 types of the condition: "weekday" and "season". "weekday" - is mean that condition rule is based on the selected day of week value, like Monday, Tuesday, etc... . "season" - is mean that condition rule is based on the "season filter" name of selected date. In other words the condition is TRUE if the selected day is belong to some season filter in the Booking > Resources > Filters page.
value - value of the specific conditions. If the value is true, so then the content of the conditions is showing in the booking form. You can have the default value (empty - "", or like this - "*") for showing the content of this condition, if all other conditions is FALSE, or at initial stage, when the date in calendar is not selected yet.

Examples:
Week days conditions.

[condition name="weekday-condition" type="weekday" value="*"]
  Default:   [select rangetime  "10:00 - 11:00" "11:00 - 12:00" "12:00 - 13:00" "13:00 - 14:00" "14:00 - 15:00" "15:00 - 16:00" "16:00 - 17:00" "17:00 - 18:00"]
[/condition]
[condition name="weekday-condition" type="weekday" value="1,2"]
  Monday, Tuesday:    [select rangetime  "10:00 - 12:00" "12:00 - 14:00"]
[/condition]
[condition name="weekday-condition" type="weekday" value="3,4"]
  Wednesday, Thursday:  [select rangetime  "14:00 - 16:00" "16:00 - 18:00" "18:00 - 20:00"]
[/condition]
[condition name="weekday-condition" type="weekday" value="5,6,0"]
  Friday, Saturday, Sunday:  [select rangetime  "10:00 - 12:00" "12:00 - 14:00" "14:00 - 16:00" "16:00 - 18:00" "18:00 - 20:00"]
[/condition]

where values are mean following:
"*" - default value, if no dates are selected, or none of the exist condition is true.
0 - Sunday,
1 - Monday,
2 - Tuesday,
3 - Wednesday,
4 - Thursday,
5 - Friday,
6 - Saturday
You can use the several values, separated by comma.

Season filters conditions.

[condition name="season-times" type="season" value="*"]
  Default: [select rangetime "14:00 - 16:00" "16:00 - 18:00" "18:00 - 20:00"]
[/condition]
[condition name="season-times" type="season" value="High_season"]
  High season: [select rangetime  "10:00 - 12:00" "12:00 - 14:00" "14:00 - 16:00" "16:00 - 18:00" "18:00 - 20:00"]
[/condition]
[condition name="season-times" type="season" value="Low_season"]
  Low season: [select rangetime "12:00 - 14:00" "14:00 - 16:00"]
[/condition]

where
High_season - its a name of the some Season filter on the Booking > Resources > Filters page,
Low_season - its a name of the some Season filter on the Booking > Resources > Filters page
You can use only single season filter name in the one value.

Additional info.
Please note, if you will activate the "Multiple days" selection or "Range days" selection in the General Booking Settings page at calendar section, so all these conditions will be based on the "first" day of that selection in the calendar.