Lista Recurring Events Changelog

The latest updates and improvements

Version 1.5.0 — Major Upgrade #

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 hookslre_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 hookslre_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)