Skip to content

WordPress admin guide

How ops uses the WordPress admin with the new headless stack.

Logging in

The login URL is hidden by the Easy Hide Login plugin. Use the bookmark, or ask an admin for the current path. If locked out, disable the plugin via SSH:

A2_PASSPHRASE=... python infra/a2/a2.py run 'wp plugin deactivate easy-hide-login'

What lives where

Task In wp-admin In the PWA
Add a product ✅ Products → Add New reads within 5 min (ISR cache)
Edit product price / description ✅ Products → Edit reads within 5 min
Change product category ✅ Products → Edit immediate on next fetch
View orders ✅ Woo → Orders (Phase 1.5 — admin dashboard inside PWA planned)
Fulfilment labels / tracking ✅ ShipStation integration tracking URL shows on /account/orders/*
Subscriptions ✅ Woo → Subscriptions (Phase 2: Stripe Billing) /subscribe tiles + portal link
Loyalty points balance /account (uses wp_fruitplug_points_ledger)
Seasonal fruit calendar ✅ Tools → Fruit Plug → Seasonal (Phase 1.5 UI) greys-out unavailable fruits in the box builder
Fruit costs (COGS) ✅ WooCommerce → Fruit Costs feeds margin reports (Phase 4)

Common ops tasks

Mark an order shipped

wp-admin → Woo → Orders → open order → change status to Completed. ShipStation gets notified; tracking number comes back into the order automatically.

Issue a refund

wp-admin → Woo → Orders → open order → Refund button. WooPayments refunds via Stripe. The customer's Plug Points for that order do not auto-reverse — for that, append a negative-delta row:

A2_PASSPHRASE=... python infra/a2/a2.py run '
  wp db query "INSERT INTO wp_fruitplug_points_ledger
    (user_id, order_id, delta, reason)
    VALUES (<user>, <order>, -<points>, \"refund\")"'

Add a product to a box template

Templates live in two places that must be edited together in the same commit:

  • apps/web/lib/box-templates.ts (frontend)
  • wp-plugin/fruitplug-api/includes/BoxTemplates.php (server-side validator)

Edit the eligible_slugs for the relevant section in both files, then redeploy (PWA + plugin). Phase 4 ships a wp-admin UI at WooCommerce → Box Templates that writes to a plugin table, eliminating the double-edit and the redeploy.

Set a fruit cost (COGS)

wp-admin → WooCommerce → Fruit Costs → enter the per-unit cost in the Cost column → Save. Leave blank to clear. Used for margin reports.

Check the site health

# From your terminal
curl -s https://fruitplug.co.uk/wp-json/fruitplug/v1/health | jq
curl -s https://dev.fruitplug.co.uk/healthz | jq

Both should return status: ok.

Things to NOT do in wp-admin

  • Don't activate Elementor, KingComposer, or any page builder — we removed them deliberately; the PWA builds the frontend.
  • Don't change the theme — it doesn't matter which theme is active (no public traffic hits wp-admin's frontend), but switching could trigger noisy admin notices.
  • Don't edit products in bulk via the old CSV exporter — use the Woo native bulk editor or SSH wp-cli for scripted changes.
  • Don't activate the Cost of Goods plugin againfruitplug-api now ships its own page at WooCommerce → Fruit Costs. Enter per-product costs there.

Emergency contacts / references

  • A2 Hosting support: A2 cPanel → Help
  • Stripe: dashboard.stripe.com
  • ShipStation: ship.shipstation.com
  • DNS: GoDaddy account → fruitplug.co.uk DNS Management
  • Full runbook for the Phase 0 cleanup: A2 host runbook