{"id":324016,"date":"2026-06-19T19:02:19","date_gmt":"2026-06-19T19:02:19","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/hostnsync-booking-engine-reservations-calendar-sync\/"},"modified":"2026-10-29T16:30:29","modified_gmt":"2026-10-29T16:30:29","slug":"host-domination-booking-engine","status":"publish","type":"plugin","link":"https:\/\/fuc.wordpress.org\/plugins\/host-domination-booking-engine\/","author":11558429,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.5.17","stable_tag":"1.5.17","tested":"7.1.4","requires":"6.0","requires_php":"7.4","requires_plugins":null,"header_name":"Host Domination Booking Engine: Calendar Sync & Reservation System","header_author":"Host Domination","header_description":"Lightweight Booking Engine with Calendar Sync and Reservation Requests for Vacation Rentals, Apartments, B&Bs and Hosts.","assets_banners_color":"ebf0f8","last_updated":"2026-10-29 16:30:29","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/hostdomination.com\/booking-engine\/","header_author_uri":"https:\/\/hostdomination.com\/","rating":5,"author_block_rating":0,"active_installs":100,"downloads":6576,"num_ratings":3,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["installation","faq","changelog","description"],"tags":{"1.4.97":{"tag":"1.4.97","author":"ilithio","date":"2026-10-10 13:17:09","revision":3738080},"1.4.98":{"tag":"1.4.98","author":"ilithio","date":"2026-10-10 21:05:03","revision":3738709},"1.4.99":{"tag":"1.4.99","author":"ilithio","date":"2026-10-11 15:34:34","revision":3739697},"1.4.991":{"tag":"1.4.991","author":"ilithio","date":"2026-10-13 11:37:21","revision":3743759},"1.5":{"tag":"1.5","author":"ilithio","date":"2026-10-22 10:15:36","revision":3759680},"1.5.12":{"tag":"1.5.12","author":"ilithio","date":"2026-10-23 13:26:26","revision":3761752},"1.5.16":{"tag":"1.5.16","author":"ilithio","date":"2026-10-26 12:52:55","revision":3766435},"1.5.17":{"tag":"1.5.17","author":"ilithio","date":"2026-10-29 16:30:29","revision":3773516}},"upgrade_notice":[],"ratings":{"1":0,"2":0,"3":0,"4":0,"5":3},"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3763451,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3763451,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3762417,"resolution":"1544x500","location":"assets","locale":"","width":2170,"height":725},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3762417,"resolution":"772x250","location":"assets","locale":"","width":2170,"height":725}},"assets_blueprints":{"blueprint.json":{"filename":"blueprint.json","revision":3773517,"resolution":false,"location":"assets","locale":"","contents":"{\"$schema\":\"https:\\\/\\\/playground.wordpress.net\\\/blueprint-schema.json\",\"meta\":{\"title\":\"Host Domination Booking Engine Live Demo\",\"description\":\"Installs and activates Host Domination Booking Engine, creates two demo calendars connected to the local assets\\\/demo.ics feed bundled with the plugin, adds more than 60 fictional booking requests across the current and previous two months, and opens the populated Booking Engine dashboard.\",\"author\":\"Host Domination\",\"categories\":[\"booking\",\"calendar\",\"reservations\",\"plugin-demo\"]},\"landingPage\":\"\\\/wp-admin\\\/admin.php?page=hdbe\",\"preferredVersions\":{\"php\":\"8.3\",\"wp\":\"latest\"},\"features\":{\"networking\":true},\"steps\":[{\"step\":\"installPlugin\",\"pluginData\":{\"resource\":\"wordpress.org\\\/plugins\",\"slug\":\"host-domination-booking-engine\"},\"options\":{\"activate\":true}},{\"step\":\"runPHP\",\"code\":\"<?php\\nrequire '\\\/wordpress\\\/wp-load.php';\\n\\nglobal $wpdb;\\n\\n$privacy_page = get_page_by_path('privacy-policy');\\nif (!$privacy_page) {\\n    $privacy_page_id = wp_insert_post([\\n        'post_title'   => 'Privacy Policy',\\n        'post_name'    => 'privacy-policy',\\n        'post_content' => '<h2>Privacy Policy<\\\/h2><p>This temporary demo collects only the information entered in the booking request form. The WordPress Playground environment is temporary and is deleted when the preview session ends.<\\\/p>',\\n        'post_status'  => 'publish',\\n        'post_type'    => 'page',\\n        'post_author'  => 1,\\n    ]);\\n} else {\\n    $privacy_page_id = (int) $privacy_page->ID;\\n}\\n\\n$settings = (array) get_option('hdbe_settings', []);\\n$settings['hold_minutes'] = 20;\\n$settings['sync_interval'] = 'hdbe_30min';\\n$settings['privacy_policy_url'] = get_permalink($privacy_page_id);\\nupdate_option('hdbe_settings', $settings);\\n\\n$calendar_table = $wpdb->prefix . 'hdbe_calendars';\\n$feeds_table    = $wpdb->prefix . 'hdbe_external_feeds';\\n$bookings_table = $wpdb->prefix . 'hdbe_bookings';\\n\\n$ical_url = plugins_url(\\n    'assets\\\/demo.ics',\\n    WP_PLUGIN_DIR . '\\\/host-domination-booking-engine\\\/host-domination-booking-engine.php'\\n);\\n\\n$demo_calendars = [\\n    [\\n        'name'       => 'Sea View Apartment',\\n        'slug'       => 'sea-view-apartment',\\n        'base_price' => 89.00,\\n        'max_guests' => 4,\\n    ],\\n    [\\n        'name'       => 'Sunset Loft',\\n        'slug'       => 'sunset-loft',\\n        'base_price' => 109.00,\\n        'max_guests' => 3,\\n    ],\\n];\\n\\n\\\/\\\/ Keep the Live Preview at two published demo calendars.\\n\\\/\\\/ Also remove the legacy third demo calendar if this blueprint is re-run.\\n$legacy_calendar_id = (int) $wpdb->get_var(\\n    $wpdb->prepare(\\n        \\\"SELECT id FROM {$calendar_table} WHERE slug = %s LIMIT 1\\\",\\n        'garden-suite'\\n    )\\n);\\n\\nif ($legacy_calendar_id) {\\n    $wpdb->delete($feeds_table, ['calendar_id' => $legacy_calendar_id]);\\n    $wpdb->delete($bookings_table, ['calendar_id' => $legacy_calendar_id]);\\n    $wpdb->delete($calendar_table, ['id' => $legacy_calendar_id]);\\n}\\n\\n$calendar_ids = [];\\n\\nforeach ($demo_calendars as $index => $demo_calendar) {\\n    $calendar_id = (int) $wpdb->get_var(\\n        $wpdb->prepare(\\n            \\\"SELECT id FROM {$calendar_table} WHERE slug = %s LIMIT 1\\\",\\n            $demo_calendar['slug']\\n        )\\n    );\\n\\n    $calendar_data = [\\n        'name'                      => $demo_calendar['name'],\\n        'slug'                      => $demo_calendar['slug'],\\n        'base_price'                => $demo_calendar['base_price'],\\n        'cleaning_fee'              => 0,\\n        'currency'                  => 'eur',\\n        'show_prices_frontend'      => 1,\\n        'deposit_percent'           => 100,\\n        'max_guests'                => $demo_calendar['max_guests'],\\n        'max_child_age'             => 10,\\n        'min_nights'                => 2,\\n        'active'                    => 1,\\n        'sort_order'                => $index,\\n        'layout_mode'               => 'auto',\\n        'whatsapp_requests_enabled' => 0,\\n        'whatsapp_number'           => '',\\n    ];\\n\\n    if (!$calendar_id) {\\n        $calendar_data['feed_token'] = wp_generate_password(48, false, false);\\n        $calendar_data['created_at'] = current_time('mysql');\\n\\n        $wpdb->insert($calendar_table, $calendar_data);\\n        $calendar_id = (int) $wpdb->insert_id;\\n    } else {\\n        $wpdb->update($calendar_table, $calendar_data, ['id' => $calendar_id]);\\n    }\\n\\n    if (!$calendar_id) {\\n        continue;\\n    }\\n\\n    $calendar_ids[] = $calendar_id;\\n\\n    \\\/\\\/ Each demo calendar uses the same public iCal feed requested for the Live Preview.\\n    $wpdb->delete($feeds_table, ['calendar_id' => $calendar_id]);\\n    $wpdb->insert(\\n        $feeds_table,\\n        [\\n            'calendar_id' => $calendar_id,\\n            'name'        => 'Other',\\n            'url'         => $ical_url,\\n            'created_at'  => current_time('mysql'),\\n        ]\\n    );\\n}\\n\\n\\\/\\\/ Import the real demo.ics feed into both demo calendars.\\nif (class_exists('HDBE_Plugin') && method_exists('HDBE_Plugin', 'import_all_external_feeds')) {\\n    HDBE_Plugin::import_all_external_feeds();\\n}\\n\\n\\\/\\\/ Remove older Playground fake requests from previous blueprint revisions.\\n$wpdb->query(\\n    \\\"DELETE FROM {$bookings_table}\\n     WHERE source = 'request'\\n       AND external_uid LIKE 'playground-demo-%'\\\"\\n);\\n\\n\\\/\\\/ Populate the three-month dashboard chart with 60 fictional website requests:\\n\\\/\\\/ 20 in the current month, 20 in the previous month and 20 two months ago.\\n$guest_names = [\\n    'Emma Carter', 'Daniel Brooks', 'Olivia Martin', 'James Wilson', 'Sophia Turner',\\n    'Liam Anderson', 'Mia Thompson', 'Noah Bennett', 'Charlotte Evans', 'Lucas Moore',\\n    'Amelia Harris', 'Ethan Clark', 'Isabella Lewis', 'Oliver Walker', 'Ava Hall',\\n    'Leo Young', 'Emily King', 'Arthur Wright', 'Grace Scott', 'Henry Green',\\n    'Sophie Adams', 'Oscar Baker', 'Lily Nelson', 'Jack Hill', 'Ella Roberts',\\n    'William Carter', 'Chloe Mitchell', 'George Cooper', 'Lucy Parker', 'Thomas Reed',\\n];\\n\\n$notes_pool = [\\n    'Could you please confirm the check-in time?',\\n    'We would appreciate a quiet room if available.',\\n    'Please let us know if early check-in is possible.',\\n    'Could you confirm whether parking is available?',\\n    'We are travelling with children and may need extra towels.',\\n    'Is luggage storage available before check-in?',\\n    'Please confirm whether late check-in is available.',\\n    'We are looking forward to our stay. Thank you!',\\n];\\n\\n$tz = wp_timezone();\\n$now = new DateTimeImmutable('now', $tz);\\n$today = new DateTimeImmutable('today', $tz);\\n$month_anchor = new DateTimeImmutable('first day of this month 00:00:00', $tz);\\n\\nfor ($i = 0; $i < 60; $i++) {\\n    $group = intdiv($i, 20); \\\/\\\/ 0 = current month, 1 = previous, 2 = two months ago\\n    $month_date = $month_anchor->modify('-' . $group . ' months');\\n\\n    $days_in_month = (int) $month_date->format('t');\\n    if ($group === 0) {\\n        $days_in_month = max(1, min($days_in_month, (int) $now->format('j')));\\n    }\\n\\n    $day = 1 + (($i * 7 + $group * 3) % $days_in_month);\\n    $hour = 8 + (($i * 5) % 11);\\n    $minute = ($i * 13) % 60;\\n\\n    $created_at = $month_date\\n        ->setDate((int) $month_date->format('Y'), (int) $month_date->format('m'), $day)\\n        ->setTime($hour, $minute, 0);\\n\\n    $calendar_index = $i % max(1, count($calendar_ids));\\n    $calendar_id = $calendar_ids[$calendar_index] ?? 0;\\n    if (!$calendar_id) {\\n        continue;\\n    }\\n\\n    \\\/\\\/ Roughly 40% confirmed, the rest pending, so both chart series are visible.\\n    $is_confirmed = in_array($i % 5, [0, 2], true);\\n    $status = $is_confirmed ? 'confirmed' : 'pending';\\n\\n    \\\/\\\/ Keep stays in the future so Upcoming stays and the availability calendar are populated too.\\n    $start_offset = 2 + (($i * 2 + $calendar_index * 5) % 100);\\n    $nights = 2 + ($i % 4);\\n    $start_date = $today->modify('+' . $start_offset . ' days');\\n    $end_date = $start_date->modify('+' . $nights . ' days');\\n\\n    $adults = 1 + ($i % 3);\\n    $children = ($i % 4 === 0) ? 1 : 0;\\n    $base_price = (float) $demo_calendars[$calendar_index]['base_price'];\\n    $amount = $base_price * $nights;\\n\\n    $guest_name = $guest_names[$i % count($guest_names)];\\n    $guest_slug = sanitize_title($guest_name);\\n    $guest_email = $guest_slug . '+' . ($i + 1) . '@example.com';\\n    $phone = '+39 320 555 ' . str_pad((string) (1000 + $i), 4, '0', STR_PAD_LEFT);\\n    $notes = \\\"Phone: {$phone}\\\\nNotes: \\\" . $notes_pool[$i % count($notes_pool)];\\n\\n    $wpdb->insert(\\n        $bookings_table,\\n        [\\n            'calendar_id'     => $calendar_id,\\n            'start_date'      => $start_date->format('Y-m-d'),\\n            'end_date'        => $end_date->format('Y-m-d'),\\n            'guest_name'      => $guest_name,\\n            'guest_email'     => $guest_email,\\n            'adults'          => $adults,\\n            'children'        => $children,\\n            'child_ages'      => $children ? wp_json_encode([8]) : null,\\n            'amount'          => $amount,\\n            'extras_total'    => 0,\\n            'discount_total'  => 0,\\n            'deposit_amount'  => 0,\\n            'currency'        => 'eur',\\n            'status'          => $status,\\n            'source'          => 'request',\\n            'notes'           => $notes,\\n            'external_uid'    => 'playground-demo-request-' . str_pad((string) ($i + 1), 3, '0', STR_PAD_LEFT),\\n            'hold_expires_at' => null,\\n            'created_at'      => $created_at->format('Y-m-d H:i:s'),\\n            'updated_at'      => current_time('mysql'),\\n        ]\\n    );\\n}\\n\\n\\\/\\\/ Keep the first five demo requests in a deliberate status order:\\n\\\/\\\/ 1 confirmed, 2 pending, 3 confirmed, 4 confirmed, 5 pending.\\n\\\/\\\/ Insert them in reverse so the same order is preserved even on screens\\n\\\/\\\/ that sort by newest database row rather than by date.\\n$featured_requests = [\\n    [\\n        'name'     => 'Maya Collins',\\n        'status'   => 'confirmed',\\n        'offset'   => 3,\\n        'calendar' => 0,\\n        'children' => 0,\\n    ],\\n    [\\n        'name'     => 'Alexander Stone',\\n        'status'   => 'pending',\\n        'offset'   => 7,\\n        'calendar' => 1,\\n        'children' => 0,\\n    ],\\n    [\\n        'name'     => 'Sofia Romano',\\n        'status'   => 'confirmed',\\n        'offset'   => 11,\\n        'calendar' => 0,\\n        'children' => 1,\\n    ],\\n    [\\n        'name'     => 'Oliver Grant',\\n        'status'   => 'confirmed',\\n        'offset'   => 15,\\n        'calendar' => 1,\\n        'children' => 0,\\n    ],\\n    [\\n        'name'     => 'Emma Laurent',\\n        'status'   => 'pending',\\n        'offset'   => 19,\\n        'calendar' => 0,\\n        'children' => 0,\\n    ],\\n];\\n\\nfor ($i = count($featured_requests) - 1; $i >= 0; $i--) {\\n    $request = $featured_requests[$i];\\n    $calendar_index = (int) $request['calendar'];\\n\\n    if (!isset($calendar_ids[$calendar_index])) {\\n        continue;\\n    }\\n\\n    $uid = 'playground-demo-featured-upcoming-' . ($i + 1);\\n    $wpdb->delete($bookings_table, ['external_uid' => $uid]);\\n\\n    $start_date = $today->modify('+' . (int) $request['offset'] . ' days');\\n    $end_date = $start_date->modify('+3 days');\\n    $created_at = $now->modify('-' . (15 + $i * 9) . ' minutes');\\n    $guest_name = $request['name'];\\n    $status = $request['status'];\\n    $children = (int) $request['children'];\\n    $status_note = $status === 'pending'\\n        ? 'Pending demo request - ready to confirm or delete.'\\n        : 'Confirmed demo stay.';\\n\\n    $wpdb->insert(\\n        $bookings_table,\\n        [\\n            'calendar_id'     => $calendar_ids[$calendar_index],\\n            'start_date'      => $start_date->format('Y-m-d'),\\n            'end_date'        => $end_date->format('Y-m-d'),\\n            'guest_name'      => $guest_name,\\n            'guest_email'     => sanitize_title($guest_name) . '@example.com',\\n            'adults'          => 2,\\n            'children'        => $children,\\n            'child_ages'      => $children ? wp_json_encode([7]) : null,\\n            'amount'          => (float) $demo_calendars[$calendar_index]['base_price'] * 3,\\n            'extras_total'    => 0,\\n            'discount_total'  => 0,\\n            'deposit_amount'  => 0,\\n            'currency'        => 'eur',\\n            'status'          => $status,\\n            'source'          => 'request',\\n            'notes'           => \\\"Phone: +39 320 555 20{$i}\\\\nNotes: {$status_note}\\\",\\n            'external_uid'    => $uid,\\n            'hold_expires_at' => null,\\n            'created_at'      => $created_at->format('Y-m-d H:i:s'),\\n            'updated_at'      => current_time('mysql'),\\n        ]\\n    );\\n}\\n\\n$demo_page = get_page_by_path('booking-engine-demo');\\n$demo_content =\\n    '<!-- wp:paragraph --><p>Select a property, choose your dates and test the direct booking request form. This WordPress Playground website is temporary.<\\\/p><!-- \\\/wp:paragraph -->'\\n    . '[hdbe_booking_calendars]';\\n\\nif (!$demo_page) {\\n    $demo_page_id = wp_insert_post([\\n        'post_title'   => 'Booking Engine Live Demo',\\n        'post_name'    => 'booking-engine-demo',\\n        'post_content' => $demo_content,\\n        'post_status'  => 'publish',\\n        'post_type'    => 'page',\\n        'post_author'  => 1,\\n    ]);\\n} else {\\n    $demo_page_id = (int) $demo_page->ID;\\n    wp_update_post([\\n        'ID'           => $demo_page_id,\\n        'post_content' => $demo_content,\\n        'post_status'  => 'publish',\\n    ]);\\n}\\n\\n\\\/\\\/ Hide front-end navigation menus while keeping the site header and page title.\\n$demo_css = '\\n    header nav,\\n    .wp-block-navigation,\\n    #site-navigation,\\n    .main-navigation,\\n    .primary-navigation,\\n    .menu-primary-container,\\n    .site-header .menu {\\n        display: none !important;\\n    }\\n';\\n\\nif (function_exists('wp_update_custom_css_post')) {\\n    wp_update_custom_css_post($demo_css);\\n}\\n\\n\\\/\\\/ Create a temporary must-use plugin for the Playground administration area.\\n\\\/\\\/ It keeps only the Host Domination Booking Engine menu and redirects the\\n\\\/\\\/ standard WordPress Dashboard to the Booking Engine dashboard.\\n$mu_plugins_dir = WP_CONTENT_DIR . '\\\/mu-plugins';\\nif (!is_dir($mu_plugins_dir)) {\\n    wp_mkdir_p($mu_plugins_dir);\\n}\\n\\n$demo_admin_plugin = <<<'PHP'\\n<?php\\n\\\/**\\n * Plugin Name: Host Domination Playground Admin\\n * Description: Simplifies the WordPress admin menu for the temporary Live Preview.\\n *\\\/\\n\\ndefined('ABSPATH') || exit;\\n\\nadd_action('admin_menu', static function () {\\n    global $menu;\\n\\n    if (!is_array($menu)) {\\n        return;\\n    }\\n\\n    foreach ($menu as $item) {\\n        $slug = isset($item[2]) ? (string) $item[2] : '';\\n\\n        if ($slug === 'hdbe' || strpos($slug, 'separator') === 0) {\\n            continue;\\n        }\\n\\n        remove_menu_page($slug);\\n    }\\n}, 999);\\n\\nadd_action('admin_bar_menu', static function ($admin_bar) {\\n    foreach ([\\n        'wp-logo',\\n        'site-name',\\n        'updates',\\n        'comments',\\n        'new-content',\\n        'search',\\n    ] as $node_id) {\\n        $admin_bar->remove_node($node_id);\\n    }\\n}, 999);\\n\\n\\\/\\\/ Live Preview-only calendar-limit presentation:\\n\\\/\\\/ - never show the \\\"3\\\/3 calendars \\\/ limit reached\\\" box;\\n\\\/\\\/ - allow the third calendar to be added;\\n\\\/\\\/ - once three calendars exist, hide the Add Calendar control.\\nadd_action('admin_footer', static function () {\\n    global $wpdb;\\n\\n    $calendar_table = $wpdb->prefix . 'hdbe_calendars';\\n    $calendar_count = (int) $wpdb->get_var(\\n        \\\"SELECT COUNT(*) FROM {$calendar_table} WHERE active = 1\\\"\\n    );\\n    ?>\\n    <script>\\n    (() => {\\n        const initialCalendarCount = <?php echo (int) $calendar_count; ?>;\\n\\n        const normalize = (value) => (value || '').replace(\\\/\\\\s+\\\/g, ' ').trim();\\n\\n        const hideLimitMessage = () => {\\n            document.querySelectorAll('div, span, p, strong, small').forEach((node) => {\\n                const text = normalize(node.textContent);\\n\\n                if (!text || text.length > 180) {\\n                    return;\\n                }\\n\\n                if (!\\\/3\\\\s*\\\\\\\/\\\\s*3\\\\s*calendars\\\/i.test(text) && !\\\/limit reached\\\/i.test(text)) {\\n                    return;\\n                }\\n\\n                let target = node;\\n                let parent = target.parentElement;\\n\\n                while (parent) {\\n                    const parentText = normalize(parent.textContent);\\n\\n                    if (parentText !== text || parentText.length > 180) {\\n                        break;\\n                    }\\n\\n                    target = parent;\\n                    parent = target.parentElement;\\n                }\\n\\n                target.style.setProperty('display', 'none', 'important');\\n            });\\n        };\\n\\n        const addCalendarControls = () => {\\n            return Array.from(document.querySelectorAll('a, button, input[type=\\\"submit\\\"], input[type=\\\"button\\\"]'))\\n                .filter((node) => {\\n                    const text = normalize(node.textContent || node.value);\\n                    return \\\/add\\\\s+calendar\\\/i.test(text);\\n                });\\n        };\\n\\n        const applyCalendarLimitUI = () => {\\n            hideLimitMessage();\\n\\n            if (initialCalendarCount >= 3) {\\n                addCalendarControls().forEach((node) => {\\n                    node.style.setProperty('display', 'none', 'important');\\n                });\\n            }\\n        };\\n\\n        \\\/\\\/ Dashboard layout: keep the Calendar box immediately before\\n        \\\/\\\/ the \\\"Latest requests\\\/bookings\\\" box in the Live Preview.\\n        const moveDashboardCalendarBeforeLatest = () => {\\n            const params = new URLSearchParams(window.location.search);\\n            if (params.get('page') !== 'hdbe' || params.has('tab')) {\\n                return;\\n            }\\n\\n            const normalizeLower = (value) => normalize(value).toLowerCase();\\n\\n            const findHeading = (patterns) => {\\n                const candidates = Array.from(document.querySelectorAll(\\n                    'h1, h2, h3, h4, h5, h6, .hdbe-card-title, .hdbe-box-title, strong'\\n                ));\\n\\n                return candidates.find((node) => {\\n                    const text = normalizeLower(node.textContent);\\n                    return text && patterns.some((pattern) => pattern.test(text));\\n                }) || null;\\n            };\\n\\n            const findBox = (heading) => {\\n                if (!heading) {\\n                    return null;\\n                }\\n\\n                let node = heading;\\n                while (node && node.parentElement && node.parentElement !== document.body) {\\n                    const parent = node.parentElement;\\n                    const className = typeof parent.className === 'string' ? parent.className : '';\\n\\n                    if (\\n                        \\\/(?:card|box|panel|widget|section)\\\/i.test(className) ||\\n                        parent.matches('section, article')\\n                    ) {\\n                        return parent;\\n                    }\\n\\n                    node = parent;\\n                }\\n\\n                return heading.parentElement;\\n            };\\n\\n            const calendarHeading = findHeading([\\n                \\\/^calendar$\\\/,\\n                \\\/^calendario$\\\/\\n            ]);\\n\\n            const latestHeading = findHeading([\\n                \\\/latest\\\\s+requests\\\\s*\\\\\\\/\\\\s*bookings\\\/,\\n                \\\/latest\\\\s+requests\\\/,\\n                \\\/requests\\\\s*\\\\\\\/\\\\s*bookings\\\/,\\n                \\\/ultime\\\\s+richieste\\\/,\\n                \\\/richieste\\\\s*\\\\\\\/\\\\s*prenotazioni\\\/\\n            ]);\\n\\n            const calendarBox = findBox(calendarHeading);\\n            const latestBox = findBox(latestHeading);\\n\\n            if (\\n                !calendarBox ||\\n                !latestBox ||\\n                calendarBox === latestBox ||\\n                !latestBox.parentElement\\n            ) {\\n                return;\\n            }\\n\\n            latestBox.parentElement.insertBefore(calendarBox, latestBox);\\n        };\\n\\n        applyCalendarLimitUI();\\n        moveDashboardCalendarBeforeLatest();\\n\\n        \\\/\\\/ If the third calendar is created dynamically, hide the trigger immediately.\\n        if (initialCalendarCount === 2) {\\n            addCalendarControls().forEach((node) => {\\n                node.addEventListener('click', () => {\\n                    window.setTimeout(() => {\\n                        addCalendarControls().forEach((control) => {\\n                            control.style.setProperty('display', 'none', 'important');\\n                        });\\n                    }, 0);\\n                }, { once: true });\\n            });\\n        }\\n\\n        new MutationObserver(() => {\\n            applyCalendarLimitUI();\\n            moveDashboardCalendarBeforeLatest();\\n        }).observe(document.body, {\\n            childList: true,\\n            subtree: true,\\n        });\\n    })();\\n    <\\\/script>\\n    <?php\\n}, 999);\\n\\nadd_action('admin_init', static function () {\\n    global $pagenow;\\n\\n    if ($pagenow === 'index.php') {\\n        wp_safe_redirect(admin_url('admin.php?page=hdbe'));\\n        exit;\\n    }\\n});\\nPHP;\\n\\nfile_put_contents(\\n    $mu_plugins_dir . '\\\/host-domination-playground-admin.php',\\n    $demo_admin_plugin\\n);\\n\\nupdate_option('blogname', 'Host Domination Booking Engine Demo');\\nupdate_option('blogdescription', 'Direct booking requests and calendar synchronization for WordPress');\\nupdate_option('show_on_front', 'page');\\nupdate_option('page_on_front', $demo_page_id);\\nupdate_option('permalink_structure', '\\\/%postname%\\\/');\\nflush_rewrite_rules(false);\\n\"},{\"step\":\"login\",\"username\":\"admin\",\"password\":\"password\"}]}"}},"all_blocks":{"host-domination\/booking-engine":{"name":"host-domination\/booking-engine","title":"Host Domination Booking Engine"}},"tagged_versions":["1.4.97","1.4.98","1.4.99","1.4.991","1.5","1.5.12","1.5.16","1.5.17"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3671883,"resolution":"1","location":"assets","locale":"","width":1920,"height":1080},"screenshot-10.png":{"filename":"screenshot-10.png","revision":3690496,"resolution":"10","location":"assets","locale":"","width":1920,"height":1080},"screenshot-11.png":{"filename":"screenshot-11.png","revision":3738709,"resolution":"11","location":"assets","locale":"","width":1920,"height":1080},"screenshot-12.png":{"filename":"screenshot-12.png","revision":3738709,"resolution":"12","location":"assets","locale":"","width":1920,"height":1080},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3671883,"resolution":"2","location":"assets","locale":"","width":1672,"height":941},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3671883,"resolution":"3","location":"assets","locale":"","width":1672,"height":941},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3671883,"resolution":"4","location":"assets","locale":"","width":1920,"height":1080},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3671883,"resolution":"5","location":"assets","locale":"","width":1920,"height":1080},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3671883,"resolution":"6","location":"assets","locale":"","width":1920,"height":1080},"screenshot-7.png":{"filename":"screenshot-7.png","revision":3695292,"resolution":"7","location":"assets","locale":"","width":1920,"height":1080},"screenshot-8.png":{"filename":"screenshot-8.png","revision":3670830,"resolution":"8","location":"assets","locale":"","width":1920,"height":1080},"screenshot-9.png":{"filename":"screenshot-9.png","revision":3671792,"resolution":"9","location":"assets","locale":"","width":1920,"height":1080}},"screenshots":{"1":"Booking Dashboard \u2013 View synchronized calendars, booking statistics, and recent activity at a glance.","2":"Public Booking Form with Pricing \u2013 Let guests select dates, view nightly prices, and submit booking requests.","3":"Public Booking Form without Pricing \u2013 Let guests select dates, min nightly and submit booking requests.","4":"Booking Management \u2013 Review recent requests, manage reservations, and organize booking details.","5":"Calendar Settings and iCal Sync \u2013 Configure calendars and synchronize availability through external iCal links.","6":"Easy Setup Wizard","7":"Add-on Section - Extend your booking system with powerful Add-ons","8":"Free Multipack Language - Translate the Booking Engine by choosing which language to use for the Back-end and\/or Front-end","9":"Calendar Layout - A clear, fast and intuitive way to manage all your bookings.","10":"Free Advanced Report - Track profits, revenue, and outstanding balances with a free add-on","11":"Advanced Settings &amp; Layout \u2013 Customize your booking form, guest selector, responsive layouts, and desktop calendar display with flexible settings.","12":"Single-Month &amp; Two-Month Calendar Layouts \u2013 Choose between one month or two months side by side on desktop, with automatic mobile optimization for a seamless booking experience."}},"plugin_section":[],"plugin_tags":[4487,274,243354,4486,1475],"plugin_category":[40],"plugin_contributors":[267978],"plugin_business_model":[],"class_list":["post-324016","plugin","type-plugin","status-publish","hentry","plugin_tags-booking-engine","plugin_tags-booking-system","plugin_tags-calendar-sync","plugin_tags-hotel-booking","plugin_tags-reservations","plugin_category-calendar-and-events","plugin_contributors-ilithio","plugin_committers-ilithio"],"banners":{"banner":"https:\/\/ps.w.org\/host-domination-booking-engine\/assets\/banner-772x250.png?rev=3762417","banner_2x":"https:\/\/ps.w.org\/host-domination-booking-engine\/assets\/banner-1544x500.png?rev=3762417","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/host-domination-booking-engine\/assets\/icon-128x128.png?rev=3763451","icon_2x":"https:\/\/ps.w.org\/host-domination-booking-engine\/assets\/icon-256x256.png?rev=3763451","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/host-domination-booking-engine\/assets\/screenshot-1.png?rev=3671883","caption":"Booking Dashboard \u2013 View synchronized calendars, booking statistics, and recent activity at a glance."},{"src":"https:\/\/ps.w.org\/host-domination-booking-engine\/assets\/screenshot-2.png?rev=3671883","caption":"Public Booking Form with Pricing \u2013 Let guests select dates, view nightly prices, and submit booking requests."},{"src":"https:\/\/ps.w.org\/host-domination-booking-engine\/assets\/screenshot-3.png?rev=3671883","caption":"Public Booking Form without Pricing \u2013 Let guests select dates, min nightly and submit booking requests."},{"src":"https:\/\/ps.w.org\/host-domination-booking-engine\/assets\/screenshot-4.png?rev=3671883","caption":"Booking Management \u2013 Review recent requests, manage reservations, and organize booking details."},{"src":"https:\/\/ps.w.org\/host-domination-booking-engine\/assets\/screenshot-5.png?rev=3671883","caption":"Calendar Settings and iCal Sync \u2013 Configure calendars and synchronize availability through external iCal links."},{"src":"https:\/\/ps.w.org\/host-domination-booking-engine\/assets\/screenshot-6.png?rev=3671883","caption":"Easy Setup Wizard"},{"src":"https:\/\/ps.w.org\/host-domination-booking-engine\/assets\/screenshot-7.png?rev=3695292","caption":"Add-on Section - Extend your booking system with powerful Add-ons"},{"src":"https:\/\/ps.w.org\/host-domination-booking-engine\/assets\/screenshot-8.png?rev=3670830","caption":"Free Multipack Language - Translate the Booking Engine by choosing which language to use for the Back-end and\/or Front-end"},{"src":"https:\/\/ps.w.org\/host-domination-booking-engine\/assets\/screenshot-9.png?rev=3671792","caption":"Calendar Layout - A clear, fast and intuitive way to manage all your bookings."},{"src":"https:\/\/ps.w.org\/host-domination-booking-engine\/assets\/screenshot-10.png?rev=3690496","caption":"Free Advanced Report - Track profits, revenue, and outstanding balances with a free add-on"},{"src":"https:\/\/ps.w.org\/host-domination-booking-engine\/assets\/screenshot-11.png?rev=3738709","caption":"Advanced Settings &amp; Layout \u2013 Customize your booking form, guest selector, responsive layouts, and desktop calendar display with flexible settings."},{"src":"https:\/\/ps.w.org\/host-domination-booking-engine\/assets\/screenshot-12.png?rev=3738709","caption":"Single-Month &amp; Two-Month Calendar Layouts \u2013 Choose between one month or two months side by side on desktop, with automatic mobile optimization for a seamless booking experience."}],"raw_content":"<!--section=installation-->\n<ol>\n<li>Download, install and activate Host Domination Booking Engine from your WordPress dashboard.<\/li>\n<li>Open the Host Domination Booking Engine menu and create your first booking calendar.<\/li>\n<li>Enter the calendar or accommodation name, maximum number of guests and minimum number of nights.<\/li>\n<li>Optionally, set the base price per night, choose EUR or USD and enable the option to display the price in the public calendar.<\/li>\n<li>To import unavailable dates, paste the iCal or ICS URL provided by Airbnb, Booking.com, Vrbo or another compatible OTA into the External iCal Link field.<\/li>\n<li>Save the calendar. If a valid external iCal URL was entered, the plugin performs the initial import immediately.<\/li>\n<li>In the Created Properties \/ Rooms table, copy the shortcode generated for your calendar. It will use this format:<\/li>\n<\/ol>\n\n<p>[hdbe_booking_calendar id=\"123\"]<\/p>\n\n<ol>\n<li>Replace <code>123<\/code> only when writing the shortcode manually. The safest option is to copy the exact shortcode generated by the plugin.<\/li>\n<li>Create or edit the WordPress page where you want to display the booking engine and paste the generated shortcode.<\/li>\n<li>Publish or update the page, then verify the calendar, minimum-stay rule, availability and booking request form from the front end.<\/li>\n<li>To export confirmed website reservations, copy the Website iCal Feed URL generated by the plugin and import it into the compatible external booking platform.<\/li>\n<li>The Free plugin checks connected external calendars approximately every 30 minutes. Use the Refresh Calendars button whenever you want to run an immediate manual import.<\/li>\n<\/ol>\n\n<h4>Using the shortcode with Gutenberg<\/h4>\n\n<p>Create or edit a WordPress page, add a Shortcode block and paste the exact shortcode generated in the Created Properties \/ Rooms table.<\/p>\n\n<p>Example:<\/p>\n\n<p>[hdbe_booking_calendar id=\"123\"]<\/p>\n\n<p>Publish or update the page and verify the booking engine from the front end.<\/p>\n\n<h4>Using the shortcode with Elementor<\/h4>\n\n<p>Create or edit a page with Elementor, add the Shortcode widget and paste the exact shortcode generated by Host Domination Booking Engine.<\/p>\n\n<p>Example:<\/p>\n\n<p>[hdbe_booking_calendar id=\"123\"]<\/p>\n\n<p>Publish or update the page and verify the booking calendar and reservation request form from the front end.<\/p>\n\n<h4>Displaying multiple calendars<\/h4>\n\n<p>When multiple accommodation calendars have been created, you can display all active calendars with a property selector by using:<\/p>\n\n<p>[hdbe_booking_calendars]<\/p>\n\n<p>Use the individual generated shortcode when you want to display only one specific accommodation calendar.<\/p>\n\n<h4>Calendar synchronization<\/h4>\n\n<p>To configure two-way iCal calendar synchronization:<\/p>\n\n<ol>\n<li>Copy the external iCal or ICS URL from Airbnb, Booking.com, Vrbo or another compatible OTA or booking platform.<\/li>\n<li>Paste the URL into the External iCal Link field in Host Domination Booking Engine.<\/li>\n<li>Save the calendar. The first import is performed immediately.<\/li>\n<li>Copy the Website iCal Feed URL generated by the plugin.<\/li>\n<li>Import the generated URL into the external booking platform.<\/li>\n<li>Confirm website booking requests before expecting them to appear in the exported iCal feed.<\/li>\n<li>The Free plugin automatically checks the connected external feeds approximately every 30 minutes.<\/li>\n<li>Select Refresh Calendars whenever you want to run an immediate manual import.<\/li>\n<\/ol>\n\n<p>The 30-minute interval is approximate because WordPress scheduled tasks are normally triggered by website traffic and can be affected by the hosting environment or server configuration.<\/p>\n\n<p>The external OTA controls how frequently it publishes, reads and updates imported calendars. Some booking platforms refresh iCal feeds automatically at their own intervals, while others may offer or require a manual refresh.<\/p>\n\n<p>New reservations, cancellations, blocked dates or availability changes may therefore not appear immediately on every connected platform.<\/p>\n\n<p>Always check the calendar synchronization settings and refresh policy provided by each connected OTA.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"is%20host%20domination%20booking%20engine%20a%20complete%20wordpress%20reservation%20system%3F\"><h3>Is Host Domination Booking Engine a complete WordPress reservation system?<\/h3><\/dt>\n<dd><p>It provides a direct booking request form, availability calendar, request management, external iCal import and a website iCal export feed.<\/p>\n\n<p>It is not a complete OTA channel manager\/PMS and does not synchronize listing content, messages, reviews or platform pricing through private APIs.<\/p><\/dd>\n<dt id=\"is%20the%20plugin%20open%20source%20and%20self-hosted%3F\"><h3>Is the plugin open source and self-hosted?<\/h3><\/dt>\n<dd><p>Yes. Host Domination Booking Engine is licensed under GPLv2 or later and runs directly inside your WordPress website.<\/p>\n\n<p>The Free version does not require a mandatory Host Domination cloud account or subscription and does not expire.<\/p><\/dd>\n<dt id=\"what%20is%20the%20correct%20shortcode%3F\"><h3>What is the correct shortcode?<\/h3><\/dt>\n<dd><p>Each calendar generates a shortcode in this format:<\/p>\n\n<p>[hdbe_booking_calendar id=\"123\"]<\/p>\n\n<p>Copy the exact shortcode from the Created Properties \/ Rooms table because the ID is different for each calendar.<\/p><\/dd>\n<dt id=\"platform%2Fota%20compatibility%20list\"><h3>Platform\/OTA compatibility list<\/h3><\/dt>\n<dd><p><strong>Airbnb<\/strong>, <strong>Booking.com<\/strong>, <strong>Vrbo<\/strong>, Agoda, Expedia, Tripadvisor, Stripe, Google and Apple are trademarks of their respective owners.\n<strong>Host Domination Booking Engine<\/strong> is an independent WordPress plugin and is not affiliated with, endorsed by or sponsored by these companies.\nCompatibility depends on the availability and format of the iCal or ICS feed supplied by each external service.<\/p><\/dd>\n<dt id=\"can%20i%20display%20multiple%20accommodation%20calendars%3F\"><h3>Can I display multiple accommodation calendars?<\/h3><\/dt>\n<dd><p>The Free version and PRO support unlimited accommodation calendars. To display all active calendars with a selector, use:<\/p>\n\n<p>[hdbe_booking_calendars]<\/p><\/dd>\n<dt id=\"can%20i%20synchronize%20the%20calendar%20with%20airbnb%3F\"><h3>Can I synchronize the calendar with Airbnb?<\/h3><\/dt>\n<dd><p>Yes. Copy the compatible Airbnb iCal export URL into the External iCal Link field. You can also import the Website iCal Feed URL generated by the plugin into Airbnb.<\/p><\/dd>\n<dt id=\"can%20i%20synchronize%20the%20calendar%20with%20booking.com%3F\"><h3>Can I synchronize the calendar with Booking.com?<\/h3><\/dt>\n<dd><p>Yes, when the property account provides compatible iCal import and export functions.<\/p><\/dd>\n<dt id=\"does%20the%20plugin%20work%20with%20vrbo%3F\"><h3>Does the plugin work with Vrbo?<\/h3><\/dt>\n<dd><p>Yes, when a compatible Vrbo iCal or ICS URL is available.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20agoda%20or%20expedia%3F\"><h3>Does it work with Agoda or Expedia?<\/h3><\/dt>\n<dd><p>The plugin can process standard iCal and ICS URLs. Compatibility depends on whether the platform, property account, connectivity provider or connected property management system provides a compatible calendar feed.<\/p><\/dd>\n<dt id=\"is%20this%20a%20direct%20api%20integration%20with%20booking%20platforms%3F\"><h3>Is this a direct API integration with booking platforms?<\/h3><\/dt>\n<dd><p>No. The plugin uses standard iCal and ICS calendar feeds and does not connect through the private APIs of Airbnb, Booking.com, Vrbo, Agoda or Expedia.<\/p><\/dd>\n<dt id=\"is%20host%20domination%20booking%20engine%20a%20channel%20manager%2Fpms%3F\"><h3>Is Host Domination Booking Engine a channel manager\/PMS?<\/h3><\/dt>\n<dd><p>No. It is a WordPress booking engine and reservation request system with iCal availability synchronization.<\/p><\/dd>\n<dt id=\"does%20calendar%20synchronization%20happen%20automatically%3F\"><h3>Does calendar synchronization happen automatically?<\/h3><\/dt>\n<dd><p>Yes. The website iCal export feed updates immediately when a booking is confirmed. When a valid external iCal URL is saved, the plugin attempts the initial import immediately and then checks connected feeds automatically approximately every 30 minutes.<\/p>\n\n<p>The interval is approximate because WordPress cron execution normally depends on website traffic, hosting conditions and server configuration.<\/p>\n\n<p>You can also click Refresh Calendars at any time to run an immediate manual import.<\/p>\n\n<p>External OTAs independently determine when they synchronize their calendars and read the Website iCal Feed URL. Their synchronization schedules are outside the plugin\u2019s control.<\/p><\/dd>\n<dt id=\"does%20synchronization%20happen%20in%20real%20time%3F\"><h3>Does synchronization happen in real time?<\/h3><\/dt>\n<dd><p>The website iCal export feed is updated immediately, but connected OTAs import it according to their own schedules. Incoming iCal feeds are checked approximately every 30 minutes, subject to WordPress cron and hosting conditions. This is not a real-time OTA integration.<\/p><\/dd>\n<dt id=\"can%20ical%20synchronization%20prevent%20double%20bookings%3F\"><h3>Can iCal synchronization prevent double bookings?<\/h3><\/dt>\n<dd><p>It can reduce the risk by importing unavailable dates and exporting confirmed website reservations. It cannot guarantee instant synchronization or completely eliminate overlapping reservations.<\/p><\/dd>\n<dt id=\"can%20i%20combine%20multiple%20ical%20calendars%20into%20one%20link%3F\"><h3>Can I combine multiple iCal calendars into one link?<\/h3><\/dt>\n<dd><p>Yes, with Host Domination Booking Engine PRO.<\/p>\n\n<p>Multiple feeds connected to the same accommodation calendar are imported and consolidated into one Website iCal Feed URL containing the combined confirmed and unavailable periods.<\/p><\/dd>\n<dt id=\"can%20i%20use%20the%20unified%20ical%20link%20in%20another%20system%3F\"><h3>Can I use the unified iCal link in another system?<\/h3><\/dt>\n<dd><p>Yes, provided that the destination OTA, calendar application, property management system or reservation tool supports standard iCal or ICS imports.<\/p><\/dd>\n<dt id=\"does%20a%20pending%20website%20request%20block%20the%20dates%3F\"><h3>Does a pending website request block the dates?<\/h3><\/dt>\n<dd><p>No. A new website request remains pending until an administrator confirms it. Confirmed requests are included in the unavailable dates and in the website iCal export feed.<\/p><\/dd>\n<dt id=\"can%20i%20set%20a%20minimum%20number%20of%20nights%3F\"><h3>Can I set a minimum number of nights?<\/h3><\/dt>\n<dd><p>Yes. The minimum stay can be configured for the calendar and is validated in both the front-end form and the server-side booking request process.<\/p><\/dd>\n<dt id=\"can%20i%20display%20a%20nightly%20price%20in%20the%20free%20version%3F\"><h3>Can I display a nightly price in the Free version?<\/h3><\/dt>\n<dd><p>Yes. You can configure an optional base price per night and display it on available dates in the front-end calendar.<\/p><\/dd>\n<dt id=\"can%20i%20set%20different%20prices%20for%20individual%20dates%3F\"><h3>Can I set different prices for individual dates?<\/h3><\/dt>\n<dd><p>Advanced day, month and yearly pricing features are available with Host Domination Booking Engine PRO.<\/p><\/dd>\n<dt id=\"can%20i%20block%20specific%20dates%20or%20complete%20months%3F\"><h3>Can I block specific dates or complete months?<\/h3><\/dt>\n<dd><p>Advanced date and month blocking is available with Host Domination Booking Engine PRO.<\/p><\/dd>\n<dt id=\"can%20guests%20pay%20online%3F\"><h3>Can guests pay online?<\/h3><\/dt>\n<dd><p>Stripe online payments are available with Host Domination Booking Engine PRO.<\/p><\/dd>\n<dt id=\"does%20stripe%20charge%20transaction%20fees%3F\"><h3>Does Stripe charge transaction fees?<\/h3><\/dt>\n<dd><p>Stripe may apply its own processing fees and service terms. These are independent of Host Domination Booking Engine.<\/p><\/dd>\n<dt id=\"can%20i%20use%20the%20plugin%20with%20elementor%3F\"><h3>Can I use the plugin with Elementor?<\/h3><\/dt>\n<dd><p>Yes. Add an Elementor Shortcode widget and paste the exact shortcode generated for the calendar.<\/p><\/dd>\n<dt id=\"is%20host%20domination%20booking%20engine%20lightweight%20and%20optimized%20for%20speed%3F\"><h3>Is Host Domination Booking Engine lightweight and optimized for speed?<\/h3><\/dt>\n<dd><p>Yes. The plugin uses selective loading for calendar-specific assets so they are not requested unnecessarily on pages without booking calendars. Version 1.4.97 extends this optimization to Flatpickr JavaScript, its Italian locale and the global calendar selector, while retaining shortcode, Gutenberg and Elementor support. Overall website performance also depends on the theme, hosting and other installed plugins.<\/p><\/dd>\n<dt id=\"can%20i%20use%20the%20plugin%20with%20gutenberg%3F\"><h3>Can I use the plugin with Gutenberg?<\/h3><\/dt>\n<dd><p>Yes. Add a WordPress Shortcode block and paste the exact shortcode generated for the calendar.<\/p><\/dd>\n<dt id=\"does%20the%20free%20version%20expire%3F\"><h3>Does the Free version expire?<\/h3><\/dt>\n<dd><p>No. The Free version is not a time-limited trial.<\/p><\/dd>\n<dt id=\"does%20the%20booking%20form%20require%20privacy%20consent%3F\"><h3>Does the booking form require privacy consent?<\/h3><\/dt>\n<dd><p>Yes. The website administrator must configure a valid Privacy Policy URL in Calendar Settings. Guests must confirm that they have read and accept the linked Privacy Policy before a FREE or PRO booking request can be submitted.<\/p>\n\n<p>The administrator can also enter an optional Terms and Conditions URL. When it is configured, the same required consent confirms acceptance of both the linked Privacy Policy and the linked Terms and Conditions.<\/p>\n\n<p>Personal data is stored in the website database. The website owner is responsible for providing an appropriate Privacy Policy and complying with applicable privacy and data-protection requirements, including the GDPR where applicable.<\/p><\/dd>\n<dt id=\"can%20booking%20requests%20also%20be%20received%20through%20whatsapp%3F\"><h3>Can booking requests also be received through WhatsApp?<\/h3><\/dt>\n<dd><p>Yes. In Calendar Settings, Email is always enabled and mandatory. You can optionally enable WhatsApp for the selected calendar and enter the destination number in international format, including the country code.<\/p>\n\n<p>When the guest submits a valid request, the plugin first saves the request in WordPress and sends the normal notification email. It then opens WhatsApp with the property, dates, guest counts and contact details already filled in. The guest must review the message and tap Send. This workflow uses a standard WhatsApp link and does not require the WhatsApp Business API.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.5.17<\/h4>\n\n<ul>\n<li>BugFix.<\/li>\n<\/ul>\n\n<h4>1.5.16<\/h4>\n\n<ul>\n<li>Added User Roles &amp; Permissions to the PRO features list on the Unlock PRO page.<\/li>\n<\/ul>\n\n<h4>1.5.15<\/h4>\n\n<ul>\n<li>Add-ons Store: remove translation completion percentages from flag tooltips and secondary-language lists; keep language names, flags and compact toggle unchanged.<\/li>\n<\/ul>\n\n<h4>1.5.14<\/h4>\n\n<ul>\n<li>Fixed compact language button in Add-ons Store: plus\/minus stays inline and expands a separate list without triggering card navigation.<\/li>\n<\/ul>\n\n<h4>1.5.13<\/h4>\n\n<ul>\n<li>Add-ons Store: show flags only for languages with real flag emojis; collect secondary languages without flags in an accessible + expandable list.<\/li>\n<\/ul>\n\n<h4>1.5.9<\/h4>\n\n<ul>\n<li>Show \"Booking deleted.\" instead of \"Calendar deleted.\" after a booking deletion, without changing calendar deletion notices.<\/li>\n<li>Keep deletion feedback translatable and compatible with earlier booking redirect links.<\/li>\n<\/ul>\n\n<h4>1.5.8<\/h4>\n\n<ul>\n<li>Keep exactly three iCal inputs in FREE, even when PRO is activated.<\/li>\n<li>PRO can extend iCal source limits through its own license-gated filter and fields.<\/li>\n<li>Preserve all configured PRO sources when additional inputs are not submitted.<\/li>\n<\/ul>\n\n<h4>1.5.7<\/h4>\n\n<ul>\n<li>Renamed the Properties \/ Rooms creation button to \"Add Property \/ Room\", using the existing WordPress translation domain.<\/li>\n<\/ul>\n\n<h4>1.5.6<\/h4>\n\n<ul>\n<li>Keep imported iCal reservations and source IDs intact when updating calendar settings; a failed OTA response no longer clears all previous external bookings during save.<\/li>\n<li>Remove bookings only for deliberately disconnected sources, without deleting PRO Advanced Pricing blocks.<\/li>\n<li>Exclude PRO blocked dates from the upcoming stays list.<\/li>\n<li>Retain saved PRO-only iCal source links and last-known booked dates while PRO entitlement is temporarily unavailable; extra links are not synchronized until entitlement returns.<\/li>\n<\/ul>\n\n<h4>1.5.5<\/h4>\n\n<ul>\n<li>Renamed calendar creation action to Add Calendar and the iCal section to Calendar Synchronization Type.<\/li>\n<li>Simplified source labels to iCal Link 1\/2\/3 and streamlined the iCal timing note.<\/li>\n<\/ul>\n\n<h4>1.5.4<\/h4>\n\n<ul>\n<li>Refreshed the property \/ room management terminology across admin navigation, dashboard, setup wizard and FREE\/PRO comparison. Technical calendars, iCal feeds and their existing behavior are unchanged.<\/li>\n<\/ul>\n\n<h4>1.5.1<\/h4>\n\n<ul>\n<li>Unlimited accommodation calendars in Free and the shared booking engine (no creation cap).<\/li>\n<li>Three external iCal feeds per calendar in Free; updated calendar settings and first-run setup wizard.<\/li>\n<li>Free iCal imports rescheduled approximately every 30 minutes with automatic upgrade of existing daily cron events.<\/li>\n<li>Upcoming stays now includes imported iCal reservations alongside confirmed direct bookings.<\/li>\n<li>Refreshed comparison screens: unlimited calendars in both editions, three sources in Free and ten sources planned for PRO; compatible PRO extension update required for complete 10-source support.<\/li>\n<\/ul>\n\n<h4>1.5<\/h4>\n\n<ul>\n<li>Introduced AI Concierge, a free optional multilingual AI Virtual Assistant add-on, with a dedicated feature overview in the plugin description.<\/li>\n<li>Added a NEW! AI Virtual Assistant shortcut to the Booking Engine Add-ons Store when Concierge AI is inactive.<\/li>\n<li>Clear the current Store catalog cache after each Booking Engine version upgrade, so new add-ons load on the next Store visit.<\/li>\n<\/ul>\n\n<h4>1.4.991<\/h4>\n\n<ul>\n<li>Fixed mobile horizontal overflow caused by the hidden guest stepper selects expanding to full width.<\/li>\n<\/ul>\n\n<h4>1.4.99<\/h4>\n\n<ul>\n<li>Added an optional desktop calendar view under Settings &amp; Layout: show 1 month (default) or 2 consecutive months side by side.<\/li>\n<li>Keep a single month on phones and narrow booking calendar columns; the calendar adapts when the available space changes.<\/li>\n<li>Keep booking rules, date-range selection, availability and price markers unchanged in both modes.<\/li>\n<\/ul>\n\n<h4>1.4.97<\/h4>\n\n<ul>\n<li>Further optimized the lightweight, performance-focused booking experience while preserving existing calendar functionality and builder compatibility.<\/li>\n<li>Improved front-end speed and efficiency by reducing unnecessary calendar asset requests on pages without a booking calendar.<\/li>\n<li>Fixed calendar initialization in Elementor live editor and dynamically rendered widgets.<\/li>\n<li>Load Flatpickr JavaScript, locale and the global calendar selector only on pages with booking calendars.<\/li>\n<li>Preserve shortcode, Gutenberg, Elementor and live editor support by registering dependencies early and enqueuing them during calendar rendering.<\/li>\n<li>Keep calendar JavaScript dependencies in order and avoid unnecessary loading on unrelated pages.<\/li>\n<\/ul>\n\n<h4>1.4.95<\/h4>\n\n<ul>\n<li>Added explicit editor widget script\/style dependencies while retaining selective Flatpickr CSS loading.<\/li>\n<\/ul>\n\n<h4>1.4.94<\/h4>\n\n<ul>\n<li>Optimized Flatpickr CSS loading on pages without booking calendars.<\/li>\n<li>Preserved shortcode, Gutenberg, Elementor and editor compatibility.<\/li>\n<\/ul>\n\n<h4>1.4.93<\/h4>\n\n<ul>\n<li>Improved booking administration interface and navigation.<\/li>\n<li>Refined the Add-on Store interface and catalog management experience.<\/li>\n<li>Improved compatibility and presentation across the WordPress admin pages.<\/li>\n<li>General interface refinements and bug fixes.<\/li>\n<\/ul>\n\n<h4>1.4.87<\/h4>\n\n<ul>\n<li>Bug fixes add-on Store.<\/li>\n<\/ul>\n\n<h4>1.4.86<\/h4>\n\n<ul>\n<li>Bug fixes and improved add-on catalog caching.<\/li>\n<\/ul>\n\n<h4>1.4.83<\/h4>\n\n<ul>\n<li>Changed the default guest selector to the standard drop-down menu for wider theme and JavaScript compatibility.<\/li>\n<li>The + \/ \u2212 guest selector remains available as an optional setting under Settings &amp; Layout.<\/li>\n<li>Existing saved guest-selector choices are preserved during updates.<\/li>\n<\/ul>\n\n<h4>1.4.82<\/h4>\n\n<ul>\n<li>NEW! When an administrator confirms a pending website booking request, the guest automatically receives a second email confirming that the reservation is now confirmed.<\/li>\n<li>The existing per-calendar guest email option now controls both the initial request acknowledgement and the final booking confirmation email.<\/li>\n<li>Confirmation emails include the property, check-in, check-out and guest summary, and use the calendar notification email as Reply-To when available.<\/li>\n<li>Prevented duplicate confirmation emails by allowing the confirmation transition only from pending requests.<\/li>\n<\/ul>\n\n<h4>1.4.81<\/h4>\n\n<ul>\n<li>Improved the public booking form layout, minimum-stay notice and responsive behavior.<\/li>\n<li>Refined the local Flatpickr month container styling.<\/li>\n<\/ul>\n\n<h4>1.4.79<\/h4>\n\n<ul>\n<li>Hide the native WordPress Screen Options control across Host Domination Booking Engine admin screens.<\/li>\n<\/ul>\n\n<h4>1.4.78<\/h4>\n\n<p>Added the option to move a booking to another available calendar while editing the reservation.<\/p>\n\n<h4>1.4.77<\/h4>\n\n<ul>\n<li>Fix: external iCal imports now reject HTTP errors and malformed\/truncated calendar payloads before changing saved availability.<\/li>\n<li>Fix: the last known-good external blocks are preserved and the feed is marked as error when a remote iCal fetch is invalid.<\/li>\n<li>A valid empty VCALENDAR remains authoritative and correctly clears previously imported events.<\/li>\n<\/ul>\n\n<h4>1.4.75<\/h4>\n\n<ul>\n<li>Added a dedicated Multi-calendar layout setting with calendar\/global inheritance or forced responsive, two-column and one-column modes.<\/li>\n<li>Replaced the Global booking form layout drop-down with three visual radio cards.<\/li>\n<\/ul>\n\n<h4>1.4.71<\/h4>\n\n<ul>\n<li>Imported Airbnb, Booking.com and other OTA iCal reservations remain excluded from the Website feed to prevent circular synchronization.<\/li>\n<\/ul>\n\n<h4>1.4.70<\/h4>\n\n<ul>\n<li>Bugfix<\/li>\n<\/ul>\n\n<h4>1.4.69<\/h4>\n\n<ul>\n<li>Fix: external iCal provider detection now keeps Booking.com feeds mapped to the canonical Booking provider after save\/refresh.<\/li>\n<li>Fix: known Booking.com and Airbnb iCal domains self-correct legacy\/mistranslated provider labels instead of falling back to Other.<\/li>\n<\/ul>\n\n<h4>1.4.68<\/h4>\n\n<ul>\n<li>Display-only provider label update: Booking is shown as Booking.com in Calendar provider dropdowns and in Created calendars &gt; External iCal, while the stored provider value remains Booking.<\/li>\n<\/ul>\n\n<h4>1.4.67<\/h4>\n\n<ul>\n<li>Rebuilt from the 1.4.58 provider logic: external-calendar provider dropdown values and labels remain unchanged.<\/li>\n<li>Standard Website iCal feed exports only local direct\/manual confirmed bookings, preventing circular OTA re-export.<\/li>\n<li>Added a separate per-calendar iCal All-in-one feed containing direct, manual and imported external reservations.<\/li>\n<li>Added a full-width \u201cView iCal All-in-one link\u201d control with Copy action in Calendar views.<\/li>\n<li>Booking and Dashboard cards use the compact mobile-style layout up to 1600px, with contact actions below values.<\/li>\n<li>Confirmed status has a dedicated full-width row so action buttons cannot squeeze it on mobile.<\/li>\n<li>Removed the \u201cView all\u201d link from Upcoming stays in Dashboard.<\/li>\n<\/ul>\n\n<h4>1.4.61<\/h4>\n\n<ul>\n<li>Booking and Dashboard cards now switch to the compact mobile-style structure on displays up to 1600px wide.<\/li>\n<li>Guest contact details stay readable with contact actions placed below their values.<\/li>\n<li>Confirmed status gets a dedicated full-width action row so Edit, Delete and PRO summary controls can no longer squeeze the status badge on mobile.<\/li>\n<\/ul>\n\n<h4>1.4.60<\/h4>\n\n<ul>\n<li>Improved Booking and Dashboard booking-card responsiveness on medium-width tablet\/phablet displays.<\/li>\n<li>Email and phone contact controls switch earlier to the mobile-style stacked layout, keeping phone numbers intact and placing Send email \/ Call \/ WhatsApp actions underneath.<\/li>\n<\/ul>\n\n<h4>1.4.59<\/h4>\n\n<ul>\n<li>Fixed public iCal export so imported Airbnb, Booking.com and other external iCal events are never re-exported.<\/li>\n<li>Public calendar feeds now include only confirmed\/paid local website or manual bookings, preventing circular syncs and duplicate blocked dates.<\/li>\n<li>Removed the \"View all\" link from the Upcoming stays card in the Dashboard.<\/li>\n<\/ul>\n\n<h4>1.4.58<\/h4>\n\n<ul>\n<li>NEW! Edit button for your confirmed bookings<\/li>\n<li>Bugfix<\/li>\n<\/ul>\n\n<h4>1.4.54<\/h4>\n\n<ul>\n<li>Added Edit button for your confirmed bookings<\/li>\n<\/ul>\n\n<h4>1.4.53<\/h4>\n\n<ul>\n<li>Add-ons Store: supports optional per-extension custom corner badges supplied by Booking Engine Monitor, including custom text, text color and background color.<\/li>\n<li>Custom badges use the same bottom-right image area as the FREE! label and automatically move price bubbles upward when needed to avoid overlap.<\/li>\n<\/ul>\n\n<h4>1.4.47<\/h4>\n\n<ul>\n<li>NEW App-Layout style! New Back-end Mobile Layout with fixed toolbar<\/li>\n<li>Optimized the Dashboard KPI cards on phones into a compact 2x2 grid.<\/li>\n<li>Refined the swipeable top tab row into a single, visually uniform white bar so arrow controls and tabs look like one coherent component on phones.<\/li>\n<li>Added a mobile-only fixed bottom toolbar with Dashboard, Calendar, Bookings and Add-ons.<\/li>\n<li>Kept all original admin tabs visible on mobile and made the tab row horizontally swipeable.<\/li>\n<\/ul>\n\n<h4>1.4.43<\/h4>\n\n<ul>\n<li>Add-ons Store: added automatic Language availability flags supplied by Host Domination Monitor \/ HD BE Translate Manager.<\/li>\n<li>Adjusted the FREE add-on badge vertical position in the Add-ons Store.<\/li>\n<li>Add-ons Store: renamed the language row to \u201cAvailable languages\u201d.<\/li>\n<li>Added spacing below the FREE badge in Free add-on cards.<\/li>\n<li>A language is displayed only when at least 1% of that add-on is translated.<\/li>\n<\/ul>\n\n<h4>1.4.26<\/h4>\n\n<ul>\n<li>Added a native Gutenberg block with Single calendar and Multiple calendars modes.<\/li>\n<li>Added a dedicated Elementor widget with Single calendar and Multiple calendars modes.<\/li>\n<li>Added direct calendar selection in Gutenberg and Elementor while reusing the existing booking renderer for FREE, PRO and add-on compatibility.<\/li>\n<li>Restored the latest Calendars admin improvements, including on-demand Calendar settings, Unified Calendars placement and the merged Website feed\/Actions desktop layout.<\/li>\n<\/ul>\n\n<h4>1.4.25<\/h4>\n\n<ul>\n<li>Fixed PRO calendar capacity in the FREE Calendars interface: the effective calendar allowance is now read from the active PRO license plan supplied by the Host Domination license server.<\/li>\n<li>Calendar Expansion remains able to increase the PRO plan allowance.<\/li>\n<\/ul>\n\n<h4>1.4.24<\/h4>\n\n<ul>\n<li>Added a per-calendar Notification email setting under Receive requests.<\/li>\n<li>Added an optional per-calendar guest confirmation email for manual booking requests, enabled by default.<\/li>\n<li>Guest confirmation emails include the booking-request summary and clearly state that the request is awaiting confirmation.<\/li>\n<li>Guest confirmation emails use the WordPress administrator email as the default sender and the calendar notification email as Reply-To.<\/li>\n<li>Moved Notification email into its own calendar setting below Receive requests and simplified the delivery guidance.<\/li>\n<li>Added an SMTP troubleshooting note for booking notification delivery.<\/li>\n<li>Improved compatibility with Guest Email Automation so per-calendar notification addresses can be reused by extensions.<\/li>\n<li>Manual booking requests now use the configured calendar notification address, with automatic fallback to the WordPress administrator email.<\/li>\n<li>Exposed the same notification address to PRO so paid booking notifications can use one shared per-calendar destination.<\/li>\n<\/ul>\n\n<h4>1.4.21<\/h4>\n\n<ul>\n<li>Fixed front-end calendar weekday initials so they follow the active WordPress locale instead of being hard-coded in Italian.<\/li>\n<li>English calendars now display Monday-first initials as M T W T F S S; translated sites use the corresponding localized initials.<\/li>\n<\/ul>\n\n<h4>1.4.20<\/h4>\n\n<ul>\n<li>Added OTA-style guest selectors with minus\/plus controls for Adults, Children, and Guests while preserving existing booking and pricing logic.<\/li>\n<li>Improved mobile layout in Calendars, including Price per night, Receive requests, calendar limit CTA, and Created Calendars.<\/li>\n<li>Improved mobile layout in Bookings and made action buttons distribute evenly across the available width.<\/li>\n<li>Moved Show it in the form into the Price per night section and updated the Unlock PRO button styling.<\/li>\n<\/ul>\n\n<h4>1.4.19<\/h4>\n\n<ul>\n<li>New Calendar Tab Layout<\/li>\n<li>New Latest Bookings\/Requests Tab Layout<\/li>\n<\/ul>\n\n<h4>1.4.18<\/h4>\n\n<ul>\n<li>Increased spacing and typography in the final setup-complete screen for better readability while keeping the full panel visible on standard desktop viewports.<\/li>\n<li>Limited automatic scaling to genuinely short desktop screens only.<\/li>\n<\/ul>\n\n<h4>1.4.17<\/h4>\n\n<ul>\n<li>Compacted the setup completion screen so the final Dashboard and Edit calendar actions remain visible on standard desktop viewports.<\/li>\n<li>Removed the inner scrollbar from the desktop setup-complete dialog and tightened spacing without changing functionality.<\/li>\n<li>Added responsive scaling only for shorter desktop screens to keep the full completion panel accessible.<\/li>\n<\/ul>\n\n<h4>1.4.16<\/h4>\n\n<ul>\n<li>Removed the remaining iCal feed row bottom spacing that could cause visual misalignment.<\/li>\n<li>Expanded Calendar-tab cards and calendar setup containers to the full available admin width.<\/li>\n<li>Kept the Calendar settings, Created calendars and related Calendar-tab boxes aligned consistently.<\/li>\n<\/ul>\n\n<h4>1.4.15<\/h4>\n\n<ul>\n<li>Fixed visual alignment issues in the Calendar settings panel.<\/li>\n<li>Improved currency selector rendering in the Price per night field.<\/li>\n<li>Improved alignment of External iCal provider\/link fields for a cleaner premium layout.<\/li>\n<\/ul>\n\n<h4>1.4.14<\/h4>\n\n<ul>\n<li>Added the generated website iCal feed to the setup completion screen with a one-click Copy action for OTA synchronization.<\/li>\n<li>Refined booking contact cards with the requested light blue Email background and light green Phone background.<\/li>\n<\/ul>\n\n<h4>1.4.13<\/h4>\n\n<ul>\n<li>Removed the calendar usage limit badge from the Dashboard while keeping calendar capacity controls in the Calendar section.<\/li>\n<li>Improved mobile action buttons in Latest requests\/bookings with automatic 2-column, 3-column and 2x2 responsive layouts.<\/li>\n<li>Redesigned the per-calendar settings form with a cleaner premium two-panel layout, clearer field grouping, refined inputs and a more structured save area without changing calendar functionality.<\/li>\n<\/ul>\n\n<h4>1.4.12<\/h4>\n\n<ul>\n<li>Internationalized the Booking Engine administration area so Dashboard, Bookings, Calendar settings, setup wizard and PRO screens can be translated through standard WordPress language packs.<\/li>\n<li>Added translatable admin booking statuses, contact actions, confirmation messages, calendar controls, synchronization labels and setup guidance.<\/li>\n<li>Localized administration JavaScript messages used for calendar ordering, setup validation and shortcode copy feedback.<\/li>\n<li>Internationalized the built-in Add-ons catalog interface and its local action\/status labels while leaving remote product content unchanged.<\/li>\n<\/ul>\n\n<h4>1.4.11<\/h4>\n\n<ul>\n<li>Highlighted confirmed and paid booking cards with a soft green background and a stronger green 2px border for faster visual recognition.<\/li>\n<\/ul>\n\n<h4>1.4.1<\/h4>\n\n<ul>\n<li>Redesigned the Bookings and Latest requests\/bookings cards for faster scanning and clearer booking information.<\/li>\n<li>Added quick guest contact actions for Send email, Call and WhatsApp; WhatsApp now opens the guest number directly without a pre-filled message.<\/li>\n<li>Added dedicated Stay, Guests, Nights and Received summary fields to each booking card.<\/li>\n<li>Kept Email and Phone side by side on desktop, with subtle light-blue and light-green contact panels for easier visual recognition.<\/li>\n<li>Refined the customer Note panel to match the visual language of the other booking information fields.<\/li>\n<li>Expanded frontend internationalization so key booking-form labels, validation messages and guest-facing strings use the WordPress translation system.<\/li>\n<\/ul>\n\n<h4>1.4.0<\/h4>\n\n<ul>\n<li>Made the booking form frontend fully compatible with WordPress language packs by internationalizing guest-facing labels, validation messages, privacy text and contact fields.<\/li>\n<li><p>Updated frontend JavaScript to receive translated strings and locale-aware currency formatting from WordPress.<\/p><\/li>\n<li><p>New Dashboard with a cleaner, more professional layout, KPI cards, Upcoming stays, Properties and Calendars, Direct booking activity, Latest requests\/bookings and a full Availability calendar.<\/p><\/li>\n<li>Added customizable Dashboard sections that can be reordered to better match each user's preferred workflow.<\/li>\n<li>Introduced a new guided first-calendar setup with property details, guest limits, Minimum nights, Children settings, pricing, external iCal synchronization, WhatsApp requests and legal pages.<\/li>\n<li>Added a redesigned setup completion screen with shortcode copy, optional one-click booking page creation and a clearer Free vs PRO comparison.<\/li>\n<li>Added a persistent Support &amp; Tickets action across the Booking Engine administration area.<\/li>\n<li>Increased the Free version capacity to 3 accommodation calendars and updated all related calendar-limit indicators and upgrade messaging.<\/li>\n<li>Added one-click Create\/View booking page actions directly to each calendar, automatically inserting the correct booking shortcode.<\/li>\n<li>Improved the Properties and Calendars and Upcoming stays dashboard panels with faster access to calendars, bookings and synchronization actions.<\/li>\n<li>Added improved external iCal setup, including provider selection and iCal URL configuration in a more compact layout.<\/li>\n<li>Improved WhatsApp booking-request configuration and styling, including guided setup support and clearer visual controls.<\/li>\n<li>Set \u201cMaximum age for Children category\u201d to 10 by default for both standard calendar creation and guided setup.<\/li>\n<li>Added multiple administration UI refinements, responsive improvements, cache-busting for updated assets and general visual polish throughout the plugin.<\/li>\n<\/ul>\n\n<h4>1.3.62<\/h4>\n\n<ul>\n<li>Adds support for promotional coupon codes supplied by the Host Domination Add-ons catalog.<\/li>\n<li>Shows the optional coupon directly below each add-on short description with a one-click Copy button.<\/li>\n<li>Coupon UI is rendered only when a code is configured on the Monitor.<\/li>\n<\/ul>\n\n<h4>1.3.61<\/h4>\n\n<ul>\n<li>Removed the optional Calendar image feature and its frontend thumbnail to keep calendar settings simpler and more reliable.<\/li>\n<li>Renamed Maximum child age to \"Maximum age for Children category\" for clearer configuration.<\/li>\n<li>Matched the Maximum guests field width to the Children category age field for a cleaner settings layout.<\/li>\n<\/ul>\n\n<h4>1.3.8<\/h4>\n\n<ul>\n<li>Added a per-calendar Booking form layout selector with Automatic, Fixed two columns and Single column modes.<\/li>\n<li>Automatic keeps the responsive two-column desktop \/ single-column mobile behavior.<\/li>\n<li>Fixed two columns keeps the availability calendar on the left and booking fields on the right at every screen size.<\/li>\n<li>Single column places the availability calendar first and booking fields below at every screen size.<\/li>\n<li>Multi-calendar booking forms always use the Automatic responsive layout, regardless of individual calendar preferences.<\/li>\n<\/ul>\n\n<h4>1.3.7<\/h4>\n\n<ul>\n<li>Added an optional image to each calendar\/property, selectable from the WordPress Media Library.<\/li>\n<li>Added a small calendar\/property thumbnail to the left of the accommodation name in the public booking header when an image is configured.<\/li>\n<li>Kept the booking header unchanged when no calendar image is selected.<\/li>\n<\/ul>\n\n<h4>1.3.6<\/h4>\n\n<ul>\n<li>Added drag-and-drop calendar ordering in the Calendar tab. The chosen order is saved automatically and used by the public multi-calendar\/property selector.<\/li>\n<li>Fixed order persistence by storing the administrator-defined calendar sequence as the canonical frontend order and mirroring it to the database sort_order field.<\/li>\n<li>Improved drag-and-drop saving with WordPress jQuery UI Sortable so the order is persisted immediately after a row is moved.<\/li>\n<li>Added a stable calendar sort order so frontend calendar lists no longer depend on alphabetical or database-return order.<\/li>\n<li>On mobile, the property\/calendar selector is now shown above the availability calendar, while the desktop layout remains unchanged.<\/li>\n<\/ul>\n\n<h4>1.3.5<\/h4>\n\n<ul>\n<li>Displayed Adults and Children side by side in two equal columns.<\/li>\n<li>Shortened the child selector label to the clearer \u201cChildren (0-X)\u201d format based on the configured maximum child age.<\/li>\n<li>Removed the duplicated Children ages line from the visible Note box in Dashboard and Bookings while keeping child ages stored and available to integrations.<\/li>\n<li>Standardized booking stay dates in Dashboard and Bookings to the day \/ month \/ year format.<\/li>\n<li>Fixed the mobile Adults\/Children selector alignment by enforcing identical field heights.<\/li>\n<li>Added dynamic age selectors for every child selected in the public booking form.<\/li>\n<li>Limited each child age selector from 0 to the per-calendar Maximum child age value.<\/li>\n<li>Added server-side child-age validation and structured child_ages storage for bookings.<\/li>\n<li>Added child ages to booking administration summaries, request notes, email notifications and WhatsApp request details.<\/li>\n<li>Added PHP helpers\/hooks and the hdbe:child-ages-changed JavaScript event so PRO and add-ons can reuse child ages in pricing and eligibility rules.<\/li>\n<\/ul>\n\n<h4>1.3.4<\/h4>\n\n<ul>\n<li>Moved the PRO additional-guest-price notice outside the Adults\/Children columns so it displays on its own full-width row.<\/li>\n<li>Improved responsive layout handling for the updated guest and date controls.<\/li>\n<li>Restored the native Total row in the base booking form when prices are enabled, including installations using PRO without any add-ons.<\/li>\n<li>Fixed the base front-end total calculation so PRO Additional Guest Pricing is included even when no pricing-summary add-on is installed.<\/li>\n<li>Kept the Privacy Policy and Terms and Conditions consent positioning unchanged.<\/li>\n<li>Updated the Unlock PRO demo buttons to use the dedicated PRO demo page.<\/li>\n<li>Renamed the Unlock PRO demo call-to-action to \u201cWatch PRO demo\u201d.<\/li>\n<li>Redesigned the public date selector as a clean two-column Check-in \/ Check-out row without adding an extra outer box.<\/li>\n<li>Centered the selected dates and changed the public display format to day - month - year.<\/li>\n<li>Kept the availability calendar outside the date-selector grid so it always uses the full booking-form width.<\/li>\n<\/ul>\n\n<h4>1.3.1<\/h4>\n\n<ul>\n<li>Kept the required Privacy Policy and Terms and Conditions consent immediately above the final Pay or Send Request button.<\/li>\n<li>Prevented PRO and add-on summaries from appearing between the legal consent and the submission button.<\/li>\n<li>Preserved the correct consent position when extensions update the booking form dynamically.<\/li>\n<li>Added dedicated Extension Pack cards to the Add-ons catalog.<\/li>\n<li>Added Extension Pack and Discount labels with previews of every included product.<\/li>\n<li>Ordered Featured products first, Extension Packs second and individual add-ons last.<\/li>\n<li>Added cumulative pack status when every included product is unlocked.<\/li>\n<li>Preserved all existing PRO and individual extension licenses.<\/li>\n<li>Clarified that WhatsApp request opening is available only in Manual Booking Request mode and not in online payment mode.<\/li>\n<li>Explicitly limited the front-end WhatsApp flow to the manual booking request handler.<\/li>\n<\/ul>\n\n<h4>1.3.0<\/h4>\n\n<ul>\n<li>Added per-calendar Receive requests settings.<\/li>\n<li>Kept Email checked and mandatory for every booking request.<\/li>\n<li>Added an optional WhatsApp channel with a validated international destination number.<\/li>\n<li>Opened WhatsApp after a successful request with property, dates, guest and contact details already filled in.<\/li>\n<li>Added an Open WhatsApp fallback button when the browser blocks the automatic window.<\/li>\n<li>Preserved the normal WordPress request record and email notification before opening WhatsApp.<\/li>\n<\/ul>\n\n<h4>1.2.9<\/h4>\n\n<ul>\n<li>Rebuilt the Unlock PRO feature cards with large centered icons, vertical content and distinct premium color treatments.<\/li>\n<li>Updated the Free\/PRO synchronization comparison and retained the Free manual refresh control.<\/li>\n<li>Renamed the promotional navigation item to Unlock PRO and placed it after Add-ons.<\/li>\n<li>Updated the PRO landing page, video and Free demo links.<\/li>\n<li>Increased the plugin version to refresh cached administration styles automatically.<\/li>\n<\/ul>\n\n<h4>1.2.8<\/h4>\n\n<ul>\n<li>Added an optional Terms and Conditions URL next to the required Privacy Policy setting.<\/li>\n<li>Updated the public booking consent to link both legal documents when Terms and Conditions are configured.<\/li>\n<li>Kept the legal consent immediately above the final request or payment button, including PRO payment mode.<\/li>\n<li>Redesigned the Unlock PRO page with a video preview, PRO feature cards, Free\/PRO comparison, add-on link and sticky demo\/purchase actions.<\/li>\n<li>Added a starred Unlock PRO item after Add-ons in both the WordPress submenu and plugin tab navigation.<\/li>\n<li>Historical change to the Free automatic import schedule (superseded by version 1.5.1, which checks external feeds approximately every 30 minutes); manual refresh remains available.<\/li>\n<\/ul>\n\n<h4>1.2.7<\/h4>\n\n<ul>\n<li>Added a per-calendar Maximum child age setting with an optional \"Children up to X years old\" selector in the booking form.<\/li>\n<li>Added separate adult and child counts to booking administration and request emails.<\/li>\n<li>Added client-side and server-side maximum guest validation for adults and children.<\/li>\n<li>Added the hdbe_after_guest_fields action for add-on field compatibility.<\/li>\n<li>Fixed booking request insertion error handling by checking the actual database insert result.<\/li>\n<\/ul>\n\n<h4>1.2.6<\/h4>\n\n<ul>\n<li>Added support for hiding the latest and installed version labels on selected add-on cards while keeping update detection active.<\/li>\n<\/ul>\n\n<h4>1.2.5<\/h4>\n\n<ul>\n<li>Added a gold premium style to featured\/pinned add-on cards while leaving standard add-on cards unchanged.<\/li>\n<\/ul>\n\n<h4>1.2.4<\/h4>\n\n<ul>\n<li>Prevented Add-ons catalog entries from overriding the Free plugin update data.<\/li>\n<li>Added a one-time plugin information and update cache reset after upgrading.<\/li>\n<\/ul>\n\n<h4>1.2.3<\/h4>\n\n<ul>\n<li>Added customer booking notes to the latest requests\/bookings dashboard.<\/li>\n<li>Added customer booking notes to the full Bookings tab.<\/li>\n<li>Added a clear note box while keeping internal phone data separate.<\/li>\n<\/ul>\n\n<h4>1.2.2<\/h4>\n\n<ul>\n<li>Added canceled and expired Stripe payment attempts to the latest requests\/bookings dashboard.<\/li>\n<li>Added clear status labels for pending requests, pending payments, confirmed bookings, canceled payments and expired checkouts.<\/li>\n<li>Prevented temporary Stripe payment attempts from showing manual Confirm and Reject actions.<\/li>\n<li>Added all payment statuses to the Website Requests &amp; Bookings list.<\/li>\n<\/ul>\n\n<h4>1.2.1<\/h4>\n\n<ul>\n<li>Improved featured add-on cards with a stronger highlighted border.<\/li>\n<li>Added a green highlighted border when Host Domination Booking Engine PRO is purchased and activated.<\/li>\n<li>Removed the unwanted WordPress installed-status icon from add-on card descriptions.<\/li>\n<li>Added AJAX submission for Send Request mode, avoiding a full-page refresh.<\/li>\n<\/ul>\n\n<h4>1.2.0<\/h4>\n\n<ul>\n<li>New Add-on Section<\/li>\n<li>Added an inline English confirmation message after a successful booking request.<\/li>\n<li>Kept the existing redirect-and-scroll confirmation as a fallback when JavaScript is unavailable.<\/li>\n<li>Moved add-on compatibility requirements directly above the Get it button.<\/li>\n<li>Hidden compatibility requirements on featured\/pinned catalog items.<\/li>\n<li>Added add-on activation and enhancement to the PRO feature list.<\/li>\n<\/ul>\n\n<h4>1.1.30<\/h4>\n\n<ul>\n<li>Changed the Privacy Policy consent wording from \u201cunderstood\u201d to \u201caccept\u201d.<\/li>\n<\/ul>\n\n<h4>1.1.29<\/h4>\n\n<ul>\n<li>Removed the PRO requirement notice from the Free add-ons catalog.<\/li>\n<\/ul>\n\n<h4>1.1.26<\/h4>\n\n<ul>\n<li>Added a required Privacy Policy URL setting for all booking forms.<\/li>\n<li>Added mandatory Privacy Policy acknowledgement for FREE and PRO booking submissions, including PRO payment flows.<\/li>\n<li>Prevented booking requests when the Privacy Policy URL is missing or the required acknowledgement has not been provided.<\/li>\n<li>Added a synchronization liability notice for delays, unavailable feeds and third-party calendar refresh times.<\/li>\n<li>Returned visitors directly to the booking confirmation notice after form submission.<\/li>\n<\/ul>\n\n<!--section=description-->\n<p>Free Booking Engine for Hotels, B&amp;Bs, Vacation Rentals: Direct Bookings, Auto iCal Sync (Airbnb, Booking, VRBO &amp; More), Concierge AI Free Add-on.<\/p>\n\n<h3>Free WordPress Booking Engine for Short Term Rental \/ Vacation Rentals, B&amp;Bs &amp; Hotels<\/h3>\n\n<p><strong>Fast &amp; Lightweight WordPress Booking Engine for Unlimited Properties &amp; Rooms<\/strong> \u2013 A streamlined, performance-focused booking tool for hosts who want a fast, efficient reservation experience without unnecessary assets on pages that do not display a booking calendar.<\/p>\n\n<h3>Demo Free Edition<\/h3>\n\n<ul>\n<li><a href=\"https:\/\/hostdomination.com\/demo-free-booking-engine\/\">Front-end Booking Engine Free Demo<\/a><\/li>\n<li><a href=\"https:\/\/wordpress.org\/plugins\/host-domination-booking-engine\/?preview=1\">Back-end Booking Engine Free Demo<\/a><\/li>\n<li><a href=\"https:\/\/youtu.be\/_5j8VgnoN0U\/\">Free Plugin Video Demo - Youtube link<\/a><\/li>\n<\/ul>\n\n<p>https:\/\/youtu.be\/_5j8VgnoN0U<\/p>\n\n<h3>Host Domination Booking Engine Free includes:<\/h3>\n\n<ul>\n<li>\ud83c\udfe0 Unlimited Properties \/ Rooms<\/li>\n<li>\ud83d\udd04 No Overbooking! Free and Automatic Two-way iCal Sync (Import &amp; Export)<\/li>\n<li>\ud83d\udcc5 Booking.com, Airbnb, Vrbo, Google Calendar, Holidu, Agoda, etc.<\/li>\n<li>\ud83d\udce9 Direct Booking Requests (WhatsApp &amp; Email)<\/li>\n<li>\ud83d\udcb8 No Booking Commissions<\/li>\n<li>\ud83e\udd16 AI Concierge (FREE Optional Add-on)<\/li>\n<li>\ud83c\udf10 Single-Month and Two-Month Layout<\/li>\n<li>\ud83e\udde9 Free Add-ons Available<\/li>\n<li>\ud83d\udee0\ufe0f Gutenberg Block &amp; Elementor Widget<\/li>\n<li>\ud83d\udc65 Adults &amp; Children Selection<\/li>\n<li>\ud83c\udf19 Minimum Stay Rules<\/li>\n<li>\ud83d\udcb0 Price per Night<\/li>\n<li>\ud83d\udcca Booking Dashboard<\/li>\n<li>\u2709\ufe0f Guest Confirmation Emails<\/li>\n<li>\ud83d\udcb3 Stripe Payments (PRO)<\/li>\n<li>\ud83d\udd12 Self-hosted \u2013 No Cloud Subscription Required<\/li>\n<li>\ud83d\udcf1 Mobile-friendly Front-end &amp; Back-end<\/li>\n<li>\ud83c\udfa8 Works with Any WordPress Theme<\/li>\n<li>\u26a1 Fast, Lightweight &amp; Performance-Focused Booking Experience<\/li>\n<li>\ud83d\ude80 Optimized Calendar Assets \u2013 Loaded Selectively Where Needed<\/li>\n<\/ul>\n\n<p><strong>Host Domination Booking Engine<\/strong> is a <strong>multilingual WordPress booking engine<\/strong>, <strong>reservation request system<\/strong> and <strong>iCal calendar synchronization plugin<\/strong> with new <strong>Whatsapp Integration<\/strong>, designed for vacation rentals, holiday homes, apartments, villas, bed and breakfasts, guest houses, small hotels and other accommodation businesses.<\/p>\n\n<p>Built with speed and efficiency in mind, this <strong>lightweight booking plugin for WordPress<\/strong> combines a responsive booking form with selective calendar asset loading to help keep pages without booking calendars lean.<\/p>\n\n<p>Take a look at the live demo website and see for yourself what you can build and manage with Host Domination Booking Engine, including the option to show or hide prices in the calendar.<\/p>\n\n<h3>Demo Pro Edition<\/h3>\n\n<ul>\n<li><a href=\"https:\/\/hostdomination.com\/demo-booking-engine-pro\/\">Front-end Booking Engine Pro Demo + Add-ons<\/a><\/li>\n<li><a href=\"https:\/\/hostdomination.com\/test-back-end-booking-engine-pro\/\">Back-end Booking Engine Pro Demo + Add-ons<\/a><\/li>\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=ixK5AvIIQFc\">Pro + Add-ons Plugin Video Demo - Youtube link<\/a><\/li>\n<\/ul>\n\n<p>https:\/\/www.youtube.com\/watch?v=ixK5AvIIQFc<\/p>\n\n<h3>Host Domination Booking Engine PRO Exclusive Features:<\/h3>\n\n<p>\ud83d\udcb3 Stripe Payments &amp; Automatic Booking Confirmation\n\ud83c\udfe6 Multi-Stripe Accounts per Property Manager (BETA)\n\ud83c\udfe2 Ideal for Property Managers, Co-Hosts &amp; Agencies\n\ud83d\udc65 User Roles &amp; Permissions (BETA)\n\ud83d\udcb0 Advanced Pricing (Daily &amp; Monthly Rates)\n\ud83d\udcc5 Advanced Availability Management\n\ud83d\uddd3\ufe0f Planning View (Multi-Property Timeline)\n\ud83d\udd04 Up to 10 iCal Feeds per Property\n\ud83d\udce4 All-in-One iCal Export link\n\ud83d\udd17 Stripe Payment Links\n\u21a9\ufe0f Stripe Refund Management\n\ud83d\udcf1 Mobile Web App (PWA)\n\ud83d\udd14 Push Notifications\n\ud83e\uddfe PDF Booking Receipts\n\ud83e\udde9 Premium Add-ons Available\n\ud83c\udfab Dedicated PRO Support<\/p>\n\n<h3>\ud83e\udd16 NEW! AI Concierge, FREE Virtual Assistant Add-on<\/h3>\n\n<ul>\n<li>\ud83e\udd16 <strong>FREE optional add-on<\/strong> \u2013 Add an AI concierge to your Booking Engine.<\/li>\n<li>\ud83c\udf0d <strong>Multilingual, 24\/7 guest support<\/strong> \u2013 Automatically replies in your guests\u2019 language.<\/li>\n<li>\ud83d\udcac <strong>Floating chat widget<\/strong> \u2013 Answers guest questions directly on your website.<\/li>\n<li>\ud83c\udfe1 <strong>Personalized property information<\/strong> \u2013 Uses your FAQs, check-in details, house rules, parking and services.<\/li>\n<li>\ud83d\udcc5 <strong>Booking assistance<\/strong> \u2013 Helps guests check availability and find your booking page or WhatsApp.<\/li>\n<li>\u2699\ufe0f <strong>Easy WordPress setup<\/strong> \u2013 Customize the assistant\u2019s information and settings.<\/li>\n<li>\ud83c\udf10 <strong>Translatable interface<\/strong> \u2013 Compatible with the free HD BE Translate add-on.<\/li>\n<\/ul>\n\n<h3>New Free Welcome Book<\/h3>\n\n<ul>\n<li><a href=\"https:\/\/wordpress.org\/plugins\/host-domination-welcome-book\/\">Free Host Domination Welcome Book Wordpress Plugin<\/a><\/li>\n<li><a href=\"https:\/\/hostdomination.com\/welcome\/\">Front-end Host Domination Welcome Book Demo + Add-ons<\/a><\/li>\n<li><a href=\"https:\/\/hostdomination.com\/demo-back-end-welcome-book-pro\/\">Back-end Host Domination Welcome Book Demo + Add-ons<\/a><\/li>\n<\/ul>\n\n<p>https:\/\/www.youtube.com\/watch?v=vXG0cKYtULk<\/p>\n\n<h3>Extra<\/h3>\n\n<ul>\n<li><a href=\"https:\/\/hostdomination.com\/en\/booking-engine-addons\/translate-free-multipack-pack\">NEW! Free Multilingual Pack<\/a><\/li>\n<li><a href=\"hostdomination.com\/en\/booking-engine-addons\/host-domination-be-report\/\">NEW! Free Advanced Report<\/a><\/li>\n<li><a href=\"https:\/\/wordpress.org\/plugins\/host-domination-booking-engine\/?preview=1\">NEW! Back-end Mobile Layout<\/a><\/li>\n<li><a href=\"https:\/\/hostdomination.com\/booking-engine-addons\/\">Add-ons Store<\/a> <\/li>\n<li><a href=\"https:\/\/hostdomination.com\/booking-engine-addons\/shared-rooms-flexible-guest-capacity\/\">New Shared Rooms &amp; Flexible Guest Capacity Add-on for Hostel and dormitories<\/a> <\/li>\n<li><a href=\"https:\/\/hostdomination.com\/support\/\">Ticket Support for Free &amp; Pro version<\/a><\/li>\n<\/ul>\n\n<p>The plugin is <strong>open source<\/strong>, <strong>self-hosted<\/strong> and <strong>compatible with any WordPress theme<\/strong>. It works directly inside your WordPress website without requiring a mandatory Host Domination cloud account or a subscription to a proprietary booking platform. The <strong>Free version<\/strong> does not expire.<\/p>\n\n<p>Hosts and property managers can display an <strong>availability calendar<\/strong>, receive <strong>direct booking requests<\/strong>, review guest details in WordPress and synchronize unavailable dates through standard <strong>iCal and ICS calendar feeds<\/strong>.<\/p>\n\n<p>Each calendar can also enable an optional <strong>WhatsApp request channel<\/strong>. Email delivery remains active and mandatory; after the request is saved and emailed, WhatsApp opens with the submitted booking details already filled in for the guest to review and send.<\/p>\n\n<p>Both FREE and PRO support <strong>unlimited property and room calendars<\/strong>, with <strong>no booking commissions charged by Host Domination<\/strong>. Third-party payment processors or OTA platforms may charge their own fees. The website iCal export feed is available immediately and reflects confirmed direct reservations. External calendars are checked automatically approximately every 30 minutes, with an optional <strong>Refresh Calendars<\/strong> button. Updates on other OTAs depend on their own calendar synchronization schedules.<\/p>\n\n<p><strong>Host Domination Booking Engine<\/strong> can be used alongside <strong>Airbnb<\/strong>, <strong>Booking.com<\/strong>, <strong>Vrbo<\/strong> and other OTA or reservation platforms that provide a compatible iCal or ICS URL. You can continue using the booking channels you already work with while adding a direct booking form to your own website.<\/p>\n\n<h4>Fast, lightweight &amp; performance-focused WordPress booking engine<\/h4>\n\n<p>A <strong>fast and lightweight booking engine<\/strong> should load only the resources it needs. Host Domination Booking Engine is designed around <strong>efficient asset loading<\/strong>, a streamlined interface and responsive calendars for desktop and mobile visitors.<\/p>\n\n<ul>\n<li><strong>Selective JavaScript loading:<\/strong> Calendar-related scripts, including Flatpickr, its Italian locale and the global calendar selector, are requested only where booking calendars are rendered.<\/li>\n<li><strong>Reduced unnecessary requests:<\/strong> Pages without booking calendars avoid these calendar-specific JavaScript resources, helping reduce avoidable front-end overhead.<\/li>\n<li><strong>Optimized calendar styles:<\/strong> Flatpickr CSS is loaded selectively while preserving calendar presentation where it is needed.<\/li>\n<li><strong>Page-builder support:<\/strong> The calendar asset strategy is designed to support shortcodes, native Gutenberg blocks, Elementor widgets and live editor previews.<\/li>\n<li><strong>Efficient, mobile-friendly experience:<\/strong> A responsive availability calendar and booking request form help guests browse dates and send requests without unnecessary steps.<\/li>\n<\/ul>\n\n<p>These improvements target unnecessary asset loading; actual page speed also depends on your WordPress theme, other plugins, hosting, caching and the content of each page.<\/p>\n\n<h4>Direct booking requests from your WordPress website<\/h4>\n\n<p>Turn your WordPress website into an additional <strong>direct booking channel<\/strong>.<\/p>\n\n<p>Guests can select and submit:<\/p>\n\n<ul>\n<li>Check-in and check-out dates<\/li>\n<li>Number of adults<\/li>\n<li>Number of children up to the maximum age configured for the selected calendar<\/li>\n<li>Full name<\/li>\n<li>Email address<\/li>\n<li>Contact phone number<\/li>\n<li>Additional notes<\/li>\n<li>Mandatory Privacy Policy consent before submission<\/li>\n<li>Optional acceptance of linked Terms and Conditions when configured by the website administrator<\/li>\n<li>Optional WhatsApp opening with a prefilled copy of the submitted request<\/li>\n<\/ul>\n\n<p>New requests appear in the WordPress administration area. Administrators can review, confirm, reject or delete them.<\/p>\n\n<p><strong>Pending requests<\/strong> do not become <strong>confirmed reservations<\/strong> automatically. Once a request is confirmed, its dates are included in the internal <strong>availability calendar<\/strong> and in the website iCal export feed.<\/p>\n\n<p><strong>Native Gutenberg Block &amp; Elementor Widget<\/strong> \u2013 Add a single booking calendar or the multi-calendar booking form directly from Gutenberg or Elementor, without manually entering shortcodes. Shortcodes remain available for other WordPress page builders.<\/p>\n\n<p>Each calendar generates its own shortcode. For example:<\/p>\n\n<p>[hdbe_booking_calendar id=\"123\"]<\/p>\n\n<p>Replace <code>123<\/code> with the ID shown in the <strong>Created Properties \/ Rooms<\/strong> table after saving your calendar.<\/p>\n\n<h4>Front-end availability calendar<\/h4>\n\n<p>Display a responsive booking calendar that allows guests to select arrival and departure dates directly from your website.<\/p>\n\n<p>The calendar shows:<\/p>\n\n<ul>\n<li>Available dates<\/li>\n<li>Unavailable dates<\/li>\n<li>Confirmed website reservations<\/li>\n<li>Reservations imported from external iCal feeds<\/li>\n<li>Selectable check-in and check-out boundaries<\/li>\n<li>The <strong>minimum stay<\/strong> required<\/li>\n<li>An optional <strong>base price per night<\/strong><\/li>\n<\/ul>\n\n<h4>Built for hosts and property managers<\/h4>\n\n<p><strong>Host Domination Booking Engine<\/strong> can be used by:<\/p>\n\n<ul>\n<li>Individual hosts<\/li>\n<li>Vacation rental owners<\/li>\n<li><strong>Airbnb<\/strong> hosts<\/li>\n<li>Property managers<\/li>\n<li>Bed and breakfast owners<\/li>\n<li>Apartment managers<\/li>\n<li>Villa rental businesses<\/li>\n<li>Small hotels<\/li>\n<li>Guest houses<\/li>\n<li>Short-term rental agencies<\/li>\n<li>WordPress developers<\/li>\n<li>Web agencies creating accommodation websites<\/li>\n<\/ul>\n\n<h4>Calendar and accommodation settings<\/h4>\n\n<p>Create a calendar for your room, apartment or accommodation and configure:<\/p>\n\n<ul>\n<li>Calendar or accommodation name<\/li>\n<li>Maximum number of guests<\/li>\n<li>Minimum number of nights<\/li>\n<li>Optional <strong>base price per night<\/strong><\/li>\n<li>EUR or USD currency<\/li>\n<li>Whether the nightly price is displayed in the public calendar<\/li>\n<li>External iCal or ICS calendar links<\/li>\n<li>Required <strong>Privacy Policy URL<\/strong> for GDPR and personal-data information<\/li>\n<li>Optional <strong>Terms and Conditions URL<\/strong> covering booking, cancellation, refund and reservation rules<\/li>\n<li><strong>Receive requests<\/strong> channels, with mandatory Email and optional WhatsApp per calendar<\/li>\n<li>International WhatsApp destination number when the optional channel is enabled<\/li>\n<li><strong>Website iCal export URL<\/strong><\/li>\n<\/ul>\n\n<p>The <strong>Free version<\/strong> supports <strong>unlimited accommodation calendars<\/strong>.<\/p>\n\n<p><strong>Host Domination Booking Engine PRO<\/strong> adds online payments, advanced pricing, premium add-ons and extended external iCal capacity; both editions support unlimited accommodation calendars.<\/p>\n\n<h4>Minimum stay validation<\/h4>\n\n<p>Set the minimum number of nights required for the accommodation.<\/p>\n\n<p>If a guest selects a shorter stay, the booking form displays a validation message and prevents the request from being submitted until a valid date range is selected.<\/p>\n\n<h4>Optional nightly price display<\/h4>\n\n<p>The <strong>Free version<\/strong> allows you to configure a <strong>base price per night<\/strong> and display it on available dates in the public calendar.<\/p>\n\n<p><strong>Host Domination Booking Engine<\/strong> <strong>PRO<\/strong> adds advanced pricing tools for day, month and yearly pricing rules, including different prices for selected dates and periods.<\/p>\n\n<h4>iCal and ICS calendar synchronization<\/h4>\n\n<p><strong>Host Domination Booking Engine<\/strong> supports standard <strong>iCal and ICS calendar feeds<\/strong>.<\/p>\n\n<p>You can:<\/p>\n\n<ul>\n<li>Import unavailable dates from an external calendar<\/li>\n<li>Import reservations from a compatible OTA calendar<\/li>\n<li>Automatically check connected external iCal calendars approximately every 30 minutes<\/li>\n<li>Run an immediate manual import through <strong>Refresh Calendars<\/strong><\/li>\n<li>Generate an <strong>instantly available website iCal export URL<\/strong><\/li>\n<li>Export confirmed direct website reservations immediately through the live feed<\/li>\n<li>Keep imported OTA reservations unavailable on your website calendar<\/li>\n<li>Connect the website calendar to other compatible reservation systems<\/li>\n<\/ul>\n\n<p>Compatible sources may include:<\/p>\n\n<ul>\n<li><strong>Airbnb<\/strong><\/li>\n<li><strong>Booking.com<\/strong><\/li>\n<li><strong>Vrbo<\/strong><\/li>\n<li>Google Calendar<\/li>\n<li>Apple Calendar<\/li>\n<li>Tripadvisor<\/li>\n<li>Other vacation rental platforms<\/li>\n<li>Property management systems that provide an iCal or ICS URL<\/li>\n<li>Agoda or Expedia-connected properties when the platform, account or connected property management system provides a compatible iCal feed<\/li>\n<\/ul>\n\n<p>Compatibility depends on the availability and format of the calendar feed supplied by each external service.<\/p>\n\n<h4>Automatic calendar synchronization in the Free version<\/h4>\n\n<p>The <strong>Free version<\/strong> supports:<\/p>\n\n<ul>\n<li><strong>Unlimited property and room calendars<\/strong><\/li>\n<li><strong>Instant website iCal export<\/strong> of confirmed direct reservations<\/li>\n<li>An immediate import attempt when an external iCal URL is saved<\/li>\n<li><strong>Automatic import checks approximately every 30 minutes<\/strong> through WordPress scheduled tasks<\/li>\n<li><strong>Manual import<\/strong> at any time through the <strong>Refresh Calendars<\/strong> button<\/li>\n<li>A dedicated website iCal export URL for each property or room calendar<\/li>\n<\/ul>\n\n<p>The <strong>iCal export feed updates immediately<\/strong> when a direct reservation is confirmed. External OTAs determine when they synchronize and read that feed, so updates may appear later on those platforms. The plugin automatically checks incoming feeds approximately every 30 minutes; this interval can vary with WordPress cron, website traffic and hosting configuration. Click <strong>Refresh Calendars<\/strong> to check external feeds on demand. Two-way iCal synchronization helps reduce overbooking risk, but is not a real-time guarantee.<\/p>\n\n<h4>Two-way iCal calendar workflow<\/h4>\n\n<p>A typical synchronization workflow is:<\/p>\n\n<ol>\n<li>Export the iCal or ICS URL from <strong>Airbnb<\/strong>, <strong>Booking.com<\/strong>, <strong>Vrbo<\/strong> or another compatible platform.<\/li>\n<li>Paste the external URL into <strong>Host Domination Booking Engine<\/strong>.<\/li>\n<li>Save the calendar. The plugin performs the initial import immediately.<\/li>\n<li>Copy the Website iCal Feed URL generated by the plugin.<\/li>\n<li>Import the generated URL into the external booking platform.<\/li>\n<li>Confirm <strong>direct booking requests<\/strong> received from your website so that their dates are included in the exported feed.<\/li>\n<li>The Free plugin checks connected iCal feeds <strong>approximately every 30 minutes<\/strong>. You can also use <strong>Refresh Calendars<\/strong> at any time to run an immediate manual import.<\/li>\n<\/ol>\n\n<p>The plugin imports and exports availability through standard calendar feeds. It does not use the private APIs of the listed booking platforms.<\/p>\n\n<h4>Reduce the risk of double bookings<\/h4>\n\n<p>Calendar synchronization helps keep availability consistent between your WordPress website and compatible external booking channels.<\/p>\n\n<p>Imported reservations are displayed as unavailable dates in the booking calendar. Confirmed direct reservations are included in the website iCal feed and can be imported by compatible OTA platforms.<\/p>\n\n<h4>Responsive and mobile-friendly booking form<\/h4>\n\n<p>The front-end booking calendar is designed for desktop computers, tablets and smartphones.<\/p>\n\n<h4>Interested in Host Domination Booking Engine PRO?<\/h4>\n\n<p>Curious about the <strong>PRO version<\/strong>?<\/p>\n\n<p>Take a look at the live demo website and see for yourself what you can build and manage with <strong>Host Domination Booking Engine PRO<\/strong>.<\/p>\n\n<ul>\n<li><a href=\"https:\/\/hostdomination.com\/demo-booking-engine-pro\/\">Front-end Demo Website<\/a><\/li>\n<\/ul>\n\n<h4>Host Domination Booking Engine PRO<\/h4>\n\n<p><strong>Host Domination Booking Engine PRO<\/strong> extends the booking system with online payments, multiple calendar sources, flexible prices, advanced availability controls and premium add-ons.<\/p>\n\n<p><strong>PRO<\/strong> features include:<\/p>\n\n<ul>\n<li>Unlimited accommodation, room or property calendars<\/li>\n<li>Multiple-room or property selector on the front end<\/li>\n<li>Expanded external iCal \/ ICS source connections for each property or room<\/li>\n<li>Automatic synchronization of connected external iCal \/ ICS calendars<\/li>\n<li><strong>Unified iCal calendar<\/strong> generation<\/li>\n<li>iCal <strong>calendar merger<\/strong> and <strong>calendar unifier<\/strong><\/li>\n<li>One consolidated website iCal URL generated from multiple connected feeds for the same accommodation calendar<\/li>\n<li>Advanced day, month and yearly pricing<\/li>\n<li>Different prices for specific dates and periods<\/li>\n<li>Advanced date availability controls<\/li>\n<li>Blocking of selected dates or entire months<\/li>\n<li><strong>Stripe online payments<\/strong><\/li>\n<li>Payment status management<\/li>\n<li>Expanded reservation management<\/li>\n<li>Technical support<\/li>\n<\/ul>\n\n<h4>Multiple external calendars with PRO<\/h4>\n\n<p>The <strong>PRO<\/strong> extension expands external iCal source connections and provides additional calendar management features, while FREE and PRO both support unlimited property and room calendars.<\/p>\n\n<p>For example, the same property calendar can import unavailable dates from:<\/p>\n\n<ul>\n<li><strong>Airbnb<\/strong><\/li>\n<li><strong>Booking.com<\/strong><\/li>\n<li><strong>Vrbo<\/strong><\/li>\n<\/ul>\n\n<p>The plugin combines the imported events in the WordPress <strong>availability calendar<\/strong> so that dates already occupied through one connected channel are unavailable on the direct booking website.<\/p>\n\n<h4>Unified iCal calendar and calendar merger<\/h4>\n\n<p><strong>Host Domination Booking Engine<\/strong> <strong>PRO<\/strong> can work as an iCal <strong>calendar unifier<\/strong> for each accommodation calendar.<\/p>\n\n<p>Multiple connected iCal or ICS feeds are imported into one property calendar. The plugin then generates one Website iCal Feed URL containing the combined confirmed and unavailable periods.<\/p>\n\n<p>This unified URL can be imported into another compatible:<\/p>\n\n<ul>\n<li>OTA or booking platform<\/li>\n<li>Property management system<\/li>\n<li>Calendar application<\/li>\n<li>Reservation tool<\/li>\n<li>WordPress website<\/li>\n<li>Availability system that accepts only one iCal URL<\/li>\n<\/ul>\n\n<p>Host Domination Bookign Engine is not a channel manager\/PSM.<\/p>","raw_excerpt":"Free Booking Engine for Hotels, B&amp;Bs, Vacation Rentals: Direct Bookings, Auto iCal Sync (Airbnb, Booking, VRBO &amp; More), Concierge AI Free Add-on.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/fuc.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/324016","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fuc.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/fuc.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/fuc.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=324016"}],"author":[{"embeddable":true,"href":"https:\/\/fuc.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/ilithio"}],"wp:attachment":[{"href":"https:\/\/fuc.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=324016"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/fuc.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=324016"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/fuc.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=324016"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/fuc.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=324016"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/fuc.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=324016"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/fuc.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=324016"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}