WordPress plugins — keep / remove / install¶
WordPress is now a headless backend only. The Butcher theme and every front-end-only plugin goes. This page is the source-of-truth for what stays, what's being removed, and what we still need to install.
Audit date: 2026-04-24 · 38 active plugins on the live site.
Why we're cleaning up
- 14+ of the 38 plugins exist purely to decorate the WordPress front-end — which no customer will ever see once the PWA launches.
- Each active plugin costs CPU on every request, expands the attack surface, and complicates upgrades.
- Removing ~16 plugins cuts backend-admin load dramatically and de-risks the WP→headless transition.
Keep — 16 plugins¶
Core commerce, fulfilment, security, integrations that feed the PWA.
| Plugin | Why we keep it | Notes |
|---|---|---|
| WooCommerce (10.7) | The commerce engine. | Enable HPOS once we're on PHP 8.2. |
| WooPayments (10.7.1) | Stripe for cards / Apple Pay / Google Pay. Apple Pay is your #1 method (158 of last 500 orders). | Keep for regular card payments. |
| WooCommerce Subscriptions (8.6.1) | Migration bridge — stays until all existing subs are moved to Stripe Billing, then remove. | Phase 2 task. |
| ShipStation for WooCommerce (5.0.2) | Your fulfilment engine. | Exposed via webhook; no PWA changes needed. |
| WooCommerce Shipment Tracking (2.7.1) | Tracking numbers + URLs attached to orders. | PWA reads this via /wp-json/wc/v3/orders/{id} and shows "Track your parcel" on /account. |
| Local Delivery Drivers for WooCommerce (2.0.0) | Drivers + delivery queue for your NW10 collection / local delivery. | Phase 3: wire the driver PWA to the plugin's assignment endpoints. |
| Custom Order Status Manager (2.0) | Custom statuses: Driver Assigned, Out for Delivery, Fruit Plug Delivery, Customer Collection. | Used by drivers and by ShipStation's state machine. |
| Customer Reviews for WooCommerce (5.107) | 218 reviews @ 4.76★. Irreplaceable social proof. | PWA reads reviews via the plugin's REST endpoints. |
| WooCommerce.com Update Manager (1.0.3) | Auto-updates for commercial Woo plugins (Subs, WooPayments). | Operational; keep. |
| Mailchimp for WooCommerce (6.0.2) | Customer → Mailchimp sync for email campaigns. | Phase 2: hook post-purchase flow. |
| Google for WooCommerce (3.6.1) | Product feed → Google Merchant Center for Google Shopping ads. | Keep — direct revenue channel. |
| Meta for WooCommerce (3.6.3) | Product catalogue + Facebook/Instagram pixel + Meta CAPI. | Critical for the 64k IG → site conversion story. |
| TikTok (1.4.0) | Product feed + pixel + TikTok Shop integration. | Phase 3: wire TikTok Live shopping. |
| Redirection (5.7.5) | URL redirect manager. | Essential during old-URL → new-URL migration. Keep. |
| Jetpack Protect (5.0.0) | Vulnerability scanner. | Lightweight. Keep. |
| Yoast SEO (27.4) ✅ | Confirmed keep. Useful to carry existing meta across cutover; PWA's generateMetadata will reference it where relevant. |
Hold indefinitely unless we migrate recipes/blog off WP. |
Remove — 18 plugins¶
All frontend-only or duplicate-function, confirmed by user.
| Plugin | Why remove |
|---|---|
| Elementor (3.30.4) | Page builder — PWA doesn't use it. |
| KingComposer (2.9.5) | Second page builder?! Remove. |
| Unlimited Elements for Elementor (1.5.148) | Elementor add-on — remove with Elementor. |
| Apus Themer (1.0) | Helper for the "Butcher" theme — theme is gone. |
| Mobile Menu Premium (2.8.5) | Mobile nav for old theme. PWA has its own. |
| Loading Page (1.2.7) | Custom loading screen for old theme. |
| Multi-Step Checkout for WooCommerce (2.32) | PWA has its own checkout. |
| Checkout Field Editor for WooCommerce (2.1.8) | PWA controls checkout fields. |
| XT Ajax Add To Cart (1.1.7) | Woo ships Ajax add-to-cart natively; PWA uses Store API anyway. |
| Variation Swatches for WooCommerce (2.2.3) | Frontend-only swatches; PWA renders its own variation UI. |
| Show only lowest prices in variable products (2.1.1) | Frontend-only display tweak. |
| SysBasics Customize My Account (3.9.13) | My-account page moves to the PWA. |
| Site Kit by Google (1.177) | WP-side GA/Search Console; replaced by GA4 + Meta CAPI + PostHog on the PWA. |
| Google Analytics for WooCommerce (2.1.23) | Same — PWA tracks directly. |
| Meta Tag Manager (3.3) | PWA owns meta tags via generateMetadata. |
| PDF Catalog Woocommerce Pro (1.0) | No B2B PDF workflow active. Phase 3 can rebuild if needed. |
| Cost of Goods (WPFactory 4.1) ✅ | Removed 2026-04-24. Replaced by our own COGS page: wp-admin → WooCommerce → Fruit Costs (stored as _fruitplug_cost_gbp post meta). |
| Printify Shipping Method (3.0) ✅ | User confirmed: Printify account being closed. Remove + document merch-fulfilment replacement. |
Evaluate — 2 plugins¶
| Plugin | Decision |
|---|---|
| Akismet Anti-spam (5.7) | Only matters if we leave WP comment / form endpoints publicly reachable. PWA handles its own contact form with Turnstile. Recommendation: deactivate but don't delete — zero cost to keep installed-but-off in case someone re-enables comments. |
| Jetpack (15.7.1) | The whole suite is heavy. Jetpack Protect (kept above) comes standalone. Decide based on which modules are actually used: if you use Jetpack Backup or VideoPress, keep Jetpack. If you only use the stats/CDN/related posts, remove — PWA has its own tracking and images go through Cloudinary. Recommendation: remove unless you confirm Backup is active. |
| CMB2 (2.11.0) | Custom meta-box framework. Only kept if another active plugin depends on it. Check via grep -r "CMB2" wp-content/plugins/ — if nothing outside CMB2 itself uses it, remove. |
Install — 4 new plugins¶
To make the headless pattern work smoothly.
| Plugin | Why |
|---|---|
| JWT Authentication for WP-API | Lets the PWA authenticate customers with a JWT instead of cookie sessions. Required for proper mobile-app (PWA) auth flows. |
| fruitplug-api (ours, custom) | Already written — provides loyalty, streaks, passport, custom-box pricing, referrals, push endpoints, seasonal calendar. Details. |
| WP REST Cache (optional) | Caches GET responses on the Woo REST layer. Big TTL win for product reads from the PWA. Alternative: handle cache in the PWA layer. |
| Action Scheduler | Already bundled with WooCommerce; just confirm it's visible in admin. Used by fruitplug-api for background jobs (IG sync, streak eval). |
Execution plan¶
Phase 0 (backend prep, ~1 afternoon)¶
- Back up the DB first.
wp db export backup-$(date +%F).sql - Deactivate in batches of 4 plugins. Smoke-test admin + an order after each batch.
- Order of removal (safest first):
- Elementor · KingComposer · Unlimited Elements · Apus Themer
- Mobile Menu · Loading Page · Multi-Step Checkout · Checkout Field Editor
- XT Ajax · Variation Swatches · Show Only Lowest Prices · SysBasics My Account
- Site Kit · GA for Woo · Meta Tag Manager · PDF Catalog
- Delete deactivated plugin files (free disk + stop cron hooks).
- Install JWT Auth + fruitplug-api.
- Enable HPOS (Woo → Advanced → Features).
- Upgrade PHP 7.4 → 8.2 via the hosting control panel.
Phase 1 (during PWA build, no plugin changes)¶
Settle in. Verify nothing broke. All the removed plugins are safely deactivated.
Phase 2 (subscription migration)¶
- Migrate the 1 active subscription from Woo Subscriptions to Stripe Billing.
- Once verified, deactivate WooCommerce Subscriptions. Leave installed for a month in case of rollback, then remove.
Phase 3 (post-launch tidy)¶
- Remove Yoast SEO once every URL is PWA-served and the Next.js metadata is validated with SEO tools.
- Remove Jetpack if Backup isn't being used.
Monitoring after cleanup¶
/wp-adminadmin-load time — should drop noticeably after Elementor/KingComposer go.wp_optionsautoloadtotal — runSELECT SUM(LENGTH(option_value)) FROM wp_options WHERE autoload='yes';before/after.wp-content/plugins/disk size — should drop by ~200 MB.- Order totals by status — verify nothing shifted during cleanup.