NEXSUM_LABS
  1. Home
  2. Work
  3. A nine-school education group went from nine WordPress installs to one admin
Book a call

[ Case study ]

EducationWordPress (multisite)WP-CLIPHP 8.3Redis Object Cache

A nine-school education group went from nine WordPress installs to one admin

Each school ran its own WordPress install, inherited from three different vendors, with duplicated plugins and three different editing conventions. A single branding change — one phone number, one term date — had to be made nine times, and one of the nine was always forgotten.

CLIENT a nine-school private education group — FOCUS Consolidate the content model first

WordPress DevelopmentWeb DevelopmentWordPress DevelopmentEducationRepresentative example
Client
a nine-school private education group
Industry
Education
Engagement
9 weeks — systems pod — engineer + automation specialist
Service
Web Development / WordPress Development
Headline outcome
Sites maintained from one WordPress admin, migration completed over 9 weeks: 9 installs → 1 admin, read from CMS inventory plus editor time logs

Representative examplesEvery case study in this library is an illustrative composite of the kind of engagement we deliver — written to show our method and standards, not to name clients.

Where they started

The group runs nine private schools across one region — nursery through sixth form — each with its own office, its own admissions cycle, and, since three different vendors had come and gone, its own WordPress install. Content had accumulated for a decade: news posts, term dates, staff lists, photo galleries. The central team existed to keep the schools consistent, but the websites had quietly drifted into nine small sovereignties, and every brand decision had to be negotiated nine times through three different editing conventions.

What it was costing

Each school ran its own WordPress install, inherited from three different vendors, with duplicated plugins and three different editing conventions. A single branding change — one phone number, one term date — had to be made nine times, and one of the nine was always forgotten.

What they could see

  • A single phone-number change had to be relayed to nine offices, and at least one school was always missed — usually discovered by a parent.
  • The same news story was written three different ways depending on which vendor's conventions that school's editor had learned.
  • Term-date updates lagged weeks behind on whichever install's admin the office found confusing.
  • Nobody could say which of the nine had current plugin versions; one school sat offline for two days before anyone at group level noticed.
  • New office staff needed a full re-walkthrough for every edit because the three admin layouts shared nothing.

The constraints we worked inside

  • The group's admissions calendar meant no site could go dark during term time.
  • School offices had non-technical editors; the new admin had to be simpler, not more powerful.
  • Legacy content, including years of news posts, had to survive the move with URLs intact.

What had been tried before

A content-sync plugin pushed edits from one designated master install to the other eight.
The installs had drifted so far apart that pushes overwrote local pages or failed silently; the group stopped trusting it within a term.
One vendor proposed rebuilding all nine sites on a premium page-builder theme.
It priced as nine rebuilds, would have reset years of archived URLs, and still left nine separate installs with nine plugin stacks to maintain.
A shared spreadsheet rota assigned each brand change to the nine offices in sequence.
The rota tracked who was next, not whether the edit fit that school's admin; the last two schools on the list always lagged.

What we proposed

We proposed one WordPress multisite: a single admin where each school is a site with its own pages and its own editors, sharing one content model, one block library, and one plugin set. The reasoning was that the group's real unit of change — brand, term dates, staffing — is group-level, while the texture of school life stays school-level. We would migrate school by school during out-of-term windows, with a verified URL map per pass, because search equity and bookmarks had to survive every cutover. Simpler for editors was the design constraint, not a side effect.

Just as important is what we ruled out, and why:

  • Rebuilding all nine sites on a hosted page-builder platformMigration would have reset years of archived news URLs, and the term-time calendar offered no window where nine sites could pause for re-editing.
  • A headless CMS with a custom frontendPowerful for developers, alien for non-technical office editors; the constraint was a simpler admin, not a more capable one.
  • Keeping nine installs with a better sync pluginDrift had already beaten sync once; any solution that left nine plugin stacks would leave nine ways to fall out of date.

How the work ran

01Consolidate the content model first

We mapped every post type, taxonomy, and template across the nine installs, then designed one shared model that let each school keep its own pages without its own plugin stack.

