Appearance
Past Events
Past Events lets an event site list the events that have already happened, from the most recent back to the oldest, with each card showing the date the event last took place.
Overview
Voxel's date presets all look forward from today: Upcoming, Today, This weekend and so on. There is no preset for events that are over, and a custom date range ending today doesn't do the job either, because a recurring event still matches it as long as one of its dates falls in the range, even if it has more dates to come.
Voxel's date tags have the same blind spot. A card that shows @post(recurring-date.upcoming.start) goes blank once an event is over, because the event has no upcoming dates left.
Past Events fixes both.
Key Features
- A Past preset on the Recurring Date filter that matches only events whose every date has ended
- Past events always listed from most recent to oldest
- Voxel's own Upcoming tags keep showing a date once an event is over, so existing cards work unchanged
- An Upcoming or last date tag that shows the next date, or the last one once the event is over
- A Has ended? tag for "Ended" labels and visibility rules
- Works with one-off events, recurring events and events with several dates
Setup Instructions
- Go to Voxel Toolkit → Functions and enable Past Events
- Edit your past events page in Elementor and select the Search Form (VX) widget
- Open the Recurring Date filter's settings, set Default value to Preset, and choose Past as the Default preset
- Check your card template: tags like
@post(recurring-date.upcoming.start)and.endalready show the last date on past events
To let visitors switch between upcoming and past events instead, add Past to the filter's Presets list alongside Upcoming.
Linking straight to past events
The preset also works in the address bar. Link to your archive with ?recurring-date=past added to the URL, using your filter's key if it isn't recurring-date.
How "Past" Works
An event matches Past once every one of its dates has ended:
| Event | Matches Past? |
|---|---|
| One-off event that ended yesterday | Yes |
| Weekly event whose repeats ended last month | Yes |
| Weekly event still repeating | No, it has dates to come |
| Event with two dates, one past and one upcoming | No, its second date is still to come |
| Event happening right now | No, it hasn't ended yet |
Results are always ordered from the most recent past event to the oldest, measured by each event's last date. A weekly series that ended in February sorts by its final February date, not by the day it started. This order applies whatever sort the feed or search form uses.
Show the Last Date on Cards
Voxel's Upcoming Tags
Once an event is over, Voxel's Upcoming list falls back to the event's last date. Cards that already use these tags keep working on a past-events page with no changes:
| Tag | Displays on a past event |
|---|---|
@post(recurring-date.upcoming.start) | Start of the event's last date |
@post(recurring-date.upcoming.end) | End of the event's last date |
Upcoming events are unaffected; they still show their next date.
This is controlled by Show the last date in Upcoming tags once an event is over in Voxel Toolkit → Functions → Past Events settings, and is on by default. Turn it off if a visibility rule relies on Upcoming being empty to spot past events, or switch that rule to Has ended? below.
Upcoming or Last Date and Has Ended?
Past Events also adds two properties to every Recurring Date field's dynamic tag:
| Tag | Displays |
|---|---|
@post(recurring-date.upcoming_or_last.start) | Start of the next date, or of the last date once the event is over |
@post(recurring-date.upcoming_or_last.end) | End of the next date, or of the last date once the event is over |
@post(recurring-date.upcoming_or_last.is_multiday) | Whether that date spans more than one day |
@post(recurring-date.upcoming_or_last.is_allday) | Whether that date is all-day |
@post(recurring-date.has_ended) | Whether every date of the event is over |
Upcoming or last date always behaves this way, whether or not the Upcoming setting above is on. Upcoming events still show their next date, so one card template can serve both upcoming and past listings.
Use your actual field key
Replace recurring-date with your recurring date field's real key if it differs. A mismatched key outputs nothing.
Use Has ended? in a visibility rule to show an "Ended" badge on past events only.
Troubleshooting
Past Isn't in the Preset List
Past Events must be enabled in Voxel Toolkit → Functions. Reload the Elementor editor after enabling it.
The Page Shows Upcoming Events Instead
If Recurring Events — Multiple Instances is also enabled, it sets the Recurring Date filter to Upcoming whenever the page URL doesn't already carry a value, which overrides a default preset of Past. Link to the page with ?recurring-date=past in the URL.
Past Events Show No Date
Check that Show the last date in Upcoming tags once an event is over is on in the Past Events settings, or switch the card to @post(recurring-date.upcoming_or_last.start) and .end, which work either way.
An "Ended" Rule Stopped Working
A visibility rule that checks whether Upcoming is empty no longer matches, because Upcoming now holds the last date on past events. Switch the rule to @post(recurring-date.has_ended), or turn off the Upcoming setting.
An Event Is Missing From Past
The event still has a date that hasn't ended. A recurring event only counts as past after its last repeat, and an event with several dates only after the latest one.
Requirements
- Voxel theme
- A post type with a Recurring Date field and a Recurring Date filter on its search form
- Elementor

