The challenge
A web agency needed help stabilizing an Events directory built on WordPress with Elementor, ACF, JetSmartFilters, and Google Maps. On paper, the setup looked flexible. In practice, it had become harder to manage than it needed to be.
The system had several weak points at once: Google Maps errors appeared in both admin and front-end use, the location filtering logic had become too ambitious, and event ordering did not reliably follow the actual event date. Editors also needed something that would stay easy to use as the directory grew.
What needed to work
The directory needed to stay simple for editors, predictable for visitors, and scalable for future locations and events. That meant reducing technical fragility, avoiding unnecessary API dependence in the filtering experience, and making sure the event list sorted correctly by real event date rather than by publish date.
Just as importantly, the solution had to improve reliability without turning the project into a full rebuild.
My approach
Instead of trying to force the existing distance-based filtering model to behave, I simplified the system.
The main shift was moving location filtering away from map logic and into taxonomies. Event Categories and Event Locations became the backbone of the filtering model, with JetSmartFilters handling the front-end controls and a clear reset action to remove filters when needed. That made the queries more predictable and the structure easier to maintain long term.
Google Maps was kept only where it still added value for editors, not as the foundation of the filtering experience. To stabilize that part of the setup, I consolidated API key usage, corrected referrer restrictions, enabled the required APIs, and connected the project to an active billing account.
After the filtering model was cleaned up, I addressed a second issue: event dates were not always displaying correctly in the loop, and ordering could still fall back to publish date instead of the actual event date stored in ACF.
To solve that, I introduced a small MU plugin that synced the raw event_date value into a separate formatted display field, and paired that with an Elementor Query ID hook that forced chronological sorting by the real date field. This kept the front-end display clean while ensuring the listing order stayed deterministic.
Technical notes
This project involved more than visual cleanup. It required rethinking how the directory should behave under real use.
The final setup combined a custom post type for Events, taxonomy-based filtering for categories and locations, ACF fields for structured input, JetSmartFilters for front-end interaction, and a controlled query layer for date-based ordering. A small MU plugin handled display formatting separately from storage, which prevented raw Ymd values from leaking into the loop output.
In practical terms, the work included filtering architecture refinement, API conflict cleanup, ACF date handling, custom query logic, and overall system simplification.
Outcome
The result was a more stable and scalable events directory.
Filtering became simpler and more reliable, editors could manage event data more easily, Google Maps stopped interfering with front-end behavior, and events were displayed in the correct chronological order with properly formatted dates.
Most importantly, the project moved from an over-engineered setup toward a cleaner system that was easier to trust, easier to maintain, and better suited for long-term use.