v1.3.0 — Quality Pass
v1.3.0 — Quality Pass
This release is a focused quality pass with no new features. Every change is a bug fix or structural improvement discovered during a full code audit.
Sync Engine (class-cctec-sync.php)
- Ticket/price data (
fetch_ticket_data) is now only fetched on actual creates and updates — previously it fired an extra PCO API call on every event including unchanged ones, adding hundreds of unnecessary requests per day on active calendars - Signup name map is now cached between sync passes — previously re-fetched from PCO on every calendar-mode sync
find_post_by_meta()replaces two near-identical duplicate methodsdelete_stale()now explicitly excludes already-trashed posts from its query — previously it would re-trash them on every sync, inflating the deleted count and writing unnecessary DB rows- Registration URL now correctly uses
new_registration_urlin the calendar-mode name-match path (the registrations-only path was already correct since v1.1.1) - Venue creation unified into a single
get_or_create_venue_from_attrs()path used by both sync modes no_found_rows => trueadded to allget_posts()queries to skip unnecessary SQL COUNT- Dead code block removed from recurring instance handling
run()split intorun_registrations()andrun_calendar()for clarity
Image Sideloader (class-cctec-images.php)
- Old featured image is now only deleted after the new download succeeds — previously a failed sideload would wipe the existing image with nothing to replace it
Shortcodes (class-cctec-shortcodes.php)
- Auto-injected button is now suppressed when
[pco_register]is already present in the page content — previously both would render, producing two buttons - All three button render paths (
[pco_register],[pco_event_card], auto-inject) now share a singledefault_label()method that reads thecctec_register_labeloption — previously the event card ignored this setting - CSS enqueue check replaced
tribe_is_event()withis_singular('tribe_events')for reliability across all themes
Plugin Bootstrap (comms-church-pco-tec.php)
cctec_delete_removedandcctec_register_labelwere never seeded on activation — fresh installs had no stored value, causingget_option()to returnfalse. All 10 plugin options now useadd_option()inactivate(), which is a no-op on upgrades so existing settings are never overwritten- Custom cron interval
cctec_every_6_hoursmoved fromadmin_initto a top-leveladd_filter('cron_schedules')— WP requires the interval to be registered on every load, not just in the admin, for scheduled events to fire correctly
Upgrade Notes
Drop-in replacement — no database changes, no settings reset. Existing synced events are unaffected.
Full Changelog: v1.2.2...v1.3.0