02Build one block library

A single block theme with theme.json tokens replaced nine themes, so brand changes propagate from one place and editors choose blocks instead of improvising layouts.

03Migrate in school-by-school passes

Each school moved in a staged window with a verified URL map and a redirect check, so search equity and bookmarks survived every cutover.

Delivered by the systems pod — engineer + automation specialist over 9 weeks, with working increments reviewed with the client every week.

The stack, and the reasoning

WordPress (multisite)
One admin, nine sites, each with its own editors and pages — the shared plugin set and block library end per-school drift, which separate installs could not.
WP-CLI
The migration ran as scripted, repeatable passes — one command sequence per school — because hand-migrating nine content archives is where URL mistakes come from.
PHP 8.3
The hosts supported it and it ended the inherited version debt from three vendors; one supported runtime across the group beats nine states of upgrade.
Redis Object Cache
Shared menus and directory pages hammered the database across nine high-traffic sites on modest hosting; object caching absorbed the repeats without a hosting upgrade.
Cloudflare
Cutovers happened Friday evenings under a term-time freeze; edge caching and instant redirects made each school's switch reversible and invisible to families.

What went wrong

Obstacle

One school's events calendar ran on an inherited plugin whose recurrence data didn't fit the shared content model; the mismatch surfaced in week six, after four schools had already cut over.

Handled: We wrote a converter for that plugin's export shape, re-ran the school inside its own out-of-term window, and added a data pre-flight audit to every remaining pass.

Obstacle

Two schools' news archives carried shortcodes left by the old vendors; the converter handled the six variants found in discovery, and a seventh appeared during the final migration pass.

Handled: We extended the parser, re-ran only the affected posts, and confirmed against the URL map that nothing else had moved; the morning redirect check came back clean.

Obstacle

Mid-migration, one school announced an open day and needed a homepage change inside a cutover window when its old admin was already frozen.

Handled: The school's own editor made the change on the new install after a ten-minute orientation; we watched the cutover checks stay green and logged that edit as the handover test.

How we worked together

Cadence
Tuesday morning stand-up with the group's operations manager; each school's migration pass ended with a walkthrough to that school's office staff and a signed-off redirect check.
Client side
Each school nominated an office administrator, and that administrator tested editing on staging and fed back within the pass window; the operations manager owned the calendar around them.
Decisions
Content-model disputes went to a one-page memo the group director answered within two days; cutover timing stayed with each school's office.
They provided
Admin access to all nine installs, the vendors' handover notes, term-date calendars for scheduling windows, and office time for editing trials on staging.

What changed

The headline: sites maintained from one wordpress admin, migration completed over 9 weeks9 installs → 1 admin, read from CMS inventory plus editor time logs. A second check: weekly content-update effort across the group at ~6 hrs → ~1 hr.

The Friday-afternoon phone-number ritual ended. Brand and term-date changes happen once in the group admin and appear on every school site, and the offices stopped emailing each other about whose copy was current. Editors describe the new admin as shorter, not bigger — they pick a block, fill the fields, done. The group's director now plans site changes around admissions campaigns rather than around which vendor is available, and the quarterly vendor conversation no longer exists.

The result was read from CMS inventory plus editor time logs against the pre-engagement baseline over the stated window, with a guardrail check on weekly content-update effort across the group. Where platform-reported numbers and business outcomes differ, this record says which layer it is quoting.

What they own now

  • The multisite admin with all nine schools, editors provisioned, and role scopes documented.
  • A WP-CLI migration toolkit in the group's own repository, ready for future acquisitions.
  • The redirect map and URL-check script, rerunnable before any future content move.
  • A written editing guide per school role, tested on non-technical office staff.
  • Cloudflare and hosting credentials under the group's own accounts, not ours.

What we would do differently

We would audit the three vendors' plugins before writing the content model, not after — one inherited plugin's data shape forced a late schema change.

Web DevelopmentWordPress DevelopmentEducationWordPress (multisite)

Next case study

An 11-location restaurant franchise gave local editors their own sites back