Fix: Google Ads / Meta / TikTok purchase conversion events are now correctly fired on the booking widget after returning from the payment provider. Previously the widget always mounted at “booking” step on return, never rendering the success page — so no purchase event was pushed to the dataLayer and no conversion was sent. The widget now detects success URL params (session_id for Stripe, ref for CAWL/Monetico/Sogecommerce) and switches to the success step on mount.
Fix: gift card purchases now fire the same set of conversion events (dataLayer purchase + conversion, Google Ads gtag conversion, GA4 purchase, Meta Pixel Purchase, TikTok CompletePayment) that the booking flow already had. Previously the gift card success state showed a “Bon cadeau acheté !” message but did not push any tracking. Conversion data (amount, currency, transaction ID, client info for Enhanced Conversions) is stored before redirecting to the payment provider and replayed on return.
New: gift card success page now redirects to a configurable “thank you” page (sitewebmercibon field on the center, falls back to sitewebmerci if empty), aligned with the existing booking flow. The redirect waits for Meta / TikTok / Google Ads pixel network requests to actually fire (PerformanceObserver, 5s safety timeout) before navigating away, so pixel/server deduplication is preserved.
2.4.9
Fix: tracking loader is now served as an external static JS file (assets/tracking-loader.js) instead of inline. Pixel IDs are passed via data-* attributes on the <script src> tag. This bypasses Consent Management Platforms (Complianz, CookieYes, Cookiebot, Borlabs Cookie, etc.) that scan inline script content for tracker references and rewrite them to type=”text/plain” — even when the documented bypass attributes are set. External scripts served from the plugin’s own domain are not matched against the CMPs’ third-party tracker URL lists.
Added: WP Rocket “Delay JavaScript Execution” exclusion filter (rocket_delay_js_exclusions) for the tracking loader, so the pixel fires immediately on page load instead of waiting for first user interaction. Cloudflare Rocket Loader is also disabled for this script via data-cfasync=”false”.
2.4.8
Fix: tracking script is now emitted directly via echo in wp_head instead of through wp_add_inline_script, and wrapped in the official Complianz <!–cmplz-native–> HTML markers. The previous v2.4.7 attempt to inject CMP bypass attributes via the script_loader_tag filter did not work because that filter is only applied to scripts with a src attribute, never to inline scripts. As a result, Complianz (and other CMPs) kept neutralizing the tracking script with type=”text/plain” even after upgrading.
2.4.7
Fix: tracking script is now flagged with bypass attributes for the main WordPress Consent Management Platforms (Complianz, CookieYes, Cookiebot, Borlabs Cookie, CookieFirst). Without these, CMPs would auto-detect references to Meta/TikTok/GTM in the inline script and rewrite its type to text/plain, neutralizing it before execution — even after the visitor accepted cookies, since the script was wrongly classified under “marketing”. Site owners who want consent-gated tracking can still classify the script manually in their CMP settings.
2.4.6
Fix: tracking pixels (Google, Meta, TikTok) are now injected sitewide on every front-end page instead of only on pages where the booking shortcode was detected in the raw post content. Previous behavior used has_shortcode($post->post_content), which silently failed when the booking widget was embedded via a page builder (Elementor, Bricks, Divi, Gutenberg blocks, custom theme template…). Result: zero browser-side pixel events on most modern WP setups. Tracking now loads as long as a center ID is configured in the plugin settings.
2.4.5
Changed: tracking pixels (Google, Meta, TikTok) now load immediately on page render instead of waiting for an internal cookie consent flag. RGPD compliance is delegated to the host site’s own cookie banner plugin (CookieYes, Complianz, Real Cookie Banner, Tarteaucitron, etc.), which can block third-party scripts as needed. Resolves missing browser-side TikTok/Meta pixel events on sites whose consent banner did not set the previously required cookie_consent=granted localStorage key.
Fix: PHP version constant resynced with plugin header (was lagging at 2.4.2 while header was 2.4.4), ensuring the tracking-config transient cache is properly invalidated on upgrade.
2.4.4
Fix: scheduled exceptional closures now keep the service visible on the booking widget with all slots inside the closure period blocked, instead of removing the service entirely for the day.
2.4.3
New: service lifecycle (open/close dates). A service can now have an “available from” date (appears on the booking widget at that date) and an “available until” date (no new bookings after that date). Scheduled and archived services are automatically hidden from the public widget. Events and services with no available slots are also hidden.
2.4.2
Improved: smart wait for pixel network requests before redirecting to “thank you” page (sitewebmerci). Uses PerformanceObserver to detect when Meta, TikTok, and Google Ads pixel HTTP requests have actually been sent — redirects immediately when all configured pixels have fired (or after 5s safety timeout). Replaces the previous fixed 3s delay.
New: visual loader on the success page during the wait, with per-pixel status indicators (✓ Meta, ✓ TikTok, ✓ Google Ads).
2.4.1
Fix: tracking pixel cache TTL reduced from 1h to 5 min, and cache key now includes plugin version. After updating Meta/TikTok pixel IDs in the PosLimitless dashboard, changes propagate within 5 minutes (instead of 1 hour). Plugin upgrades automatically invalidate the cache.
2.4.0
Fix: 1.2s delay before redirect to “thank you page” (sitewebmerci) so browser pixels (Meta fbq, TikTok ttq, GA gtag) have time to fire. Previously the redirect was aborting the pixel requests, causing Purchase events to be missing on the Browser side (server-side was unaffected).
2.3.9
New: full TikTok Pixel + Events API integration (ViewContent, InitiateCheckout, CompletePayment) with browser-server deduplication via event_id
New: enriched Meta Pixel events (Purchase eventID for Conversions API dedup)
New: capture of TikTok ttclid URL param + _ttp cookie for server-side attribution
Improved: ViewContent enriched with center.id and center.name for better audience matching
2.3.7
Improved: “phone only” status now resolved server-side (honors per-day and per-period overrides on opening rules, lunch breaks and closures)
2.3.6
New: dedicated “Service title” color in appearance settings (independent from text color)
2.3.5
New: customizable colored border around service images (appearance settings)
Improved: per-badge color & emoji support (syncs with Poslimitless admin where each badge can have its own emoji and color)
2.3.4
Fix: service info modal no longer clipped when embedded in pages with transformed ancestors (React Portal to document.body)
New: dedicated “Info badges” color in appearance settings (independent from accent color)
2.3.3
Full i18n support: English source strings, French translation shipped (languages/poslimitless-booking-fr_FR.mo)
Plugin icon and banner published on wordpress.org
2.3.2
New “transparent background” option per module (let the WordPress theme drive the page background)
2.3.1
Renamed generic JavaScript globals to use unique poslbo prefix (WordPress.org review compliance)
2.2.0
Added Events module
5 visual styles for all modules (Classic, Grid, Glassmorphism, Immersive, Dashboard)
Live gift card preview with customization
Secure API Key field (wpApiKey)
Admin interface improvements
2.0.0
Initial public release
Booking, Confirmation, Client Portal, Gift Card modules