The brief
The client is a convention and visitors bureau for a regional destination city — promoting hospitality, dining, sports tourism, and the meetings business. The reach is regional: the city sits in a metropolitan area of 4.6 million people, within one of the largest combined statistical areas in the country (18+ million). Two adjacent audiences: leisure visitors and event planners, plus a third sub-audience that warranted its own brand presentation — clients of the city’s convention center.
I built the WordPress theme from Adobe XD designs in 2024. The brief from the design side was unusually disciplined — the convention-center experience needed to feel like its own site, with its own header, footer, color palette, and navigation, while remaining technically and editorially part of the same WordPress install.
What I built
A dual-brand architecture driven by page hierarchy. The interesting
piece is how the convention-center takeover happens. There’s no
URL-prefix trick, no per-page-template selection, no editor-facing “is
this the sub-brand?” toggle. A function runs on template_redirect
and walks the current page’s ancestors looking for the designated
sub-brand root page. If the current page IS that root, or has it as
an ancestor anywhere in the page tree, a global flag flips on.
header.php and footer.php read the flag and pick the appropriate
partial; the body class gets a sub-brand modifier; a sibling rule
classifies all The Events Calendar queries as sub-brand content
because events live exclusively there. The editor experience is:
nest a page under the sub-brand root, and the brand follows. No
documentation, no template picker, no convention to remember.
Two coordinated brands, one codebase. The sub-brand partials swap the logo, the navigation menus (including a separate top-utility menu and a separate mobile nav), the color palette, the header geometry — diagonal accent shapes the main site doesn’t share — and the footer arrangement entirely. A small parent-brand CTA in the sub-brand header and a parent-brand logo in the sub-brand footer act as pass-through links — a visitor inside the convention-center experience always has a clean way back to the parent site without losing their bearings.
Adobe XD to code, with fidelity. The section library has the
shape of a design system that started in XD and got translated
deliberately — sections named with consistent prefixes (HERO_,
CARDS_, FEAT_, GAL_, LOGOS_, SUB_, EAT_, BODY_), each
one mapping to a specific composition pattern from the source
designs. Tailwind utility classes hold the visual contract; ACF
flexible content groups drive what an editor can compose. The result
is a content-authoring experience that feels like assembling from a
fixed kit of well-designed parts, not a free-for-all template.
What’s notable about it
The dual-brand mechanic is the kind of thing that’s easy to do badly — URL-sniffing if-trees, duplicated theme directories, manual flags on every page — and easy to over-engineer with brand switchers and feature flags nobody asked for. The right answer was the simplest one that respects how WordPress already organizes content: ancestor walks and a flag. The branding follows the editorial intent without the editor having to think about it. That’s what good multi-brand infrastructure looks like at the page-tree level.