v3.2.1
New Features
- None.
Improvements
- The default events list orders by start timestamp through a single
LEFT JOINinstead of anEXISTS/NOT EXISTSmeta query, which forced two joins plus a filesort on every list request and could inflatetotalwhen duplicate meta rows existed. - Date-filtered listings fetch candidate IDs only and read the three occurrence meta keys in one query, instead of priming roughly 90 meta rows per candidate event that the occurrence scan then discards. Caches are primed only for the page actually serialized.
flags.all_dayis declared in the MCP contract, so the manifest and generated schemas stay in sync with the read payload.- Internal cleanup with no behavior change: a shared instant-to-wall-clock converter replaces three hand-rolled copies, the accepted post statuses come from one allow-list rather than four, interaction modes derive from a single map, and two dead functions were removed.
Bug Fixes
- Fix EventON term meta still losing legitimately falsy values such as a latitude of
0. The 3.2.0 fix checked whether the incoming request carried a falsy value, but EventON'sevo_save_term_metas()runsarray_filter()over the merged result and so destroys values that are already stored: writinglat: 0succeeded, then any later partial update without a falsy value routed back through EventON and deleted it. All writes now merge through this plugin's own path, which clears only on an empty string. - Fix a read-modify-write client still corrupting the times of
dl/ml/ylevents. Reads exposed EventON's boundary-extended timestamps as the writablestart_date/start_time/start_at, so a client that read an event, changed an unrelated field, and wrote the body back sent00:00/23:59and overwrote the real times. The 3.2.0 guard only covered requests that omitted date fields entirely. Those writable fields now derive from the event's base wall clock (evcal_srow/evcal_erow), and the extended values remain available through the read-onlyevent_start_timestamp/event_end_timestamp, making a read-modify-write round trip lossless. - Fix
flags.all_daywriting EventON's legacyevcal_alldaymeta, which EventON core reads but never writes. All-day in EventON istime_extend_typeofdl, the setting that snaps the extended timestamps to00:00/23:59, so a writtenall_dayproduced an event that displayed as all-day without extended timestamps, and settingtime_extend_typeproduced the inverse.flags.all_dayis now read-only and derived fromtime_extend_type, falling back to the legacy meta for imported events. Settime_extend_typetodlto make an event all-day. - Fix a test double for
maybe_unserialize()that returned its input unchanged, which silently weakened a repeat-occurrence assertion. WordPress core test doubles now live in one place and behave like core.
Full Changelog: v3.2.0...v3.2.1