Skip to content

Theme Compatibility ​

FluentBooking renders the public booking flow (calendar landing, event landing, booking confirmation) using its own templates. Most themes work out of the box, but a few common patterns conflict.

How FluentBooking Renders Public Pages ​

The plugin detects requests for booking, calendar, and event landing URLs and routes them through its own template chain. The public bundle is enqueued as fluent-booking-public (plus per-feature handles like fluent-booking-team, fluent-booking-calendar, fluent-booking-phone-field).

The public landing page vars are filterable for theme integration:

php
add_filter('fluent_booking/event_landing_page_vars', function ($data, $calendar, $calendarEvent, $existingBooking) {
    // $data is the array of vars handed to the public bundle
    // Mutate $data here to alter what the booking widget sees.
    return $data;
}, 10, 4);

Common Conflicts ​

Theme always renders a sidebar / off-canvas menu ​

If your theme always wraps content in a sidebar wrapper, the booking widget may render inside an unexpected container.

Fix: Remove the theme's wrapping action from the booking landing page using the WordPress template_redirect hook combined with a request inspection (e.g., check $_GET['fluent-calendar'] or your landing-page slug).

Theme overrides FluentBooking CSS ​

Theme styles can override the booking widget styles when enqueued later. Boost FluentBooking-related styles' priority:

php
add_action('wp_enqueue_scripts', function () {
    wp_enqueue_style(
        'fluent-booking-overrides',
        plugin_dir_url(__FILE__) . 'overrides.css',
        ['fluent-booking-public'],
        '1.0'
    );
}, 999);

Page builder container widths (Elementor, Bricks, etc.) ​

Some page builders wrap content in fixed-width containers. The booking widget needs at least 360 px of width to render the calendar.

Fix: Use the page builder's "Full Width" template, or place the booking shortcode inside a 100%-width section.

Filtering the Public Layout ​

For deeper control, use the matching action / filter hooks documented in Action Hooks → Landing Pages & Display and Filter Hooks → Display & Templates.

A few hooks worth knowing:

HookTypePurpose
fluent_booking/event_landing_page_varsfilter, 4 argsEdit the data array passed into the event landing page.
fluent_booking/booking_confirmation_page_varsfilterEdit the booking confirmation page vars.
fluent_booking/before_calendar_event_landing_pageactionFires just before the event landing page renders.
fluent_booking/after_calendar_event_landing_pageactionFires just after.
fluent_booking/main_landing_head / main_landing_footeractionInject markup into the head/footer of the main landing page.
fluent_booking/author_landing_head / author_landing_footeractionSame, for the author/team landing pages.
fluent_booking/booking_confirmation_footeractionFires at the bottom of the booking confirmation page.

Headless / Decoupled Sites ​

For headless WordPress (Next.js, Astro, etc.), drive the booking flow via the REST API. See the REST API Overview for endpoint reference and authentication setup.

Smoke-Test Checklist ​

  1. Visit a calendar landing URL on the front end.
  2. Open DevTools → Console — check for theme-injected JS errors.
  3. Confirm the booking widget renders at full width.
  4. Confirm the date picker is clickable (theme overlays sometimes intercept clicks).
  5. Submit a test booking and verify the confirmation page renders.

If any step fails, isolate the conflicting theme component using the snippets above.