Skip to content

Backend — WordPress + WooCommerce

What's running right now on A2

Package Version
WordPress 6.9.4
WooCommerce 10.7.0
PHP 8.2.30 (upgraded from EOL 7.4 on 2026-04-24)
MySQL 8.0.39
WP-CLI 2.12.0
Host LiteSpeed @ az1-ts106.a2hosting.com

Active plugins (21, post-cleanup)

Plugin Version Role
WooCommerce 10.7.0 Commerce engine
WooPayments 10.7.1 Stripe wrapper — Apple Pay #1 method (34% of orders)
Woo Subscriptions 8.6.1 Migration bridge until Stripe Billing (Phase 2)
fruitplug-api (ours) 0.1.0 Custom REST + 7 wp_fruitplug_* tables
ShipStation for Woo 5.0.2 Fulfilment engine
Woo Shipment Tracking 2.7.1 Tracking number + URL on orders
Local Delivery Drivers 2.0.0 Driver queue (NW10 delivery)
Custom Order Status Manager 2.0 Driver Assigned / Out for Delivery / Fruit Plug Delivery / Customer Collection
Customer Reviews for Woo 5.107.0 218 reviews @ 4.76★
WooCommerce.com Update Manager 1.0.3 Paid-plugin updater
Mailchimp for Woo 6.0.2 Email marketing sync
Google for Woo 3.6.1 Merchant Center feed
Meta for Woo 3.6.3 Facebook + Instagram pixel + CAPI
TikTok for Business 1.4.0 Pixel + catalogue sync
Redirection 5.7.5 URL redirect manager
Jetpack Protect 5.0.0 Vulnerability scanner
Easy Hide Login 1.6 Hides /wp-login.php
Yoast SEO 27.4 Legacy SEO meta
CMB2 2.11.0 Custom meta-box framework (dependency check pending)
Jetpack 15.7.1 Under evaluation — remove unless Backup is used
Akismet 5.7 Under evaluation — no public WP comments needed

Compared to audit baseline of 38 active plugins, we're down 45%. See A2 runbook for the exact cleanup history.

APIs the PWA consumes

Woo Store API — /wp-json/wc/store/v1/

Session-based (Cart-Token + Nonce headers). No credentials needed.

Endpoint Purpose
GET /products Catalogue (filters: category, tag, on_sale, search, price)
GET /products/{id} PDP data including full attributes + descriptions
GET /products/categories Top-level categories
GET /cart, POST /cart/add-item, /update-item, /remove-item Cart ops
POST /checkout Place order (with payment_method)

fruitplug-api — /wp-json/fruitplug/v1/

Our custom plugin. Provides what Woo doesn't.

Endpoint Auth Purpose
GET /health public Plugin + WP + WC + PHP + DB version snapshot
GET /loyalty/me logged-in Points balance + streak tier + passport stamps
GET /box/templates public Full box-template list (shape matches the TS types)
POST /box/price public Validate + price a draft box against its template; HTTP 422 if illegal
POST /box/save logged-in Persist a named custom box (revalidated server-side)
GET /box/mine logged-in My saved boxes
GET /box/{slug} public Shareable box by slug
POST /push/subscribe public Register a Web Push PushSubscription
POST /push/unsubscribe public Remove a subscription
GET /referrals/mine logged-in My referral codes + status
POST /referrals/code logged-in Lazily create my referral code
GET /seasonal public Seasonal calendar + current-month in-season slugs
PUT /seasonal admin Update the calendar

Woo REST v3 — /wp-json/wc/v3/

Admin-only, consumer-key authenticated. Used by server-side code in the PWA for order reads, customer profile reads, subscription management. Never called from the browser.

WP REST — /wp-json/wp/v2/

CMS content (pages, posts, media). Used if we keep recipes/about in WP instead of MDX.

What we did to the backend on 2026-04-24

Full play-by-play: A2 host runbook.

Summary:

  1. Backed up DB + plugins + themes + uploads
  2. Upgraded PHP 7.4 → 8.2 (with extension fix-up)
  3. Removed 18 frontend-only plugins in verified batches (38 → 20)
  4. Cleaned 578 wp_posts revisions
  5. Rebalanced categories (created Rare & Special, zeroed Uncategorised, removed Signature Box duplicate from Fruits)
  6. Installed + activated fruitplug-api (21 plugins now)

Still to do

  • HPOS enable (wp-admin → Woo → Settings → Advanced → Features → High-Performance Order Storage) — sync-first migration, one-click
  • Stripe Billing subscription migration (Phase 2 — replaces Woo Subscriptions for the 1 active + win-back to 25 dormant)
  • Re-evaluate Jetpack (remove unless Backup is used) + Akismet (remove — no WP comments)
  • Fruit descriptions rewrite — 26 fruits × ~80 words each, based on the existing Preparation Guide content