July 13, 2026
1.3.24.0 - Add attendees manually and import Event Tickets
New
- Add an attendee by hand from the event’s Attendees tab. Creates a free, completed order with its own check-in code, for ticket transfers or competition winners, and it can never oversell your capacity.
- The Events Calendar importer now brings over Event Tickets ticket types (RSVP and Tickets Commerce) with their prices, capacity, sold seats, and sale windows. Attendee records and WooCommerce tickets are counted and reported, not imported.
- New Custom field value block binding: bind any block text to a single custom field’s bare value.
Fixes
- Calendar times in 12-hour mode now always show the am/pm suffix in every language, so a bare hour can no longer be mistaken for a count.
- Event images in the Query Loop now link to the event page itself for multi-day events, matching the title link, instead of one highlighted date.
July 13, 2026
1.3.23.2 - Theme compatibility and importer fixes
Fixes
- RSVP status buttons and other controls no longer lose their text or get repainted by page-builder button styles (like the Elementor global kit).
- The Events Calendar importer keeps each event’s original URL slug, so links to imported events keep working.
- A TEC event’s Website link no longer marks the imported event as online or hybrid; it is saved as an Event website custom field instead.
- The importer no longer creates a ticket priced in the wrong currency when the TEC event’s currency differs from your store currency.
- Imported events copy the Show time zone display setting from The Events Calendar.
July 9, 2026
1.3.23.1 – Email and ticket count fixes
Fixes
- Admin notification emails, such as the new ticket sale notification, now keep your formatting and paragraphs when you save the template.
- A ticket type's remaining count is now capped to the event's total remaining, so it can never show more available than the event has left.
- Event Query Loop: with Group same-day times enabled, the time and date fields now list every time frame for the day instead of only the first.
July 9, 2026
1.3.23.0 – Query Loop grouping, expired-event fixes and resizable terms
New
- Event Query Loop: a new Group same-day times option shows one row per event per day, listing every time frame together instead of repeating the same event on multiple rows.
Fixes
- Expired events can be edited again, and a new Republish action brings them back live. The Expired label is now translatable.
Improvements
- The terms and conditions box at checkout can now be dragged taller, so visitors on larger screens can read long terms without scrolling a small window.
July 8, 2026
1.3.22.0 – Editor, calendar and checkout fixes
Improvements
- Passed events now retire into a dedicated "Expired" state (redirected and hidden) instead of being drafted, so you can still see they were once published.
- Orders paid with delayed methods like SEPA, Bacs and ACH now finalize automatically.
- Each custom field group now renders in its own container so a whole group can be styled.
- The per-event confirmation message and terms-acceptance email tags are now listed in the email settings and still render in customized templates.
- The terms-acceptance email tag is now optional.
Fixes
- Pasting into the rich text editor now strips inline styles and stray formatting from Google Docs and Word, while keeping your headings, lists, links, and bold or italic text.
- The calendar list view no longer shows an empty grey image box for events that have no picture.
- Recurring event summaries now list the weekdays in calendar order.
- On mobile checkout, the terms and agreements now sit inside the scrollable area of the window, so long terms no longer cover the rest of the checkout.
- A few more strings are now translatable, including the "From" starting price and the calendar "Copy feed link".
- Empty custom taxonomy boxes are now hidden, and each ticket agreement gets a unique checkbox id.
July 6, 2026
1.3.21.0 – Price from attendance, passed-event management & custom field ordering
New
- A new "Price from" attendance option shows a starting price on the event page and links visitors to an external ticketing site.
- Passed events can be unpublished automatically after a grace period, with a 301 redirect from their old URLs to an address you choose.
- Assign your site's registered taxonomies (like Places or Activities) directly on the event form, without opening the WordPress editor.
- The event page tickets box now shows how many tickets are left, when the show-remaining setting is on.
- Add multiple agreement checkboxes at checkout (for example privacy, refund policy and other consents). Each one is recorded on the order and listed in the admin sale email.
- The admin sale-notification email now records the buyer's terms acceptance, with the exact terms text as it was at checkout.
- Custom fields can be reordered with a drag-and-drop dialog, and the order stays consistent across the settings, the event form and the front end.
- Add a per-event custom email message to ticket and RSVP confirmation emails, and expand recurring occurrences in the calendar block's List view with an optional toggle.
Improvements
- Custom field output now has targetable per-field and per-group CSS classes, and the label colon is translatable for French spacing.
- Event URL bases can include a nested path such as agenda/calendar; the slash is preserved instead of being stripped or turned into a dash.
- The event page ticket sales window has a CSS hook so it can be hidden with a snippet without affecting the checkout modal.
Fixes
- In the Divi builder, the Event module's "Current event" option can now be selected.
- The custom field type is now labelled "Grouped dropdown" consistently in the fields list.
- On narrow phones, the calendar toolbar wraps so the Subscribe button and the Month/Week/List switch never overflow.
- The calendar and list views no longer collapse to a narrow strip on flex-based classic themes such as Astra.
- The event template share icon follows the button's text colour.
- Icon-only buttons, like the ticket quantity steppers, stay intact under themes that reset button styling, such as Hello Elementor.
- Ticket agreement checkboxes always get a unique id, so two agreements can never share a checkbox at checkout.
- Passed-event auto-unpublish never touches an open-ended recurring series, and its redirect can reach off-site targets without bouncing to wp-admin.
June 25, 2026
1.3.19.0 – Calendar list view, mobile checkout & theme-friendly titles
New
- The calendar now has a List view in the Month/Week switcher, with search, and each event shows its calendar's colour and name.
- The block editor calendar preview now includes the List view, so the editor matches the front end.
Fixes
- The event title now follows your theme's H1 styling instead of the plugin's hardcoded size, weight and colour.
- Event images in the calendar list view are no longer stretched when they aren't 3:2; they are cropped to fit.
- On mobile, the ticket checkout shows the terms in a scrollable box and opens as a full-screen sheet, so the form fields and the checkout button stay reachable, and the location pin no longer shrinks.
- Broader translation coverage: more strings that were stitched together from fragments are now single translatable strings, and more counters use proper plural forms.
- Fixed a crash in the calendar block's editor preview, and the preview now loads events.
June 24, 2026
1.3.18.0 – Recurring reschedule, ticket controls & translation coverage
New
- Reschedule a single occurrence of a recurring event, overriding just that occurrence's date and time, including an all-day toggle for it.
- Location data is now split into separate fields (name, address, unit, city, state, country, postal code) across the Event Data block, Query Loop, bindings and Bricks tokens, so you can show just the city, just the address, and so on.
- Set a total ticket quantity cap per event, and require a Terms & Conditions checkbox before a ticket order or RSVP can be submitted.
- Each calendar now has a subscribable iCal feed visitors can add to their own calendar app.
- A single-package toggle for multi-day, selected-date events, so the whole set of dates can be treated as one package.
- A "has location" flag for page builders, so you can show or hide elements based on whether an event has a location.
Improvements
- Admin pages now have descriptive, per-screen titles in the browser tab.
- The Beaver Builder calendar module can now show multiple calendars, or all of them, at once.
- Much broader translation coverage: many admin and frontend strings that could not be translated before are now translatable, sentences that were stitched together from fragments were rewritten as whole strings, and counters use proper plural forms.
Fixes
- Headings inside the event description now follow your theme's heading styles instead of being flattened by the plugin's styles.
- "Upcoming" event lists keep events that are currently in progress by testing the end time, and a duplicate settings tab on the Query Loop block was removed.
- The Date with Summary field now lists every date of a multi-date event on the front end, matching the editor.
- The Events Calendar importer keeps the full date range for multi-day all-day events.
- RSVP summaries now resolve correctly for selected-date and package events instead of failing.
- Corrected package date ordering, the per-day purchase guard, and Beaver Builder legacy calendar selection.
June 19, 2026
1.3.17.3 – Translations, mobile dialogs & accented slugs
New
- The React interface now applies your Loco/.mo translations across the calendar, RSVP, share, tickets and the entire admin — the plugin is fully translatable, not just the PHP strings.
- Custom field groups now display stacked (one field per row) on the front, and URL fields use your theme's link color.
Improvements
- On mobile, the Get tickets, Checkout, RSVP and Share dialogs are now full-width sheets with a fixed header, a scrollable body and a fixed footer, so nothing is cut off and every control stays reachable.
Fixes
- Slugs generated from accented titles now fold to ASCII (é→e, ç→c, ß→ss) instead of replacing each accent with a dash, giving clean, SEO-friendly URLs.
June 18, 2026
1.3.17.2 – Calendar search refinements
Improvements
- Calendar search keeps focus while typing, no more dropping after the first letter.
- Recurring events now list their upcoming occurrences in search results.
- Search also finds events that have already taken place, sorted after upcoming ones.
- Search results scroll on their own without moving the page, and close on Escape or an outside click.
June 18, 2026
1.3.17.1 – SiteGround Optimizer compatibility
Fixes
- The calendar now renders correctly when SiteGround Optimizer's JavaScript minification is enabled (it was breaking the bundle and leaving the calendar blank for visitors).
June 18, 2026
1.3.17.0 – Calendar search across all months
Improvements
- Calendar search now finds events across all months, not just the month currently in view.
June 17, 2026
1.3.16.0 – Importer, calendar, and ticketing improvements
New
- Per-block date and time format controls on the Event Data block.
Improvements
- The Events Calendar importer now keeps ACF fields as ACF instead of converting them.
- Calendar search results pagination now has Previous and Next month controls.
- General settings are grouped into labelled sections.
- The WordPress editor link is always available so ACF, SEO, and other plugin panels can be reached.
Fixes
- Deleted recurring instances no longer appear on the calendar or event series list.
- Ticket orders paid directly with Stripe now store the buyer's entered name instead of the cardholder name.
- Multi-day all-day events from The Events Calendar now import as all-day spans.
June 15, 2026
1.3.15.0 – RSVP & checkout custom fields, ticket terms, calendar fixes
New
- Add custom fields to the RSVP form with the eventkoi_rsvp_fields filter (for example a first/last name split), validated and saved with each RSVP.
- Add custom fields to the ticket checkout form with the eventkoi_checkout_fields filter, saved with the order.
- Ticket terms and conditions now show in the purchase dialog and can be output with the [eventkoi data="tickets_terms_conditions"] shortcode.
Fixes
- Week view no longer drops events on weeks that span two months, and month navigation is faster.
- Selected-day event titles in the Event Query Loop now link to the parent event instead of a single day.
June 7, 2026
1.3.14.1 – Calendar & Query Loop front-end fixes
Fixes
- The frontend calendar no longer fails to render (which could drop recurring instances on some weeks) on hosts where a JavaScript optimizer alters the React runtime.
- The Event Query Loop block now keeps its Wide and Full width alignment on the front end.
- Virtual event locations in the Event Query Loop now render as a clickable link using the configured link text instead of a bare URL.
June 4, 2026
1.3.14.0 – Security fix, TEC importer improvements & calendar conflict fixes
Security
- Event REST endpoints now restrict draft, pending, and private events to users who can edit them, preventing unauthenticated access to unpublished event data (CVE-2026-10029).
Improvements
- TEC importer now resolves ACF file, image, and gallery fields to their file URLs, groups repeater rows into readable fields, and skips SEO and analytics plugin meta (Rank Math, AIOSEO, Jetpack, and similar) so only real event content is imported.
- The "See all events in series" back-link can now be shown or hidden per event, overriding the global setting.
- Admin events list now supports server-side sorting by title, start date, and modified date.
- Recurring event rules now default to sorting by their start date.
Fixes
- Resolved TEC importer edge cases for multi-day events, recurring series, and imported category colors.
- Fixed Beaver Builder conflicts: theme-proof calendar toolbar visibility, px-based sizing so the calendar no longer shrinks under small-root-font themes, conditional submission styles, and assets shipped in the package.
- Editing an event no longer resets its slug, map coordinates are preserved, and the SEO editor link is gated correctly.
May 31, 2026
1.3.13.0 – Frontend event submissions, grouped custom fields & calendar polish
New
- Frontend Event Submission — let visitors submit events from the front end via a block or the [eventkoi_event_submission] shortcode. Includes optional moderation (pending review or auto-publish), a theme-aware form with custom date/time picker, rich-text description, featured image upload, RSVP and recurring options, calendar assignment, honeypot spam protection, and edit-your-own-submission support.
- Grouped Dropdown custom field — structured multi-column custom fields (e.g. venue name / address / country) with a redesigned drag-to-reorder table editor.
Improvements
- Calendar search now scopes results by month with clearer previous/next month controls.
- Week view — multi-day events now show their time range and a “Full day” label on spanning days.
- Event Data block now supports full typography controls (font size, line height, weight, letter spacing, transform).
- Video and YouTube toolbar buttons in the description editor now have icons and are grouped with the image button.
- More calendar and event labels are now translatable.
Fixes
- Dates not rendering on continuous (multi-day) standard events.
- Recurring rule ordering and edit stability.
- Custom date/time format now applies consistently across event display.
- Stripe keys and license are now preserved across plugin uninstall.
- Ticket price now preserves cents in display.
May 24, 2026
1.3.12.1 – WordPress 7.0 compatibility
Compatibility
- Tested against WordPress 7.0 — admin Settings, calendar, event editor and frontend all verified.
May 21, 2026
1.3.12.0 – Google-style week view, unified recurrence engine & dozens of fixes
New
- Settings → Overview: toggle to disable the "See all events in this series" backlink injected on recurring instance pages.
- REST API now supports custom orderby on /wp/v2/eventkoi_event: start_date, event_start, upcoming, past — for use in core Query Loop blocks and headless integrations.
- Empty Trash button on the Events list.
Improvements
- Week view: Google-style overlap cascade so stacked events stay readable instead of collapsing into "+more".
- Week view: sticky event title on multi-day continuation bars (title visible on every visible day, not just the first).
- Week view: compact Google-style time format ("9 AM" / "3pm" depending on the 12/24-hr toggle).
- Week view: red "now" indicator line.
- Week view: non-working days tinted using the working_days setting.
- Month view: compact time prefix on dot-style events.
- Event popover anchors at the click point instead of jumping.
- Calendar + List blocks: "Select all calendars" is now honored in the editor preview (matches the frontend).
- Calendar block editor preview lands on the current week when timeframe is set to "week".
- Events admin: top toolbar layout (selected count left, pagination right) matches the footer.
- Empty states for "Event not found" and "Event in Trash" — centered card with icon + CTA.
- Sold-out ticket widget stays visible (with sold-out label) instead of disappearing once capacity is reached.
- Event editor date and media UX hardened — end-time defaults, draft cleanup, structured-field guards.
- Page builders: unified occurrence engine across Beaver Builder, Bricks, and Elementor — all read the same instance context for recurring events.
- Tickets / Orders / Emails: instance-aware titles, itemized refunds, multi-seat expansion fixes.
- RSVPs: standard events can now run in event-wide RSVP mode (vs. per-instance).
- TEC importer: paragraphs preserved, address split into structured fields, organizer email/phone/website mapped, _EventCost mapped to ticket price, _EventURL imported as virtual location.
- Upcoming Query Loop: cache-stampede single-flight, ranked dataset for predictable ordering.
- Per-event ownership checks across admin endpoints + healer audit trail.
- i18n: more admin strings wrapped in __() for Loco / translate.wp.org.
Fixes
- Multi-day timed events: time now shows on every visible day instead of only the last; nested "+1 more" stops cascading.
- iCal export: full RFC 5545 compliance — CRLF line endings, line folding, proper PRODID, RRULE syntax.
- JSON-LD: recurring event endDate is now Google-compliant; each instance gets its own JSON-LD block.
- iCal UIDs are stable across recurrences (previously regenerated, breaking subscriber dedup).
- Recurrence cap enforced on UNTIL-style rules; recurring rule summary validated against the cap.
- Stripe webhook + ticket checkout: TOCTOU race fixed (no more oversell under load).
- WooCommerce: duplicate order suppression on retried payment posts.
- Tickets: ticket-duplication and refund-state regressions resolved.
- Capacity claim on RSVPs uses FOR UPDATE locking so two concurrent submitters don't both succeed against the last slot.
- RSVP CSV export sanitises against Excel formula injection (=, +, -, @).
- RSVP prefetch no longer leaks event meta into unauthenticated responses.
- Calendar admin: archive-view event color leak fixed; static-singleton state resets between renders.
- Editor block preview no longer renders the wrong week when timeframe is "week".
- Site editor query loop no longer returns 400 on eventkoiSig.
- "Publish stuck" — events that wouldn't progress past saving now publish reliably.
- Bulk confirm dialogs surface backend errors instead of silently failing.
- Sorting in admin tables is disabled when pagination is server-side, so sort no longer reorders just the current page.
- QR-scanned check-ins guard against double-scan (replay).
- RSVP phantom-instance gate: RSVPs no longer attach to non-existent instances.
- "Invalid Date" guard in attendee TZ normalize.
- API key dead-state regression fixed.
- Lock leaks on WooCommerce checkout cleaned up.
- Plugin .zip build now excludes .vite-hot and agent artifacts.
May 3, 2026
1.3.9.9 – Translatable admin, calendar timezone fixes & editor polish
i18n
- Full admin React UI is now translatable via Loco Translate or bundled JSON. Previously the admin stayed in English even when the site locale was set. POT regenerated with all new strings.
Fixes
- Continuous standard events with specific times were being shown in the All-day lane in calendar Week view (and as full-width strips in Month view). They now render in their correct time slots.
- Picking a start or end time could roll the date back a day when the browser timezone differed from the site timezone. Times now apply in the site timezone consistently.
- Auto-filled end date inherits the picked start time, so users no longer hit "End date cannot be before the start date" the moment they add a non-midnight start time.
- "Display timezone in event page" toggle is now respected on the frontend — when off, the timezone label no longer appears on the event page.
- Completed events were leaking into the Upcoming Query Loop, and future events into the Past Query Loop.
- WordPress was prepending http:// to [eventkoi … as=link] URLs, producing broken double-protocol links. Bogus prefix is stripped on render.
- Standalone editor preview now resolves every event_* dynamic token (date, time, timezone, etc.) instead of showing {Field Name} placeholders.
- Scalar custom fields (text, textarea, dropdown, radio, checkbox, url) auto-unwrap in the [eventkoi] shortcode by default, matching url-typed behavior.
- Tickets "Change currency" link points to WooCommerce settings when WooCommerce is the checkout method, instead of EventKoi settings.
- Stripe webhooks no longer accumulate as dead endpoints when the plugin is deactivated on staging — the webhook is disabled in Stripe on deactivation.
- Live-mode Stripe keys can no longer be saved on staging environments (avoids accidental real charges).
- QR check-in handler now redirects logged-out users to the login URL (HTML) and surfaces a "Log in" button in the JSON overlay; {qr_code} tag stripped from email templates in Lite where the feature is gated.
- Editing a saved event no longer crashes due to a missing translation import in the description component.
Improvements
- Page Numbers block "Number of links" (mid_size) attribute is now honored by EK Query Loop pagination on the frontend.
April 28, 2026
1.3.9.8 – Past events query, recurring date polish & ticket-delete safeguards
New
- "Past events" query option in the Event Query Loop block, Elementor, Bricks, Beaver, and Divi loop surfaces — sort completed events with their most recent past occurrence (rolls backward as time passes, mirroring how Upcoming rolls forward).
- Event Data block exposes the full set of canonical event tokens — separate event_date, event_time, event_date_year, event_date_month, event_date_day, event_date_iso, plus ticket-data tokens (capacity, sold, sold_out, low_stock, ticket_count, ticket_summary, sales_start/end), RSVP tokens, and ticket price + date format presets.
- event_date and event_time dynamic tokens for Elementor, Divi, Beaver Builder and shortcode pickers.
- License notice in admin when the Pro license isn't active, with a one-click jump from the plugins page to license settings.
Improvements
- Recurring events in query loops now display the next upcoming occurrence (not the original series start). Past mode shows the latest past occurrence.
- Recurring "ends on" defaults to one year from today, so newly created recurring events are bounded out of the box.
- Event Query Loop grid is responsive on tablet and mobile breakpoints.
- Calendar week view lands on the current week (not the start of the displayed month) when toggling from Month.
- Ticket delete now requires confirmation and is only persisted when you click Save — refresh restores tickets you removed by mistake.
- Drop the recurring rule summary from the ticket checkout modal — buyers see only what they're booking.
- Stripe currency now auto-detects from the connected account; "Business name" only required in Live mode.
- Test-mode Stripe link points to the Stripe Sandbox dashboard.
- License persists across plugin uninstall + reinstall.
- Ticket counts column reads "N ticket(s)" / "N RSVP(s)" with proper pluralization, and reflects gateway-completed orders only.
- Admin pages share a unified 1280px content width.
- Event Query Loop respects upstream render_block wrapper classes (Block Visibility extension etc.).
Fixes
- Recurring "ends on" date is inclusive — the user-picked end date is now part of the series instead of being silently dropped.
- Block Visibility extension is honored on Calendar, List, and event-data blocks.
- Switching the WordPress timezone setting no longer crashes the site when gmt_offset returns an empty string.
- Wrapper classes from render_block filters are preserved on Calendar and List blocks.
- Per-instance override read paths are hardened against stdClass values returned by some import flows.
- Event description list styling is preserved on the front end.
April 19, 2026
1.3.9.7 – Ticket Save Fixes & Loco Translate Compatibility
Fixes
- Fixed ticket save on the event's Tickets tab. Tickets now persist when you click Save or when you switch to another tab — previously some edits could be lost on navigation.
Improvements
- Tickets auto-save when you switch away from the Tickets tab, so edits are preserved even if you forget to click Save.
- Translations saved to the plugin's own languages folder (Loco Translate's "Author" location) are now picked up automatically.
April 19, 2026
1.3.9.6 – Ampersand & Calendar Block Fixes
Fixes
- Fixed ampersand (&) display in calendar names across the admin UI, multiselect dropdowns, builder module dropdowns (Divi, Elementor, Bricks, Beaver), and the frontend calendar archive page.
- Fixed calendar block showing "Invalid calendar" when the default calendar option was missing or pointed to a deleted term. The block now resolves from its own attributes first, falls back to the default option, and finally to the first available calendar.
Improvements
- Added self-healing for the default calendar option — if the stored value references a deleted or invalid term, it is automatically repointed to a real calendar on the next page load.
- Empty-state calendar block now shows a friendlier message; admins also get a "Create a calendar" link.
- Block editor no longer seeds the calendar block with an invalid default ID when the default option is missing.
April 18, 2026
1.3.9.5 – Divi Integration (Beta), Stripe Fixes & Polish
New
- Added Divi Builder integration (Beta) — EventKoi Calendar, Event, and Loop modules, with occurrence-aware loop expansion and dynamic content tokens for event fields.
- Added admin notification email templates for New RSVP and New ticket sale events.
Improvements
- Added Stripe sync checkout confirmation fallback for environments where webhooks are not reachable (e.g. local development sites).
- Admin notification emails now use the saved sender name and email from the Emails settings.
- Backfilled the Site instance ID UUID automatically on version bump.
- Restored the Site instance ID display on Settings > Integrations.
- Tightened WordPress coding standards compliance and verified-build stability.
Fixes
- Fixed Stripe account currency drift — checkout now uses the connected account's default currency instead of silently defaulting to USD.
- Fixed admin sale notification not firing on Stripe checkout.
- Prevented a fatal error in the admin sale notification pipeline.
- Fixed theme CSS bleed into FullCalendar cells on Divi-like themes.
- Fixed the WP-CLI eventkoi seed command's recurrence rule schema.
- Fixed archive/unarchive actions for ticket sales on the global and per-event views.
April 12, 2026
1.3.9.4 – UI & Calendar Improvements
Improvements
- Centralized confirmation dialogs with consistent centered modal design across all destructive actions.
Fixes
- Bulk actions on the global ticket sales page now correctly show Archive/Unarchive instead of Duplicate/Move to trash.
April 11, 2026
1.3.9.3 – WooCommerce Gateway & Reporting Fixes
Improvements
- Tickets are now issued as soon as a WooCommerce order moves to "processing", so every gateway (including Cash on Delivery and Bank Transfer) works out of the box.
- Ticket refund emails now fire automatically when a WooCommerce order is partially or fully refunded, matching the Stripe flow.
- Centralized the ticket sales query builder so the global Orders list, per-event Sales History, and stats endpoints always stay in lockstep on currency, gateway, and status filters.
Fixes
- Orders with a partial refund now display the correct "Partially refunded" status on the Orders list and per-event sales history (previously showed "Pending payment").
- Ticket sales totals, net earnings, and per-event stats no longer mix amounts from different WooCommerce currencies.
- Pro now follows the active WooCommerce currency when the checkout method is WooCommerce, so stats stay consistent even when a stale currency was stored in plugin settings.
- In-progress checkout holds are no longer counted toward sales stats.
April 11, 2026
1.3.9.1 – Direct Stripe & Ticketing Polish
New
- Stripe now runs directly against your own Stripe account — no Supabase edge functions, no Connect OAuth. Enter your API keys in Settings → Payments and you're live.
- Webhook handler creates orders, generates check-in codes, and sends confirmation emails locally, identical to the WooCommerce checkout flow.
- Admin refunds now call the Stripe API directly and sync to the local orders database.
Improvements
- Ticket refund emails fire automatically when a WooCommerce order is refunded.
- Orders list and sales history CSV exports are now working.
- WooCommerce order links in orders, attendees and sales history open in the same tab.
- master_checkin_code is populated from WooCommerce order meta so check-in works consistently.
- Attendees tab refreshes reliably after ticket status changes.
- Billing information (name, email) is auto-filled for logged-in users during ticket checkout.
- Clearer error messaging when WooCommerce is not installed.
- Removed Beta badges from ticket-related UI.
Fixes
- Fatal error in Orders::create_order caused by a stray Stripe class reference.
- Stripe webhook now passes the correct checkout session ID into confirmation emails (activity note now shows on direct Stripe orders).
- Order status filter tabs on the Tickets → Orders page now point at the correct base.
- Event status dropdown is hidden on non-event admin pages.
- React "Rules of Hooks" error on the Event Attendees tab.
- Removed undefined isResendEmail reference in the Attendees component.
- Hidden the attendees bulk-actions toolbar when no row-level actions are available.
- REST API responses no longer break when third-party plugins emit PHP notices.
- Stripe webhook secret handling for array-shaped values.
- Wrong text domain in block descriptions.
March 21 2026
1.3.2.0 – Page Builder Integrations, Accessibility & Performance
New
- Added Elementor Pro Loop Grid integration with occurrence-aware query
rewriting, custom controls (orderby mode, date range, include instances), and
dynamic tag support for instance-specific dates, titles, and permalinks.
- Added Bricks Builder query loop integration with the same occurrence
expansion, pagination, and filtering capabilities as Beaver Builder and
Elementor.
- Added Event Instance Datetime Elementor dynamic tag that
renders instance-specific start dates in loop templates.
- Added rate limiter to QR check-in endpoint (20 requests/minute per IP) to
prevent brute-force scanning.
- Added per-event default template selector in Settings with support for block
templates and Elementor templates.
- Added performance test harness (tests/perf/) for benchmarking
query and rendering operations.
Improvements
- Improved RSVP capacity enforcement with database-level transaction locking
to prevent race conditions under concurrent submissions.
- Improved Beaver Builder loop pagination to correctly resolve
paged/page query vars from the request instead of relying
solely on builder-injected args.
- Improved event template resolution so page builders (Elementor Theme
Builder, Beaver Themer) only override the template when explicitly assigned in both
the builder and EventKoi's template selector.
- Improved frontend script loading to prevent duplicate
wp_localize_script calls when multiple EventKoi blocks appear on the
same page.
- Improved admin page load performance by inlining the Supabase remote config
into the page so the frontend no longer makes a separate network request on every
admin page load.
- Improved temporal event status filtering (live,
upcoming, completed) to handle mutual exclusivity
correctly when multiple temporal statuses are passed.
Accessibility
- Added aria-hidden="true" to all decorative icons across admin
components (filters, order headers, stats, instances table, dropzone, multiselect,
date range, navigation).
- Added aria-label to interactive controls: refund checkboxes,
quantity inputs, working day toggles, edit buttons, multiselect remove buttons, and
template editor links.
- Added aria-pressed to working day toggle buttons and
aria-current="page" to active side-tab navigation links.
- Replaced non-interactive elements with proper <button>
elements where click handlers were attached (event name edit, dropzone).
- Added role="progressbar" with
aria-valuenow/aria-valuemax to the RSVP capacity bar and
role="alert" to error messages on the frontend.
- Added keyboard support (Enter/Space) to dropzone
and edit icon interactions.
- Wrapped hardcoded admin UI strings in __() for
internationalization (settings, stats, filters, date range, instances table).
- Added sr-only labels for links that open in new tabs.
Fixes
- Fixed Elementor Loop Grid date range filter, section labels, and display
issues.
- Fixed Beaver Builder loop link resolution for recurring event instances so
instance-specific URLs are generated instead of parent series URLs.
- Fixed occurrence status detection so live events are correctly counted as
started occurrences.
- Fixed date field clear interaction by replacing the external Clear button
with an inline clear control inside the input.
- Fixed stale integration tests that expected per-code row expansion instead
of the current aggregated-order normalization format.
February 27 2026
1.3.1.2 – Calendar, Loop & Schema Bug Fixes
Fixes
- Fixed structured data output for event locations to prevent empty/
invalid Location fields in Event schema.
- Fixed schema handling for physical, virtual, and mixed event locations
so JSON-LD location data is generated correctly.
- Fixed EventKoi list display edge case where small per_page</ code> + max_results values could return no results when sorting
by upcoming events.
- Fixed recurring-event link resolution in Beaver loop contexts so
instance links resolve correctly instead of pointing to the parent series
URL.
- Fixed Beaver editor preview issue where EventKoi list output
could appear empty in builder preview.
- Fixed recurring weekday/day alignment and related timezone drift
issues across event edit, instances, and calendar views.
- Fixed date range filtering inconsistencies affecting event/instance
results.
- Fixed event list date/time display inconsistencies in admin table
views.
- Fixed location consistency issues so updated event locations are
reflected reliably across EventKoi views.
- Fixed multiple UI layering and overflow issues in calendar popovers
and compact/responsive layouts.
February 19 2026
1.3.1.1 – Activation Safety & Stability
Improvements
- Improved plugin activation flow to initialize EventKoi schema directly
and more predictably.
- Improved database recovery on activation by ensuring missing core
EventKoi tables are recreated reliably.
- Improved overall reliability of activation and update lifecycle
behavior.
Fixes
- Fixed activation-time compatibility issue that could cause conflicts
with other active plugins.
- Fixed duplicate initialization behavior during activation that could
trigger fatal errors in some environments.
- Fixed missing table recreation edge cases for core ticketing and order
data after reactivation.
February 15 2026
1.3.1.0 – Beaver Builder Integration & Stability
New
- Added Beaver Builder integration for EventKoi templates.
- Added EventKoi Beaver modules (Event module and Calendar module).
- Added EventKoi dynamic tags support for Beaver Builder content.
- Added support for using Beaver templates from EventKoi template settings
(global and per-event).
Improvements
- Improved template rendering compatibility across Beaver Theme and block
themes.
- Improved token replacement behavior in Beaver module/template output.</ li>
- Improved timezone/calendar handling consistency across views and local-
time scenarios.
- Improved admin settings/navigation cleanup and UX consistency.
Fixes
- Fixed Beaver Event module context resolution when “Use current event
context” is selected.
- Fixed calendar week/day header and local timezone shift issues in
specific views.
- Fixed RSVP/check-in status/count edge-case inconsistencies.
- Fixed email/template token rendering and formatting regressions.
- Fixed multiple template fallback/selection issues with custom
builders.
January 29 2026
1.3.0.0 – RSVP & Check-in
New
- Added RSVP management with attendee statuses, counts, and RSVP
finder.
- Added attendee check-in flow with QR codes and QR check-in UI.
- Added RSVP email notifications, resends, and email editor.
- Added CSV export for RSVP data.
Improvements
- Improved date/time handling and timezone display.
Fixes
- Fixed issue with some custom fields were not displaying.
- Fixed default/global event template applied to new events.
- Fixed slugs and permalink-related issues.
January 13 2026
1.2.0.0 – Custom fields & Integrations
New
- Added Custom Fields with field groups, global fields, and event-level
field editing.
- Added builder integrations: Elementor widgets/dynamic tags and Bricks
elements/query loop.
Improvements
- Added default event template setting and template editor shortcut.
- Added timezone settings and local-time display support across admin and
frontend.
- Improved dashboard event thumbnails and admin UI layout.
Fixes
- Fixed onboarding wizard navigation step handling.
- Fixed demo event image handling in onboarding.
- Fixed admin table rendering issues.
January 1 2026
1.1.0.2 – Calendar timezone fix
Fixes
- Fixed calendar day headers shifting when the server timezone differs
from the WordPress timezone.
December 23 2025
1.1.0.1 – Style fixes
Fixes
- Fixed image styling in the Event Query Loop block.
- Fixed Event Data block styling.
December 4 2025
1.0.0.1 – Fixed missing JS imports
Fixes
- Fixed issue with missing i18n imports.
December 3 2025
1.0.0 – Event query loop block, event series page & more
New changes
- Introduced the new Event Query Loop block with templating, layout controls, and live editor previews.
- Added the new Event Series page/template with automatic instance listings and proper permalink routing.
Improvements
- Improved recurring rule UI with corrected weekday alignment, more accurate date handling, and reduced off-by-one errors.
- Enhanced Event Editor to always display dates in the WordPress timezone while saving clean UTC values internally.
- Optimized calendar rendering and ensured consistent color propagation for per-calendar event colors.
Fixes
- Fixed issue where recurring instances displayed on the wrong weekday in FullCalendar when using non-UTC timezones.
- Fixed incorrect “Ends On” dates when selecting a date in the recurring editor.
- Fixed recurring instances shifting by one hour or one day because of mixed UTC/Singapore conversions.
October 21 2025
0.9.7 – Week View Layout & Locale Handling Improvements
Improvements
- Redesigned week view header to display weekday names and dates on separate lines for improved readability.
- Improved locale detection and validation to ensure consistent weekday labels across languages.
Fixes
- Fixed issue where month view displayed extra numbers beside month names.
- Minor refinements to header rendering and date formatting for smoother cross-locale behavior.
October 20 2025
0.9.6 – Important bug fix
Fixes
- Fixed issue with recurring instances not loading. (May require saving permalinks again)
October 9 2025
0.9.4 – Calendar View & Localization Fixes
Improvements
- Enhanced localization support across admin and frontend interfaces.
- Improved responsiveness and overall stability in calendar rendering.
Fixes
- Resolved layout and navigation issues in the weekly calendar view.
- Corrected locale handling and improved date/time formatting consistency.
- Fixed recurring instances appearing blank when event time was unset or set as an all-day rule.
September 8 2025
0.9.2 – Calendar & Admin Improvements
New changes
- Introduced time format picker (12/24 hour).
- Added links to the “Account” page in plugin admin/dashboard.
Improvements
- Enhanced search event feature in calendar view.
- Added navigation support to the search event feature in calendar view.
- Improved timezone picker/switcher for better usability.
Fixes
- Fixed date range filter in backend.
- Fixed calendar blocks.
August 28 2025
0.9.1 – Admin & Calendar Fixes
Fixes
- Fixed CSS conflict with WordPress admin styles.
- Fixed CSS issues affecting the plugin UI in the admin area.
- Fixed “Add to Calendar” feature to ensure proper functionality.
July 25 2025
0.9.0 – First Pro release
Release notes
- Initial release of EventKoi Pro plugin.