A WordPress template that survives being copied
A client needed one master site he could copy for each new location instead of building every site from scratch. A copied WordPress install does not break on files. It breaks on numbers: the form, the menu and the photo all hold on to identifiers handed out by the database that made them, and those numbers mean nothing in the copy. This template contains no such number anywhere. Below: what breaks, what to use instead, and where the honest limit of this work is.
One master site, many copies
The client runs local lead-generation sites, each one for a different kind of service. Every site does the same job: it explains a service, it shows a phone number, it collects an enquiry. What differs is the name, the colours, the contact details and the wording. Building each one by hand is the obvious way and an expensive one: the twentieth site costs as much as the first.
So the deliverable was not a website. It was a site that copies well, plus the scripts that install and update it. Two very different quality bars: a website has to look right, a template has to still work after somebody duplicates it and changes six things.
A copy breaks on numbers, not on files
Copy a WordPress install and the files arrive intact. The database arrives too. What does not survive is the meaning of the numbers inside it, because half of WordPress refers to things by an ID that the original database invented.
The copied site looks finished and quietly is not. The contact form renders as nothing at all, the menu comes up empty, one photo is a broken frame. Nobody sees an error, because none of this is an error: every one of those lookups succeeded and returned nothing.
The form is embedded by its post ID. The menu is attached by its term ID. The card photo is an attachment ID. All three numbers were assigned by whichever database created them, so in a copy they point at nothing, or worse, at whatever else happens to sit at that number.
Nothing in the template is allowed to resolve by a number the database made up. The form is found by its slug. The menu is read by its slug. The placeholder photo stopped being an upload and became a file in the theme, because an attachment ID belongs to the database that made it and a theme file belongs to the theme.
This is the whole trick and it sounds too small to matter. It is the difference between a copy that works and a copy that needs an afternoon of clicking, every time, forever.
Six things to change, nine fields
Everything that differs between sites sits in one place in the WordPress Customizer: business name, logo, brand colour, phone, email and address. Six things a person thinks about, entered through nine inputs, and nothing else has to be touched when a site is copied.
The address is four of those nine, and that is deliberate. Google wants a local business address as separate components, not as one line of free text. One text field would have to be split back apart by guesswork, and the first address typed in an unexpected shape would quietly produce invalid structured data on a site whose entire purpose is local search. The visible footer line is assembled from the same four parts, so what a visitor reads and what a crawler parses cannot drift apart.
The design stayed in the database, against my recommendation
I recommended keeping the design in code, in the theme, where it can be versioned and where fifty sites cannot drift apart. The client said no, and gave me the reason in the same message: these sites are meant to look different from each other, not identical. They are not branches of one franchise.
He was right and I was answering a question he had not asked. Identical-looking sites are a problem when a brand is the product. Here the site is the product, and each one is supposed to feel like a different local business. So the design lives in the database as global classes a person can edit per site, and my job stopped being to prevent drift and started being to make drift cheap.
I am writing this down because it is the useful part. The recommendation was technically sound and strategically wrong, and the only reason I found out is that he pushed back instead of nodding.
Install and update without clicking
Three scripts do the work. A first install that builds an empty WordPress into the master. An incremental deploy that mirrors the theme, removes files that left the repository and rebuilds what has to be rebuilt. And a migration that changes the content already on the page.
All three are idempotent, which matters more than it sounds. Running the first install twice repairs rather than duplicates, and it refuses outright when the live content differs from the seed, because the client edits his own site and a script that overwrites his wording is worse than no script. The migration parses the blocks already on the page and changes only what has to change, carrying his own text through untouched.
That last property is the one with a test behind it: eight assertions, including that his exact wording survives the move and that a second run leaves the markup identical byte for byte. A migration you are afraid to run twice is a migration you will run at the wrong moment.
What this template does not do
The copying itself was a separate stage and it was never commissioned, so I never built it and I have never clicked the duplication tool in the client's hosting panel. What is proven here is the master and the tooling around it: a site with nothing in it that a copy would break, and the scripts that install and update that site.
So I have no numbers about fifty live sites, no traffic figures and no rankings, and you will not find them anywhere on this page. I would rather write a shorter case study than a wrong one.
One thing fails quietly. The enquiry form sends to whatever address sits in the Customizer email field. Leave that field blank on a new site and the enquiries go to the site's admin address instead. The mail still sends, so nothing looks broken. Fill your fields, then send yourself one test enquiry before a phone number goes live anywhere.
Several locations to cover?
Tell me how many sites you expect and what actually differs between them. That answer decides whether you need a template at all, and I will say so if you do not.
Ask about your build