Skip to main content

I Shipped a Tiny WordPress Plugin Instead of Editing the Theme

How I shipped Abujiggy Fixes 1.1.0 — a front-end-only WordPress plugin that swaps dead Tiqets/Viator markup, trims fonts, and maps theme affiliate links without editing the theme.

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, sha256 a169b06910cba505e16cf3ad5917b6a91c134733efe5f420426a913e1e8e6733)
  • 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_DISABLE in wp-config.php or the filter abujiggy_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_links static map for the theme’s Klook/Tiqets box and /travel-deals/ (Booking.com pills/tile → Airalo eSIM / Kiwitaxi)
  • 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.js 166→1 (contact); Google Fonts full sets 166→0
  • 1.1.0 affiliate harness: 35 pages changed, only anchors; wrong hard-coded marker 107→0; booking.com 24→0; *.tpx.lv 0→175

This is not a theme fork. It is the durable layer for markup REST cannot see.

Advertisement

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__links PHP/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 gone events post 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)

  1. Crawl first: separate content bugs (REST-fixable) from theme/plugin-injected markup.
  2. Prefer a tiny front-end MU/plugin with kill switches over patching a third-party or custom theme in place.
  3. Keep transforms pure and testable (php -l, PHPCompatibility, unit harness on saved HTML, local WP stub, headless Chrome).
  4. Prove feed/REST/login unchanged; prove deactivate restores byte-identical HTML.
  5. 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.

Written by MustafaEngineer running a 24/7 homelab since 2022. Every guide here is built and tested on my own hardware. No paid placements.

Keep reading