Event location display in calendar grid and offcanvas, waitlist settings, fifth weekday recurrence, dot threshold control, button padding, and tooltip fixes.
Version 1.5.3 adds location display to the calendar, waitlist support for ticketing addons, and a collection of polish and fixes across the calendar UI.
Event Location Display
Events can now show their venue name or virtual event label directly in the calendar.
- Calendar grid — New per-event "Display location" toggle in the Calendar Display metabox shows the venue name below the event title in the calendar grid.
- Offcanvas panel — New Location toggle in Calendar > Event Panel > Appearance controls whether the venue name appears in the offcanvas detail panel, with a matching map pin icon.
- Custom location icon — A location pin icon has been added to the Custom Icons section in calendar settings, using the same upload/replace pattern as the date and time icons.
Event Waitlist Settings
New Waitlist section on the event edit screen lets you enable a waitlist and set a maximum waitlist size per event. Waitlisted attendees are automatically promoted when a spot opens up. Requires a ticketing addon (LRE Ticketing for FluentForms or FluentCart) to be active.
- Waitlist API filters — New
lre_ticketing_waitlist_enabled and lre_ticketing_waitlist_max filters allow addons to read event-level waitlist settings without accessing post meta directly.
- Ticketing active filter — New
lre_ticketing_active filter lets ticketing addons signal their presence so core features like waitlist settings only appear when relevant.
- Toggle-dependent section visibility — Metabox sections can now use
data-lre-requires-toggle to automatically show/hide based on addon toggle states.
Fifth Weekday Recurrence
Monthly recurrence now supports "5th" weekday patterns (e.g., 5th Sunday of the month). Only fires in months where a 5th occurrence exists; months with only four are automatically skipped.
Calendar Grid Polish
- Events before dots setting — New "Events Before Dots" option in Calendar settings controls how many events display per day before switching to dot indicators. Default is 2; configurable from 1 to 10.
- Button padding control — Replaces the fixed size presets (small/medium/large) with a direct padding input for precise control over offcanvas button spacing.
- Calendar display toggles layout — Display start time and display location toggles now appear side by side in the Calendar Display metabox for a cleaner layout.
Improvements
- Consistent filter dropdowns on mobile — Date and Event Type filters now use a custom styled dropdown instead of the native browser picker. All filter dropdowns now look and behave consistently across desktop and mobile.
- Debug tab hidden from clients — The Debug tab in plugin settings is now only visible when the
LRE_DEBUG constant is defined in wp-config.php.
Fixes
- Dot tooltips no longer clipped at calendar edges — Tooltips now use viewport-aware fixed positioning and automatically flip below the dot when there isn't enough room above.
- Offcanvas default icons now match custom icon sizing — Default inline SVG icons rendered at 16px while custom uploaded icons rendered at 20px. All offcanvas icons now display at a consistent 20px.
- Calendar events now link to event pages when offcanvas is disabled — Events now link directly to their event page when the offcanvas panel is turned off.
- Field overrides now work for fields with hyphens in their name — Fields like
{lre_field:event-description} now resolve correctly in both dynamic data and template content.
- Offcanvas buttons can now be styled with custom CSS — Button styles now use a simple class selector that custom CSS can override naturally.
- Upgrade notice no longer appears when no events exist — The notice now only appears when there are published posts with event dates that haven't been migrated yet.
Taxonomy filtering, interactive filter shortcodes, multiple calendars per page, native filter mode, and frontend translation support.
Version 1.5.2 introduces a complete filtering system for the calendar, letting visitors interactively filter events by taxonomy. It supports multiple approaches — inline native filters, standalone shortcodes, or both working together.
Calendar Taxonomy Filtering
Filter which events appear on a calendar by taxonomy terms using the new taxonomy and terms shortcode attributes. For example, [lre_calendar taxonomy="event_category" terms="yoga,pilates"] displays only events in those categories. Supports both term slugs and numeric IDs.
- Multiple taxonomy filtering — Filter by more than one taxonomy at once using the
taxonomies attribute with pipe-separated groups, e.g. [lre_calendar taxonomies="event_category:yoga|event_tag:beginner"]. Events must match all specified taxonomy conditions.
- Multiple calendars per page — Display several calendars on the same page, each showing different event categories or types. Combine
taxonomy, terms, and post_type attributes for full control over each calendar's content.
- Custom calendar ID — Use the
id attribute on [lre_calendar] to assign a stable, human-readable identifier for targeting and styling, e.g. [lre_calendar id="yoga-calendar"].
Interactive Calendar Filter Shortcode
New [lre_calendar_filter] shortcode lets visitors dynamically filter which events appear on a calendar. Supports dropdown, button, and pill display modes. Place it anywhere on the same page as your calendar — filter changes instantly update the calendar without reloading the page.
- Filter targeting — When using multiple calendars, use the
target attribute to control which calendar a filter affects, e.g. [lre_calendar_filter target="yoga-cal" taxonomy="event_category"]. With a single calendar, targeting is automatic.
- Filter options — Supports
show_counts to display event counts, show_all for an "All" reset option, terms to limit which terms are shown, hide_empty to hide unused terms, and multiple for multi-select dropdowns.
Native Calendar Filter Mode
Add filter="event_category" directly to the [lre_calendar] shortcode to render filter controls inline in the calendar header. Supports pills (default), buttons, and dropdown display modes. No separate shortcode needed — everything is self-contained.
- Coexisting filter modes — Native mode and manual mode can work together on the same calendar. Use native mode for one taxonomy in the header and a separate
[lre_calendar_filter] shortcode for a second taxonomy elsewhere on the page.
- Inline loading spinner — Clicking a pill or button filter shows a subtle inline spinner that expands within the button while the calendar grid dims, providing clear visual feedback during event refetching.
Improvements
- Wider settings page — The plugin settings page now uses a wider layout (1400px) for better readability on modern displays.
- Consistent settings layout — All tabs now use the full content width and left-hand label columns are aligned to a uniform 200px across every settings section.
- Calendar filter shortcode styling — The
[lre_calendar_filter] shortcode renders with the same polished styling as the Bricks Builder filter elements.
- Frontend JavaScript translation support — Filter labels ("This Week", "Next 7 Days", "Today", etc.), event type labels, Active Filters UI labels, and calendar export strings are now fully translatable through standard .po/.mo files.
Fixes
- Page scrolled to top when clicking calendar filter buttons — The AJAX filtering system was intercepting native filter button clicks via document-level event delegation. Native filter buttons are now excluded from AJAX filter delegation.
- Native filter not visible in Bricks Builder editor — The calendar preview in the Bricks editor now displays native mode filter controls in the header, matching the frontend appearance.
- Bricks editor calendar preview used outdated event styling — Events in the editor preview now render with the current frontend layout: left border accent with time above title, recurring event icons, and per-event category colours.
- Calendar shortcode reference showed a non-functional
category attribute — Replaced with the correct taxonomy and terms syntax, plus new examples for multiple taxonomy filtering, custom calendar IDs, and the filter shortcode.
Critical fix for events disappearing from calendar after adding a reschedule override.
Events Disappearing After Reschedule
Saving a rescheduled occurrence caused all stored occurrences for that event to be permanently deleted.
The root cause was a data format mismatch between the Override Manager (which returns reschedules as an indexed array) and the Occurrence Store (which expected a keyed map), resulting in an uncaught error during occurrence regeneration after the existing data had already been cleared.
This has been resolved — rescheduling an occurrence now correctly regenerates all stored occurrences.
Stored Occurrences performance system, Elementor integration, AJAX filtering, Add to Calendar, Schema.org structured data, Event Status system, Countdown timers, Native Events mode, and much more.
13 Feb 2026
Feature
Performance
Improvement
Version 1.5.0 is the biggest update to Lista Recurring Events since launch. It introduces a new performance architecture, a complete filtering system, and over a dozen new features — all while maintaining full backward compatibility with existing setups.
Stored Occurrences Performance System
Event occurrences are now pre-calculated and stored in a dedicated database table, replacing the previous on-demand calculation system. This is the single biggest performance improvement in the plugin's history.
- Calendar navigation is now instant — browsing to any month, even years in the future, loads immediately (previously could take 5–20+ seconds for distant dates)
- Query loops are significantly faster — Bricks and Elementor loops with date or taxonomy filters now use optimised database queries instead of PHP calculations
- Better scalability — sites with hundreds of recurring events will see the biggest improvements
- Automatic occurrence extension — events set to recur "forever" automatically extend their stored occurrences via a weekly background task using Action Scheduler or WP-Cron
- Automatic regeneration — occurrences are regenerated whenever an event is saved, so the stored data always stays in sync with your recurrence settings
- Advanced tab — mode switcher to change between Native and Integration modes, Reset Plugin Data option for a complete fresh start, and a Data Information panel showing occurrences table name, configured post types, stored occurrence count, and plugin version
Elementor Support Improved
Elementor support improved — the same powerful features available in Bricks Builder now work in Elementor too.
- Query loop integration — custom "LRE Recurring Events" query type works with Loop Grid, Loop Carousel, and Posts widgets
- Dynamic tags — occurrence date, next occurrence, override fields, recurrence status, countdown, event status, and display labels
- Events Countdown widget — full widget with Content and Style tabs, typography controls, alignment, and status colour selectors
- Event Status / Label dynamic tag — choose between status key, status label, or display label output
- AJAX filtering — Elementor query loops support the same AJAX filter system as Bricks
AJAX Filtering System
A complete filtering system for recurring events, available as Bricks Builder elements and shortcodes.
- Date Filter — filter by range (Today, This Week, This Month, Custom Range)
- Taxonomy Filter — filter by any taxonomy (categories, tags, custom) with single or multi-select
- Event Type Filter — filter by recurrence type (All, One-time, Recurring)
- Search Filter — search events by title and content
- Active Filters — show currently active filters as removable pills with inline or stacked layout
- Apply Filters — button with pending change count badge
- Reset Filters — clear all active filters with auto-hide when no filters are active
- Pagination — page through filtered results
- Size controls on all filter elements — Width, Min Width, and Max Width with responsive breakpoint support
- Shortcode equivalents —
[lre_date_filter], [lre_taxonomy_filter], [lre_event_type_filter], [lre_search_filter], [lre_active_filters], [lre_reset_filters]
- Custom multi-select dropdowns — polished component with checkboxes, search, keyboard navigation, and "Clear Selection" button (replaces the native multi-select)
- Pill/button display mode — choose between dropdown and pill-style display for filter elements
- Smooth AJAX transitions with loading states and URL parameter sync for shareable filtered views
Add to Calendar
Allow visitors to save events to their calendar apps directly from the offcanvas panel.
- Supports Google Calendar, Apple Calendar, Microsoft 365, Outlook, and Yahoo
- ICS file download for any calendar app
- Series download — download an entire recurring series as a single ICS file with RRULE
- Per-occurrence support — saves the specific occurrence the visitor is viewing
- Configurable button label and calendar service selection in Settings
Schema.org JSON-LD Structured Data
Automatic application/ld+json markup on single event pages for Google rich results.
- Event name, dates with timezone offsets, status, description, image, location, and organiser
- Schema settings tab — master toggle, global default organiser (name, URL, type), and global default location with structured address fields (venue, street, city, state, postal code, country)
- Per-event overrides — organiser and location fields per event, falling back to global defaults when empty
- Structured address fields — when schema is enabled, the single address textarea is replaced with structured sub-fields in both Save to Calendar and Event Schema tabs, with bidirectional sync
- previousStartDate support — automatically included when an occurrence has been rescheduled
- Extensibility hooks —
lre_schema_event_data, lre_schema_enabled, lre_schema_location_data
Event Status & Display Labels
Set event status and custom display labels at the event level or per occurrence.
- Event Status — Scheduled, Cancelled, Postponed, or Rescheduled. Auto-detects cancelled and rescheduled occurrences from existing flags. Maps directly to schema.org
eventStatus values.
- Display Label — freeform text label per event or per occurrence for frontend badges (e.g., "Sold Out", "Almost Full", "Free Entry")
- Event Schema tab in the meta box — houses status and label fields alongside schema settings
- Dynamic tags —
{lre_event_status} (machine-readable key), {lre_event_status_label} (translated label), {lre_event_label} (custom display label) for Bricks; equivalent Elementor dynamic tag with dropdown
- Shortcodes —
[lre_status] and [lre_label]
- FullCalendar integration — status and label available in calendar event data for calendar-level awareness
- Extensibility hooks —
lre_event_statuses, lre_resolved_event_status, lre_resolved_event_label
Countdown / Relative Time
Contextual time labels like "Today at 2:00 pm", "Tomorrow at 9:00 am", "Starting in 45 minutes", or "This Wednesday at 7:00 pm".
- Three display modes — Smart Label, Countdown Units, and Compact Badge
- Bricks Builder element — full settings panel with display mode, relative threshold, unit label styles, live ticker toggle, text overrides, and status-based colour controls
- Bricks dynamic tag —
{lre_countdown} with arguments: {lre_countdown:3} (custom threshold), {lre_countdown:badge}, {lre_countdown:units}
- Elementor widget — full widget with Content and Style tabs
- Shortcode —
[lre_countdown] with attributes for mode, threshold, show_time, labels, and more
- Live JavaScript ticker — optional real-time countdown that ticks every second, loaded conditionally only when needed
- "Happening now" detection — uses event start and end times to determine if an event is currently in progress
- Translated labels — live ticker displays labels in the site's configured language
Native Events Mode
Use Lista Recurring Events without any custom field plugin — no ACF, Meta Box, JetEngine, or ACPT required.
- Built-in Events post type with all date, time, location, and meeting URL fields pre-configured
- Mode selection — choose between Native (built-in post type) or Integration (your own post types with custom field plugins)
- Setup wizard — guided setup on first activation to choose mode, configure fields, and preview the calendar
Occurrence Change Notifications & Activity Log
A foundation for keeping event attendees informed when occurrences change.
- WordPress action hooks for developers and addons —
lre_occurrence_changed, lre_occurrence_cancelled, lre_occurrence_restored, lre_occurrence_rescheduled, lre_occurrence_changes_complete (batch), and lre_occurrences_regenerated
- Activity log database table — stores change history per event with automatic trimming at 200 entries
- Smart change detection — diffs previous state against new values, only logging genuine changes
- Notification suppression during regeneration — individual hooks are suppressed during bulk regeneration to prevent spam, while the bulk hook still fires
Other New Features
- Multi-day event support — configure an end date field so events render across multiple calendar days, with proper time display in week and day views
- Category colours — assign colours to taxonomy terms with automatic contrast text calculation; events inherit their category's colour
- Per-event colour override — override category colour for specific events (priority: event > category > theme default)
- Offcanvas panel customisation — configurable display fields with drag-and-drop ordering, position (left/right), width (300–600px), background colour with dark mode support, and custom "View Event" button text
- Offcanvas end time display — shows full time range (e.g., "7:00 am – 8:00 pm") when an end time field is configured
- Multiple ordinal selection for monthly recurrence — select multiple week ordinals (e.g., "1st and 3rd Tuesday") without creating separate events
- Event scope control — the Bricks query loop "Hide past events" checkbox has been replaced with an "Event scope" dropdown: Upcoming events only, All events, or Past events only (ideal for meeting minutes or event history archives)
- Redesigned calendar month grid — events display with a clean left border accent, time shown above the title, recurring icon, and multi-day events as coloured pills spanning across days
- URL parameters documentation — the Calendar settings tab now includes a reference for linking to specific occurrences, views, or filtered results
Improved
- Bricks query loop performance — loops now intelligently choose between database queries (for date/taxonomy filters) and the calculator (for search/meta queries), with automatic fallback for non-migrated events
- Time format consistency — end time dynamic tags, override field time tags, offcanvas panel times, and FullCalendar grid/list views all now use
wp_date() for consistent formatting across all locales and time format settings
- Input sanitisation — comprehensive
wp_unslash() handling added across all settings, AJAX handlers, filter parameters, pagination, shortcodes, and REST endpoints for consistent WordPress coding standards compliance
- Plugin updater security — nonce verification for CSRF protection and
wp_safe_redirect for safer navigation
- Debug logging — all debug output now routes exclusively through the built-in DebugLogger system, keeping production logs clean
- Translation template — fully regenerated POT file with 1,757 translatable strings covering all new features
- Filter element styling — modernised Active Filters with pill/chip design, improved touch targets, better typography, and responsive mobile styles
- Edge case handling — improved reliability when processing events with missing data, corrupted overrides, or invalid date formats
Fixed
- Mini Calendar and FullCalendar not displaying in Bricks Builder editor — JavaScript-dependent components now render server-side previews in the editor context
- Time tags showing midnight instead of actual event time — fixed weekly recurrence cloning midnight from the calculation base instead of preserving the event's configured time
- Override time fields displaying raw database format — now properly formatted using the configured time format
- Time format arguments truncated in Bricks dynamic tags — tags like
{lre_next_time:g:i a} were incorrectly split, only using the first character of the format
- {lre_field:field_name} showing raw HTML for WYSIWYG fields — field type detection now checks all available fields
- {lre_next_date} showing furthest occurrence instead of next upcoming — now correct regardless of primary sort order
- Fatal error with multiple week ordinals in monthly recurrence — correctly iterates through all selected ordinals
- Override time pickers ignoring 24-hour format — now respects the configured time format
- Calendar and offcanvas dates not respecting WordPress language — now uses the WordPress locale for all date formatting
- Same-day events not sorted by time — events on the same day now sort by start time
- "Occurrences per event" setting ignored — Bricks query loop now correctly limits occurrences
- "Entire Series" download greyed out — fixed for events using "After X occurrences" end type
- Excluded dates summary not updating immediately — now updates without needing to save the post first
- Offcanvas featured image override — now properly checks all configured image fields
- Native Mode issues — metabox, admin columns, and settings save corrected
- Reset Filters button visibility — "Hide when no filters active" now works correctly
- Post type admin columns missing — added fallback when database option was corrupted
- Countdown respects unchecked unit options — toggling unit visibility now works as expected
- Stale cached occurrences — version-based transient cache flush on plugin update clears incorrect cached data automatically
Security
- Advanced settings actions (mode switching, data reset) require administrator capability and confirmation
- SVG sanitisation for uploaded custom icons (removes scripts, event handlers, and dangerous elements)
- Nonce verification on plugin updater actions
For Developers
New hooks and extensibility points in this release:
Occurrence lifecycle: lre_occurrence_changed, lre_occurrence_cancelled, lre_occurrence_restored, lre_occurrence_rescheduled, lre_occurrence_changes_complete, lre_occurrences_regenerated
Schema: lre_schema_event_data (filter complete schema array — addons can add offers or performer), lre_schema_enabled (conditionally disable per post), lre_schema_location_data
Event status: lre_event_statuses (add/modify predefined statuses), lre_resolved_event_status (override per occurrence), lre_resolved_event_label (override per occurrence — e.g., from ticketing addon capacity data)
Major performance improvements with intelligent caching and optimized queries.
Significant speed improvements for calendar rendering.
Response Caching
Calendar API responses now cached for 5 minutes:
- Instant loading on repeat visits
- Auto-invalidation when events change
- Reduced server load
Optimized Queries
- Events filtered at database level (not PHP)
- Batch meta loading eliminates N+1 queries
- Request-scoped caching for repeated lookups
Faster Rendering
- Calendar structure appears instantly
- Events load in the background
- Scripts use
defer to avoid blocking
For Developers
EventsEndpoint::clear_cache() for programmatic cache clearing
lre_calendar_cache_cleared action hook
Move individual occurrences to different dates without changing the pattern.
Need to move a single occurrence without affecting the rest? Now you can.
Reschedule Any Occurrence
- Toggle "Reschedule this occurrence" in the Overrides panel
- Pick a new date with the date picker
- The original date is excluded, new date is added
- Works alongside field overrides
Reschedule Notes
Add an explanation when rescheduling:
- Notes appear in calendar offcanvas
- Display with
[lre_reschedule_note] shortcode
- Or use
{lre_reschedule_note} dynamic tag
Meta Box Support
Full integration with Meta Box custom fields plugin.
Locale-Aware Dates
All dates now respect your WordPress language settings:
- Translated month names (December → Dezember)
- Translated weekday names (Monday → Lunes)
- Proper timezone handling
Full ACPT support with auto-detection and improved time picker UX.
Enhanced field plugin support and a better time selection experience.
ACPT Integration
Full support for Advanced Custom Post Types:
- Auto-detection of ACPT meta boxes
- No manual configuration needed
- Works with all ACPT field types
Flatpickr Time Picker
Time override fields now use Flatpickr:
- User-friendly 12-hour format (e.g., "2:30 PM")
- 5-minute increments for quick selection
- Consistent styling with date pickers
Bug Fixes
- Fixed calendar dots opening wrong event
- Fixed override values not showing in offcanvas
- Fixed dashicons not rendering in metabox
- Fixed time field handling for hyphenated names
- Stale override fields now auto-removed when plugins deactivated
Improved UX
Override fields are now disabled until you select an occurrence date first — preventing confusion about which date you're editing.
New hooks for developers to extend Lista Recurring Events.
A developer-focused release introducing hooks for third-party add-ons.
Available Hooks
Extend the plugin without modifying core code:
lre_init — Fire after core initialization
lre_settings_tabs_nav — Add custom settings tabs
lre_settings_tab_content — Render custom tab content
lre_metabox_tabs_nav — Add custom metabox tabs
lre_metabox_tabs_panels — Render custom metabox panels
lre_after_save_recurrence — Fire after settings saved
Future Integrations
This system is designed to support upcoming ticketing integrations with FluentCart, SureCart, and WooCommerce.
New Pickr color picker with auto-contrast text colors.
A better color picking experience for calendar customization.
Pickr Color Picker
Replaced the WordPress color picker with Pickr for:
- Better popup positioning
- Consistent styling across browsers
- Smoother interaction
Auto-Contrast Text
Text colors now automatically adjust for readability:
- Light backgrounds get dark text
- Dark backgrounds get light text
- No more unreadable event labels
Bug Fixes
- Fixed JetEngine field detection
- Fixed calendar time display for daily recurrence
- Fixed Manage Exclusions modal issues
- Fixed color picker popup appearing 400px offset
Schedule events on the last occurrence of a weekday each month.
New monthly recurrence option for scheduling events on the last weekday of each month.
Example Uses
- "Last Friday of every month" team meetings
- End-of-month reporting deadlines
- Monthly book club on the last Saturday
The plugin automatically handles months with 4 or 5 weeks.