A UAE travel blog I run (abujiggy.com) still had dead theme markup after a long REST cleanup pass: a 404 Tiqets Dubai URL on dozens of pages, Sponsored·Viator cards pointing at gone /events/ URLs, Turnstile on every page, a fat avatar PNG, and fonts nobody asked for.
I already fixed what REST could touch. Editing the abujiggy-wanderlust theme was the tempting next move. I shipped a tiny front-end plugin instead.
What I actually shipped
- Abujiggy Fixes 1.1.0 (
abujiggy-fixes-1.1.0.zip, sha256a169b06910cba505e16cf3ad5917b6a91c134733efe5f420426a913e1e8e6733) - Front-end only: no DB writes, no external calls, no settings UI — deactivate to revert (then purge the RunCloud Hub page cache)
- Kill switches via
ABUJIGGY_FIXES_DISABLEinwp-config.phpor the filterabujiggy_fixes_enabled - Fixes in one package:
- Live Tiqets Dubai URL swap (
c260apu→c60005) - Remove dead Sponsored·Viator
/events/cards - Cloudflare Turnstile only on
/contact/, deferred - Self-hosted Font Awesome subset; Google Fonts cut to Plus Jakarta Sans + a tiny Amiri subset for the Arabic wordmark
- Homepage hero preload; 96 px WebP author avatar; deferred GSAP/motion scripts
- Compact Complianz mobile banner CSS; contact heading contrast CSS on
/contact/only affiliate_linksstatic map for the theme’s Klook/Tiqets box and/travel-deals/(Booking.com pills/tile → Airalo eSIM / Kiwitaxi)
- Live Tiqets Dubai URL swap (
- Tested before install:
php -l; PHPCompatibility 7.4– clean; unit tests; harness over ~166 crawled pages; local WordPress 7.1.2 SQLite stub theme; headless Chrome iPhone + desktop; feed/REST/login byte-identical with the plugin on/off; after deactivate byte-identical to pre-activation - Aggregate crawl (before → after): tiqets dead 34→0; event dead links 15→0; avatar PNG refs 264→0; cdnjs FA 166→0; Turnstile
api.js166→1 (contact); Google Fonts full sets 166→0 - 1.1.0 affiliate harness: 35 pages changed, only anchors; wrong
hard-coded marker107→0; booking.com 24→0;*.tpx.lv0→175
This is not a theme fork. It is the durable layer for markup REST cannot see.
Why REST was not enough
The 30 Sep REST pass fixed broken post content, slug collisions, WebP featured images, and (later) in-post Travelpayouts Partner Links. It could not touch theme-injected boxes:
- The “Book experiences” Tiqets link lives in
.abj-exp__linksPHP/CSS — not in post JSON, widgets, menus, or template parts exposed over REST - Sponsored·Viator cards (
abj-inline-event) are injected on render against a goneeventspost type (410) - Turnstile, Font Awesome, Google Fonts, avatar, GSAP/motion, and Complianz layout are theme or plugin enqueue/CSS problems with no REST settings route I could write
So the Travelpayouts tracking ship covers in-post Partner Links. This plugin is the complementary layer for theme-rendered fixes and the static affiliate map Drive alone should not own.
What the plugin refuses to do
- No options table rows, no admin screens, no “one more settings page”
- No runtime Travelpayouts API calls — affiliate rewrites use a static map baked into the zip
- No touch of feed, REST, login, or admin output (those stay byte-identical on/off)
- No invented Lighthouse score promises, traffic claims, or AdSense numbers
- No silent theme edit that vanishes on the next theme update
Ship checklist (if you copy the pattern)
- Crawl first: separate content bugs (REST-fixable) from theme/plugin-injected markup.
- Prefer a tiny front-end MU/plugin with kill switches over patching a third-party or custom theme in place.
- Keep transforms pure and testable (
php -l, PHPCompatibility, unit harness on saved HTML, local WP stub, headless Chrome). - Prove feed/REST/login unchanged; prove deactivate restores byte-identical HTML.
- After activate/deactivate on production, purge the page cache (RunCloud Hub in this stack).
FAQ
Is this the same ship as the Travelpayouts post?
No. That post is about joining Travelpayouts and rewriting 43 in-post anchors via Partner Links + backups. This post is Abujiggy Fixes 1.1.0 — front-end transforms for theme boxes, assets, and a static affiliate map. Complementary, not a duplicate.
Why not just edit the theme?
Theme edits are fragile across updates and hard to unit-test in isolation. A deactivate-to-revert plugin with per-fix kill switches is the reversible patch I wanted.
Closest related Builders notes?
I Wired Travelpayouts Tracking Into a UAE Travel Blog for the same site’s in-post tracking, and I Built an Admin-Only WordPress CRM With Cursor for another small WordPress plugin ship pattern.
