0.34.0-beta.1
Pre-release
Pre-release
·
6 commits
to develop
since this release
Security
- Enforce per-post edit capability on venue / event meta and post-specific REST routes so unauthenticated or under-privileged callers cannot modify another user's events or venues. [#1520] [#1694]
- Lock down
GITHUB_TOKENpermissions across CI workflows to least-privilege scopes, reducing the blast radius of a compromised workflow. [#1650] [#1694] - Override vulnerable transitive npm dependencies (
qs,uuid,webpack-dev-server) via npm overrides. [#1651] [#1694] - Rate-limit the geocoding REST endpoints to prevent abuse-by-loop. [#1546] [#1694]
- Split privileged PR workflows to remove the untrusted-checkout / cache-poisoning exposure that pull-request-target workflows otherwise inherit. [#1652] [#1694]
Added
- Add a block transform from
core/post-datetogatherpress/event-date, re-implemented via the WordPress Block Transforms API. [#1565] [#1664] [#1694] - Add a configurable RSVP mode with a sitewide disable switch and per-event control, plus an Open RSVP setting that lets non-logged-in users RSVP via magic-link comments. [#1468] [#1469] [#1694]
- Add a default template for the Event Query Loop block so it has a sensible starting point on themes that don't ship one. [#1399] [#1694]
- Add a setting for the Google Maps API key, so sites that prefer Google over OpenStreetMap can wire credentials in through the UI. [#1568] [#1694]
- Add a site health test that flags installs running on plain permalinks, since several GatherPress features (notably RSVP magic links and .ics downloads) require pretty permalinks. [#1660] [#1694]
- Add a
gatherpress.durationDefaultJavaScript filter to override the default event duration (in hours). The value is honored when it matches one of the availabledurationOptions, otherwise it falls back to the first available duration. [#1706] [#1716] - Add a
show_iffield key to the Settings API so settings fields can be conditionally hidden based on the value of other fields. [#1634] [#1694] - Add network-wide GatherPress settings with per-option inheritance so multisite installs can share or override individual settings at the site level. [#1500] [#1694]
- Add server-rendered static maps to the venue-map block, with a regenerate button, prewarming, retina (2×) srcset rendering, a scale attribute, and Inspector polish. Editor previews now poll for async-arriving map descriptors so the block reflects geocode-on-save state in real time. [#1480] [#1483] [#1485] [#1489] [#1491] [#1492] [#1497] [#1498] [#1694]
- Add starter pattern pickers to the Event, Venue, RSVP Form, RSVP Response, and RSVP blocks, plus an Event Query Loop starter pattern with a Start blank event scaffold. Patterns are hookable so themes can register their own. [#1571] [#1578] [#1579] [#1580] [#1581] [#1582] [#1584] [#1694]
- Add tag-driven release automation. Pushing a stable tag now triggers a workflow that builds a versioned distro zip, rolls up
.github/changelog/*into a newCHANGELOG.mdsection (auto-PR'd back to develop), creates a GitHub Release with the zip attached, and deploys to wordpress.org. Pre-release tags (alpha/beta/rc) produce a GitHub Pre-Release with the[Unreleased]changelog snapshot and skip the wp.org deploy. Seedocs/developer/release-process.md. [#1692] - Add the Event Archive setting so site organizers can choose whether the post-type archive defaults to upcoming, past, or is disabled. [#1587] [#1694]
- Add the
gatherpress-event-datepost type support so any post type can opt into event datetime storage, thegatherpress_eventsDB table, date-based query ordering, and the Event Date / Add to Calendar blocks. [#1440] [#1694] - Add the
gatherpress-rsvppost type support so any post type can opt into the comment-based RSVP system, attendee management, waiting lists, and the RSVP block family. [#1444] [#1694] - Add the
gatherpress-venueandgatherpress-online-eventpost type supports so venue association and online-event link handling can be enabled on any custom event post type. [#1453] [#1694] - Add venue address autocomplete search powered by the Photon geocoder, with a rate-limited REST endpoint and graceful fallback to manual entry. [#1451] [#1546] [#1694]
- Adopt the Jetpack changelogger workflow with a per-PR
.github/changelog/*file format and a rolled-upCHANGELOG.md. Backfills history from 0.27.0. [#1690] - Expose the
gatherpress_venue_map_prewarm_pre_enqueue_jobfilter so extensions can short-circuit individual venue-map prewarm jobs (useful for sites with hundreds of venues where aswitch_themewould otherwise flood WP-Cron with warm jobs). [#1504] [#1694] - Expose WordPress Geodata standard meta on venue post types so third-party themes and plugins that consume
geo_latitude/geo_longitude/geo_addresswork out of the box. [#1471] [#1694] - Extract the
gatherpress-shadow-sourceprimitive. Hidden_<post_type>taxonomies with post-name-derived terms can now be enabled on any post type, providing the foundation for the venue ⇄ event tagging mechanism and letting companion plugins register their own source-style CPTs (productions, organizers, etc.). [#1569] [#1694] - Integrate with the Advanced Query Loop plugin, including a Venue facet in the taxonomy filter. [#1411] [#1694]
- New documentation about customizable Playground previews per pull-request [#1791]
- Persist structured venue address fields (house number, street, city, county, state, postcode, country, country code) via an async geocode-on-save cron handler. Exposed via individual meta keys for block bindings. [#1517] [#1530] [#1694]
- Refactor the Settings API with flat storage, a config-driven architecture, import / export, and reorganized tabs. [#1434] [#1694]
- Support the Interactivity API's
clientNavigationflag for the venue block so navigation between venue pages stays SPA-style on themes that opt in. [#1464] [#1694]
Changed
- Apply the GatherPress hook naming convention across the codebase. New
shadow_*subsystem row added to the hooks-naming-convention doc. [#1550] [#1694] - Apply the WordPress 6.8
__next40pxDefaultSizeopt-in to everySelectControlinstance so admin form controls match the upcoming default sizing. [#1661] [#1694] - Bump 'Tested up to' to WordPress 7.0. [#1649] [#1694]
- Calendar endpoint registration is now an explicit
(new Foo(...))->init()chain instead of a side effect ofnew Foo(...). TheCalendar\\Endpointconstructor only stores validated args;init()performs rewrite-rule registration and hook wiring, and returns$thisfor chaining. Fixes five SonarCloudphp:S1848bugs flagged onCalendar\\Setupand makes the registration side effect surface at the call site. [#1695] - Enforce per-post edit capability on venue / event meta and post-specific REST routes. [#1520] [#1694]
- Extend the admin list-table columns, sorting, and views to every event-supporting post type — not just the built-in
gatherpress_event. [#1467] [#1619] [#1694] - Extract
Event\MetaandVenue\Metafrom their respectiveSetupclasses so meta registration lives in a dedicated, testable component. [#1542] [#1694] - Flatten
Event_*classes into theGatherPress\Core\Eventsubnamespace.Event_Admin_Listis extracted into its own class. [#1450] [#1508] [#1694] - Flatten
Rsvp_*classes into theGatherPress\Core\Rsvpsubnamespace. [#1524] [#1694] - Flatten
Venue_*classes into theGatherPress\Core\Venuesubnamespace. [#1522] [#1694] - GatherPress UI strings now pull from each post type's registered labels rather than hardcoding 'Event' / 'Venue'. Custom event-supporting post types see their own labels everywhere in the settings sub-menus, admin list, sidebar panels, and Query block UI. [#1627] [#1629] [#1631] [#1647] [#1659] [#1694]
- Generalize the
gatherpress/venueblock and thegatherpress/event-queryblock's contextual toggle to work with anygatherpress-shadow-sourcepost type (productions, tours, organizers, etc.), not just venues. Adds a newgatherpress_shadow_taxonomy_object_typesfilter so extensions declaratively wire their shadow taxonomy to event CPTs, plus two reusableShadow_Sourcehelpers (resolve_post_from_query_context,build_tax_query_clause) for custom Query Loops. [#1689] - Honor the WordPress comment privacy filters when inserting RSVP comments. [#1470] [#1694]
- Include
SECURITY.mdin the distributed plugin zip.wp-scripts plugin-zipignores.distignoreand builds from a fixed allowlist, so apackage.jsonfileslist now pins the shipped fileset and adds the security policy. [#1727] - Lowered the default Venue Map zoom level from 18 to 16 so new venue maps show more neighborhood context. Sites that already set a custom Default Zoom Level are unaffected. [#1799]
- Make
postIdOverridework for the event and venue blocks, with the dim-gate suppressed on non-event hosts when the override resolves. [#1552] [#1554] [#1694] - Move RSVP-related settings to a dedicated RSVP settings panel and relocate the online event link to Venue settings for better organization. [#1394] [#1694]
- Move the gatherpress-utility-style enqueue onto
enqueue_block_assetsso it reaches the editor iframe in FSE themes. [#1655] [#1694] - Re-implement block-unregistration handling and clean up legacy unregister flow. [#1409] [#1694]
- Re-implement the calendar .ics download endpoint with proper rewrites and feed handling, replacing the legacy Event ICS code. [#1669] [#1694]
- Read
isEditorPanelOpenedfromcore/editorinstead ofcore/edit-post, silencing a WordPress 6.5 deprecation warning. [#1653] [#1694] - Refactor the venue-detail block architecture and fix context handling so it composes cleanly inside Query Loops and FSE templates. [#1391] [#1405] [#1694]
- Refactor the venue map block into a swappable provider strategy so Google Maps and OpenStreetMap (and future providers) share a common interface. [#1534] [#1694]
- Rename the
safeHTMLhelper tostripScriptsAndEventHandlersand document its narrow scope (it strips<script>tags andon*=event handlers — it is not a full HTML sanitizer). [#1545] [#1694] - Rename
OnlineEventLinktoOnlineEventand remove the legacy Listener / Broadcaster code that was no longer used. [#1420] [#1694] - Replace the original RSVP / RSVP Response / RSVP Template / Venue blocks with their V2 equivalents that shipped in 0.32.0. The V2 naming is dropped now that the new blocks are canonical. [#1407] [#1694]
- Restructure settings tabs — Date & Time moves under Events, Maps moves under a new Venues tab.
Venuesplits into an instance class plus aVenue_Setupsingleton. [#1477] [#1694] - Separate
README.md(GitHub-facing) andreadme.txt(wp.org-facing) so each surface gets content tailored to its audience. [#1423] [#1694] - Stop dimming GatherPress blocks inside Query Loop contexts when valid event context is present. [#1549] [#1694]
- Support arbitrarily deep namespaces in the GatherPress class autoloader. [#1526] [#1694]
- The Default Map Type venue setting now only appears when the Google Maps platform is selected. [#1787]
- The editor's "already passed" notice now uses the post type's own singular label, so a custom event-supporting post type (e.g. a
production) reads "Production has already passed." instead of the hardcoded "event". [#1728] - Use the WordPress-native taxonomy column for venues in the events admin list, replacing the custom column. [#1544] [#1694]
- WordPress conventions sweep across the codebase (blank line after class openings per WP core style, JS docblock dependency-header normalization,
str_contains/str_starts_withmigration fromstrpos), plus two small settings panel fixes. [#1589] [#1694]
Removed
- Remove the
window.GatherPressglobal in favor of editor settings, interactivity state, and per-block data stores. [#1465] [#1694]
Fixed
- Add the
gatherpress_exclude_rsvp_from_comment_queryfilter so integrations (like comment moderation plugins) can opt back into seeing RSVP comments in the comment query. [#1640] [#1694] - Deduplicate admin column sorting in
Event_Setupand fix SQL identifier quoting on the sort query. [#1449] [#1694] - Editor no longer forces the events admin list back to the Upcoming filter when the user explicitly selects All — the previously-saved filter sticks. [#1515] [#1694]
- Event Query block no longer lists past events on the front end when its saved query omits the event type; it now defaults to upcoming, matching the editor. [#1806] [#1807]
- Event Query blocks placed in a Single Event block template now filter by the viewed event's season/venue and can exclude the current event on the frontend, instead of rendering every event unfiltered. [#1793]
- Event Query blocks placed inside a block template no longer leave the editor preview spinning indefinitely. [#1792]
- Fix a datetime-picker stack overflow when pressing the down-arrow on the year field in relative mode. [#1621] [#1694]
- Fix anonymous RSVP deletion breaking magic-link tokens. [#1424] [#1694]
- Fixed the event-date block incorrectly showing the edited event's dates for all events inside a query loop on an event post. [#1750]
- Fixed the Event Query block hanging on an endless spinner when its post type is switched to one that does not support event dates. [#1783]
- Fix ICS export escaping of lowercase
ncharacters in event titles and descriptions. [#1416] [#1694] - Fix initial context for event date supporting types inside venue block [#1757]
- Fix misleading single-event iCal URL in calendar test fixtures. [#1730] [#1743]
- Fix the default archive temporal handling (upcoming / past / none) for event-supporting custom post types. The
gatherpress_event_archive_modefilter receives the queried post type as its second argument. [#1624] [#1694] - Fix the Event Query Settings panel and REST collection params so they work for any event-supporting post type. [#1622] [#1694]
- Fix the orderby behavior of the default Past events filter. [#1442] [#1694]
- Fix the Post Date block to display the event date when the 'use event date for post date' setting is enabled. [#1430] [#1694]
- Fix timezone parsing so option values can no longer leak HTML attributes into rendered markup. [#1558] [#1694]
- Fix venue sorting in the admin venues list. [#1448] [#1694]
- Follow-up to the 0.33.3 protected-meta hardening. Additional GatherPress meta keys are now protected from the Custom Fields panel to prevent stale data overwrites on event save. [#1387] [#1694]
- Gate the 'Send Updates' email notice so it only appears on event-supporting post types, and surface post-type-aware label / pattern filters for related UI. [#1598] [#1694]
- Guard the RSVP block against a malformed
serializedInnerBlocksattribute so a bad stored value degrades gracefully instead of crashing the editor with "RSVP block has encountered an error and cannot be previewed". [#1704] [#1713] [#1713] - Harden asset metadata loading so build dependency/version data is read correctly even if the asset file was already loaded in the request. [#1788]
- Hide the Filter by Current Venue toggle when the host post type doesn't support venues, and gate the Event Query Settings panel by context. [#1566] [#1694]
- Invalidate caches on RSVP token redemption and bypass page cache for magic-link URLs so the user sees the result of their RSVP immediately. [#1636] [#1694]
- Make the Online Event Link field a URL input and add spacing between the toggle and the field [#1745]
- Multiple JS fixes for blocks inside FSE templates. [#1459] [#1461] [#1694]
- Only show "Venue Settings" panel for post types supporting
gatherpress-venue-information[#1734] - Open RSVP attendees are now correctly promoted from the waiting list when a spot opens up. [#1777]
- Pre-release tags (alpha / beta / rc) now produce a release body containing the rolled-up changelog of every queued entry, computed in an ephemeral checkout so the entry files stay in place for the eventual stable release. Previously the body only showed CHANGELOG.md's
[Unreleased]section, which is empty until the stable rollup happens, so testers downloading pre-release zips never saw what they were testing. [#1693] - Prevent a fatal error when the event REST response is prepared without an id field (e.g. a _fields= request that excludes it). [#1779]
- Read SVGs from the filesystem instead of issuing an HTTP self-request, fixing icon-block rendering on hosts behind authenticating reverse proxies. [#1455] [#1694]
- Refuse activation when duplicate GatherPress folders are on disk to prevent silent class collisions. [#1560] [#1694]
- Remove the dead
RichTextonSplitprop on the dropdown-item block, silencing a WordPress 6.4 deprecation warning. [#1663] [#1694] - Render the Duration select with whatever duration options are provided, defaulting to the first available option when the built-in 2-hour default is filtered out via
gatherpress.durationOptions, instead of dropping straight to the end-time picker. [#1706] [#1716] - Replace custom-made "Start blank" logic with registerBlockVariation() calls, like it is intended by WP core. [#1802]
- Return 404 for the event archive URL when no matching page exists, instead of rendering an empty archive. [#1381] [#1694]
- RSVP requests no longer throw and leave the UI inconsistent when the server returns a success response with a missing or partial responses object. [#1798]
- RSVP status changes now save correctly from event archive and Query Loop pages, not only from individual event pages. [#1784]
- Scope the RSVP UI to the
gatherpress-rsvpsupport so non-RSVP event post types don't see RSVP fields. [#1594] [#1694] - Set
referrerPolicy: 'no-referrer-when-downgrade'on OpenStreetMap tile requests so tile providers that gate access on theRefererheader (e.g. CARTO basemaps) receive the request correctly. [#1433] [#1694] - Several improvements and bug fixes to the Event Query Loop block surface (template handling, attribute migration, pattern selection). [#1396] [#1398] [#1694]
- Show "Exclude current event" toggle only when queried post type matches the currently edited post type. [#1725]
- Show a clear "Map could not be loaded" state instead of a blank gray box when the interactive map's tile provider fails to serve tiles (e.g. CartoDB returning 502s for uncached high-zoom tiles). A failed tile fetch no longer leaves the map silently empty. [#1747]
- Stopped the RSVP attendance modal from flickering when the Number of Guests field was changed. [#1749]
- Stop the front-end RSVP button from vanishing when a request fails or the block markup is incomplete. The status switcher now falls back to the no_status state when no inner block matches, the request handler guards against missing/non-JSON responses and surfaces an error instead of failing silently, and the post-RSVP modal logic no longer throws on malformed markup. [#1729]
- Stop the venue map from breaking out of the body on narrow viewports. With an auto width, the inline
height+aspect-ratiopair resolved to a fixed pixel width (300px tall at 2/1 → 600px wide) that overflowed mobile screens; the wrapper is now capped to its container width. [#1703] [#1714] - The event-date block inside a venue block with a source post type (e.g. productions/seasons) now shows the related source post's date instead of the host event's date in the editor. [#1797]
- The events list REST endpoint now always returns an array for the current_user field instead of an empty string when no RSVP exists. [#1781]
- The RSVP manager in the editor now shows an error notice instead of silently clearing the attendee list when an RSVP request fails. [#1782]
- The venue-map block returned new empty-object references from its useSelect selector on every render, triggering Gutenberg's "Non-equal value keys" warning and causing unnecessary re-renders when no venue address was set. [#1748]