New 'Hide in-progress events' setting across all upcoming queries, plus a fix that recomputes each occurrence's end date from the event's original duration.
Version 1.7.6 adds a new global query setting for handling today's in-progress events, automatically rebuilds per-occurrence end dates for existing repeating events, and tightens up a few "Next occurrence(s)" element edge cases.
Hide In-Progress Events
By default, an event running right now (say, from 10:00 AM to 11:00 AM) still shows up in upcoming-events lists until it finishes. A new global setting changes that behaviour when you want it to.
Find it under Recurring Events → Settings → Query Behaviour → Treat in-progress events as past:
- Off (default) — In-progress events stay visible in upcoming lists until their end time has passed.
- On — Events disappear from upcoming lists the moment their start time passes today.
Either way, events that have already ended today are always excluded from upcoming queries — that part doesn't change.
Per-Instance Overrides
Every Bricks query loop, Elementor loop widget, and most filter elements now expose a Hide In-Progress Events dropdown so you can override the global setting per instance:
- Use Global — Follow the site-wide setting
- Hide once started — Remove the event as soon as its start time passes
- Show until ended — Keep the event visible while it's running
The [lre_events] shortcode and lre_get_events() public API also accept a hide_in_progress argument with values default, hide, or show:
[lre_events hide_in_progress="hide"]
The site calendar is unaffected — it continues to display all events in the visible date range, regardless of this setting.
Per-Occurrence End Dates
Repeating events now compute the end date for each occurrence from the event's original duration, instead of reusing the original event's end date across every occurrence.
The old behaviour caused two visible issues:
- Single-day repeating events (start date = end date) — Occurrences after the first appeared to span multiple days, because the end date was anchored to the original event while the start date advanced.
- Multi-day repeating events (e.g., a 3-day workshop repeating weekly) — Every occurrence appeared to end on the original event's end date instead of advancing alongside its start.
End dates are now computed correctly: same-day events get end = start, multi-day events get end = start + duration.
:::tip
On upgrade, all existing events have their stored occurrences automatically rebuilt the first time an administrator opens the WordPress admin. No manual action needed.
:::
Fixes
- Today's events that have already ended no longer appear in upcoming events queries — Previously, an event scheduled for earlier today (for example 8:30 AM – 9:00 AM) would remain in upcoming events lists until midnight. Upcoming queries now check the end time of same-day events and exclude any that have already finished. Affects Bricks query loops, Elementor loops (both the Pro loop grid integration and the LRE Events Loop widget), the
[lre_events] shortcode, the lre_get_events() public API, and frontend AJAX filtering.
- "Next occurrence(s)" element now correctly shows only the requested number of dates — When "Exclude current occurrence" was enabled, opening an event from a context that didn't include an occurrence parameter in the URL (a homepage event card, the main calendar, etc.) caused the element to display one more date than configured. The element now always respects the configured limit.
- "Next occurrence(s)" element now shows occurrences after the one being viewed — Previously, viewing a specific occurrence could display occurrences that came before the one currently being viewed. It now consistently shows occurrences that follow the viewed one.
- Today's date on the calendar remains readable when hovered — Hovering over the current date in the month grid was changing the date number to the same colour as its highlight circle, making the number disappear. Today's date now keeps its contrast colour on hover in both the month grid and multi-month views.
Visible focus rings, screen reader labels, pressed-state announcements, and translated calendar navigation.
Version 1.7.5 is a focused accessibility pass over the filter system, calendar navigation, and Elementor pagination — making the plugin friendlier to keyboard and screen reader users without changing the visual design.
Filter Accessibility
- Filter buttons and pills now show a clear focus ring when navigated by keyboard — Tabbing through filter controls displays a visible focus indicator on each button or pill, making the active position obvious for keyboard users. Mouse interactions are unaffected.
- Filter inputs are now properly labelled for screen readers — Visible filter labels are programmatically associated with their fields, so assistive technology announces them together. When the visible label is hidden via element settings, an accessible label is still provided behind the scenes.
- Filter button and pill toggles now announce their pressed/unpressed state — Active filters are reported as "pressed" by assistive technology, matching the visible highlighted state.
- Search button now announces its purpose when used in icon-only mode — Buttons configured with only an icon (no visible text) include a hidden "Search" label for screen reader users.
Calendar & Pagination
- Calendar navigation buttons (previous month, next month, switch view) now respect the site's translation files instead of always being announced in English to screen reader users.
- Elementor events loop pagination is now wrapped in a navigation landmark with a proper "current page" indication and per-page accessible labels (for example "Page 2"), making it easier to navigate with assistive technology.
Under the Hood
- Cleaned up redundant CSS rules on filter and pagination wrapper elements. No visual change.
Event Occurrences times no longer shift by the WordPress timezone offset on non-UTC sites.
Version 1.7.4 follows up 1.7.3 with another time-handling fix for the Event Occurrences element, this time affecting sites running on non-UTC timezones.
Fixes
- Event Occurrences element times are no longer shifted by the WordPress timezone offset — On sites with a non-UTC WordPress timezone, the start and end times rendered in each occurrence row could appear shifted forward by the timezone's UTC offset (for example, 17:00–19:00 displaying as 19:00–21:00 in the Europe/Oslo timezone during summer). The element now parses stored times explicitly in the configured WordPress timezone before formatting, so the rendered values match the times set in the event metabox regardless of the server's timezone.
Event Occurrences element now resolves the correct start and end time for every row.
Version 1.7.3 fixes a long-standing issue with the Event Occurrences element where every occurrence row reused the same default times, regardless of per-weekday schedules or per-occurrence overrides.
Fixes
- Event Occurrences element now shows the correct time for each occurrence — The element was reading the event's default start and end times once and reusing those values for every row in the list, so per-weekday time schedules, per-occurrence time overrides, and rescheduled occurrence times were not reflected. Each occurrence now resolves its own start and end time from the stored occurrence data, with a fallback to the configured field's per-date override and the event-level default.
Most visible in Native Mode where weekday-specific times and per-occurrence overrides are commonly used.
Four new calendar views, responsive view switching, view switcher dropdown, URL parameters for deep-linking, and per-weekday time schedules.
Version 1.7.2 expands the calendar from a single Month Grid view into a full five-view experience, adds per-breakpoint view switching, exposes URL parameters for deep-linking, and lets weekly events run at different times on different days — all without needing per-occurrence overrides.
Four New Calendar Views
The Month Grid view is no longer alone. Four new views join it, each tuned to a different reading style:
- List (Week) — Day-grouped event listing with week navigation, showing event details in a clean agenda format.
- List (Month) — Day-grouped event listing spanning a full month with month navigation.
- Time Grid (Week) — Weekly time axis with hourly slots and positioned event blocks, including a now indicator.
- Multi-Month (Year) — Compact year-at-a-glance overview with 12 mini month grids and dot indicators for days with events.
Set the initial view via the view shortcode attribute or the Bricks element's Default View control:
[lre_calendar view="listWeek"]
[lre_calendar view="timeGridWeek"]
[lre_calendar view="multiMonthYear"]
Responsive View Switching
Different breakpoints, different views. Configure separate views for tablet and mobile while keeping the desktop view for larger screens:
[lre_calendar view="dayGridMonth" tablet_view="listWeek" mobile_view="listMonth"]
Defaults can be set site-wide under Calendar Settings → Default View / Tablet View / Mobile View, and overridden per-shortcode or per-element as needed. The Bricks calendar element exposes Tablet View and Mobile View dropdowns in its Calendar View panel group.
View Switcher Dropdown
Add an icon-triggered dropdown menu inside the navigation pill that lets visitors switch between views on the fly — no separate UI needed:
[lre_calendar view_switcher="dayGridMonth,listWeek,multiMonthYear"]
In the Bricks calendar element, this is a multi-select control.
URL Parameters
The calendar now reads several URL parameters, making it easy to deep-link from emails, newsletters, or filtered archive pages:
lre_start — Navigate the calendar to a specific date (alias for lre_date).
lre_view — Set the initial calendar view from the URL (e.g. ?lre_view=listWeek).
lre_event — Auto-open a specific event's details on page load (e.g. ?lre_event=123&lre_date=2026-06-01).
- URL taxonomy filtering — Filter events by taxonomy term via URL using the taxonomy slug as the parameter name (e.g.
?event_type=workshop).
These compose freely, so links like ?lre_view=listMonth&lre_date=2026-06&event_category=yoga work as expected.
Per-Weekday Time Schedules
Events repeating on multiple days can now have different start and end times for each day — without per-occurrence overrides.
A class running Tuesday, Thursday, and Saturday can be set to 5:30 PM on the weekdays and 10:00 AM on Saturday, all from a single event. Enable Different times per day beneath the weekday checkboxes in the Recurrence settings, and a time-picker row appears for each selected day.
Works with both Weekly and Monthly (specific weekday) recurrence patterns. Per-occurrence overrides still take priority when explicitly set.
Calendar Polish
- Navigation loading overlay — A spinner overlay covers the calendar grid during view transitions and stays visible until all events are fully rendered.
- Bricks editor preview for list views — List (Week) and List (Month) views now render server-side previews with real event data in the Bricks editor.
- Today button on the mini calendar — Returns to today's month with a single click.
Improvements
- Custom header spacing between the title and navigation pill.
- Calendar settings shortcode reference updated with new view and responsive parameter examples.
Fixes
- CSS selectors for list views now correctly target FullCalendar's view container.
- Bricks calendar element now renders at full width.
- Navigation spinner no longer gets stuck when navigating to a date range with no events.
- Time Grid (Week) view now displays event time and title correctly.
- Filter dropdowns now meet WCAG 4.1.2 —
role="listbox" moved to the direct parent of role="option" elements in taxonomy, event type, and date filter components.
- Multiselect filter checkboxes now generate unique IDs per element instance, resolving duplicate ID violations when multiple filters appear on the same page.
Fixes Save to Calendar dropdown behaviour inside Bricks popups.
Version 1.7.1 is a small follow-up to 1.7.0 that resolves two issues with the Save to Calendar button when used inside Bricks popups.
Fixes
- Save to Calendar button now works inside Bricks popups — The dropdown was not functional inside AJAX-loaded Bricks popups because the button click handlers were never bound after the popup content was injected. The script now reinitialises on popup load, and the dropdown is no longer clipped by the popup's scroll container.
- Save to Calendar dropdown no longer creates empty space inside Bricks popups — The hidden dropdown menu was reserving layout space beneath the button, showing as a visible gap. The dropdown is now fully hidden until clicked when inside a Bricks popup.
Drag-and-drop Bricks calendar element with full editor preview, per-occurrence time overrides, Bricks popup support, infinite scroll, taxonomy filtering for the events shortcode, and a collection of calendar UX improvements.
Version 1.7.0 brings the calendar into Bricks Builder as a native drag-and-drop element, adds per-occurrence time overrides, and introduces popup support for event clicks — plus a range of UX improvements across the calendar and shortcodes.
Native Bricks Builder Calendar Element
The calendar is now available as a drag-and-drop Bricks element ("LRE Calendar" in the LRE Elements category) alongside the existing shortcode. All shortcode options are exposed as visual panel controls across six groups: Data Source, Calendar View, Appearance, Behaviour, Header Filter, and Advanced.
- Full editor preview — The Bricks editor renders a complete server-side calendar preview with real event data, so you can configure and style the calendar without switching to the frontend.
- Infinite scroll and load more — LRE query loops now work with Bricks Builder's built-in infinite scroll toggle and load more button interactions.
- AJAX lifecycle support — Calendars inside Bricks popups, AJAX-paginated containers, or dynamically loaded query results now initialise correctly.
Bricks Popup Support
A new "Bricks Popup" event click action opens a Bricks popup template with the clicked event's post as context, so dynamic data tags in the popup resolve against that specific event. Available in both the [lre_calendar] shortcode (event_display="popup" popup_id="1234") and the Bricks element. The plugin automatically injects the popup template into Bricks' active templates.
Per-Occurrence Time Overrides
Override rows now include dedicated Start Time and End Time inputs, allowing you to change the time of a specific occurrence without affecting the rest of the series. The new inputs appear automatically when a time field is configured.
- Combined date/time field support — Fields that store both date and time together (such as Meta Box
datetime or ACF Date Time Picker) now render with both a date picker and time picker in the override UI, instead of a date-only picker.
Taxonomy Filtering for [lre_events]
Use any registered event taxonomy name as an attribute to filter the events list, e.g. [lre_events event_category="workshops,fitness"]. Previously, the [lre_events] shortcode could only display all events without taxonomy-based filtering.
Calendar UX Improvements
- Today button — The calendar header includes a "Today" button for quick return to the current month. On the mini calendar, a dot button appears between the navigation arrows when viewing a different month.
- Single-event day shortcut on mobile — Tapping a day with exactly one event goes directly to the event page instead of showing a list of one item.
- Location in list view — Venue name or virtual label appears beneath the event title in all list views when "Display location" is enabled.
- Virtual event labels — Virtual events now display "Join us online via Zoom" (or whichever platform is configured) instead of the raw calendar label.
- "Show all" for Event Occurrences — Setting "Number of Dates" to 0 in the Event Occurrences element now displays all upcoming occurrences.
- Event category colour dynamic tag — Use
{lre_event_color} in Bricks or [lre_event_color] as a shortcode to output the hex colour assigned to an event. Also available as an Elementor dynamic tag.
Category Colour Improvements
- All colour entries removable — All colour entries can now be removed in settings (previously the first five were locked). New installs start with a single default entry.
- Colours stored by name — Event category colours are now stored by name rather than hex value, so changing a category's colour is reflected everywhere without re-saving individual events. Existing events with a category colour assigned will need to be re-saved once to restore the correct selection in the editor.
Changes
- Date and time fields removed from the Overrides settings list — Start date, end date, start time, and end time fields are now managed by dedicated controls in the override row (Reschedule for dates, time pickers for times), preventing duplicate inputs.
Fixes
- Field names with uppercase letters no longer get silently lowercased — Custom field names containing mixed case (e.g.
event_end_Date in Meta Box) are now saved exactly as entered.
- "Show Time" toggle now works in the Event Occurrences element — Times now display correctly using the configured start and end time field mappings.
- End Date and End Time field mappings no longer disappear after saving calendar settings — Saving options on the Calendar tab no longer silently clears the field mappings configured in General settings.
- Changing a category colour no longer breaks calendar events — Events now store the category name rather than the raw hex value, so colour changes are reflected everywhere without touching individual events.
- Custom classes on offcanvas buttons now apply correctly — Only LRE's own button styles are now reset, leaving the cascade intact for custom classes.
- Non-recurring events not appearing in Bricks query loops — LRE's save hook now runs at a later priority to ensure all custom field data is available before storing occurrences.
- [lre_events] shortcode no longer causes a critical error — The shortcode now correctly accesses the public properties on the OccurrenceItem class.
- Mini calendar no longer shows pointer cursor on non-linked occurrence days — Interactive styling only applies when linking is enabled.
Fixes calendar list view event clicks and offcanvas hover prefetching, plus dynamic tag support for Bricks taxonomy filters.
Version 1.6.1 fixes two interaction bugs in the calendar and adds dynamic tag support for Bricks query loop taxonomy filters.
Fixes
- Calendar list view events are now clickable — Clicking an event in the day list view now navigates to the event's single template page. Previously, clicks had no effect because FullCalendar's internal click handling was not firing in list view.
- Offcanvas hover prefetch now works — Event detail prefetching on hover was never triggering due to an incorrect config key reference. Hovering over events in month grid view now preloads their details for faster offcanvas display.
Bricks Dynamic Tags in Taxonomy Filters
The Terms field in the Bricks query loop taxonomy filter now accepts Bricks dynamic tags such as {post_terms_lre_event_type}. Dynamic tag output is automatically resolved to term slugs, so both term names and slugs work correctly. This is useful for building archive templates where the displayed events should match the current term context.
Comprehensive filter hooks across all query and output paths, global post exclusion, per-post access flags, and a centralised AccessControl utility.
Version 1.6.0 opens up every event query path to addons. Previously, only the calendar endpoint had filter hooks — now Bricks query loops, shortcodes, AJAX filtering, the public PHP API, and the stored occurrences layer all expose filters for modifying queries and results.
Extensibility Hooks
A full set of filter hooks across all query and output paths, giving addons fine-grained control over which events appear and how results are shaped.
- Bricks query loop filters —
lre_bricks_query_args for modifying WP_Query arguments and lre_bricks_occurrence_results for modifying occurrence results before pagination.
- Stored occurrences query filters —
lre_occurrence_store_query_args, lre_occurrence_store_query_where, and lre_occurrence_store_query_results for fine-grained control over database-backed occurrence queries.
- AJAX filter query hook —
lre_filter_query_args for modifying the query when users apply frontend filters.
- Public API filters —
lre_get_events_args and lre_get_events_results for modifying the public lre_get_events() function's input and output.
- Shortcode output filter —
lre_shortcode_output allows addons to modify or wrap the output of any LRE shortcode.
Global Post Exclusion
New lre_excluded_post_ids filter lets addons exclude posts from all event query paths with a single hook. Results are cached per request for zero performance impact — addons no longer need to hook into each query path individually.
Per-Post Access Flags
New lre_post_access_flags filter provides a standardised way for addons to attach access metadata (e.g., members-only status, required tiers) to individual posts. This gives frontend templates a consistent data shape for rendering access indicators like lock icons or membership badges.
AccessControl Utility
New centralised AccessControl helper class for merging excluded post IDs into both WP_Query and OccurrenceStore query arguments. Addons can use it to apply exclusions consistently without duplicating the merge logic.
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.