Custom themes and block libraries
We model your content types first, then build the blocks an editor composes pages from, with rules about what may sit beside what. Block theme or classic, plus ACF Pro where blocks fit badly.
Most WordPress sites we inherit were edited straight onto production, have the CRM sync buried in the theme, and hold premium licences registered to an agency nobody has spoken to since 2023. That's a delivery practice problem, not a WordPress problem.
WordPress development is custom engineering on top of WordPress core — content modelling, block or ACF-driven templates, and business logic written as plugins. It is not theme installation. Canopus builds WordPress the way we build software: in Git, reviewed by a second engineer before merge, released through staging, handed over documented.
One WordPress site has four places code can sit. Which layer a feature goes into decides whether it still works after the next theme change — and nobody asks it at quote stage.
Scroll the diagram sideways to see the verdict column.
The rule is simple: content lives in fields, behaviour lives in plugins, appearance lives in the theme. We apply it on every build — which is why a Canopus WordPress site can be redesigned by somebody else without losing its integrations.
Six kinds of work, one engineering practice underneath all of them.
We model your content types first, then build the blocks an editor composes pages from, with rules about what may sit beside what. Block theme or classic, plus ACF Pro where blocks fit badly.
Anything that isn't presentation goes into a plugin namespaced to you. Capability checks, nonces and escaped output are part of the build, not a hardening pass afterwards.
Stores that outgrew what plugins can express: B2B price lists, quote-to-order approval, subscriptions, stock reconciled against an ERP. We work with High-Performance Order Storage rather than around it.
WooCommerce developmentCustom REST endpoints, authenticated webhooks and syncs to HubSpot, Salesforce, Zoho CRM or an ERP. Every link gets an idempotency key, retry with backoff, and a visible failure rather than a silent one.
Profile with Query Monitor first, then fix what it shows — the unindexed meta_query, the autoloaded options table nobody has opened since 2019, the plugin loading assets on all 400 pages. Redis comes after.
Injected redirects, pharma spam, fake administrator accounts, cron-based reinfection three days after the clean. We remove the payload, then find the entry point and close it — a clean-up that skips step two is a scheduled repeat.
WordPress rescue & securityWe build in Next.js and Laravel too, so there's no commercial reason for us to push you onto WordPress. This is the test we apply.
/wp-admin loginOur most common recommendation is the boring one: WordPress for the marketing site, a separate application for anything behind a login, joined by SSO. Two systems each doing what they're good at beats one heroic install with forty plugins nobody dares update. Still choosing? Start at website and web development.
A stage whose deliverable can't be named is a stage you can't check. Durations assume a named lead, one or two WordPress engineers and QA.
Every content type mapped to its fields, relationships and archive, and a check on whether each system you want connected has a documented API. This is where a build gets cheap or expensive.
You receive: a field map, an integration list with the risky ones flagged, and a fixed-price proposal — yours to take elsewhere.
Not a stack of page mockups. We design the blocks an editor composes pages from — a layout system with no rules becomes forty inconsistent pages inside a year.
You receive: the approved block inventory and a component library.
Staging runs production's PHP version, object cache and cron, or it proves nothing. Every merge is reviewed by a second engineer against the WordPress Coding Standards.
You receive: a staging URL from week one and a working demo every second week.
The URL map is written before anything moves, and redirects tested against a live crawl. Then cross-browser and mobile QA, and Core Web Vitals on a throttled connection.
You receive: the URL map with single-hop 301s, a report of what didn't migrate, a QA sign-off sheet and a performance baseline.
Thirty days in which defects traceable to our build are fixed at no charge, plus one recorded session walking your developer through the repository, the deploy and the rollback.
You receive: the handover pack below, and the recording.
Every agency claims quality. Almost none will tell you what physically lands in your hands at the end. This is ours, and it's the same list on a $4,000 site and a $60,000 one.
Your GitHub or Bitbucket organisation, full commit history — not a zip emailed on the last day. The first commit lands in week one.
Written for a developer who has never seen the project — install, run locally, build, deploy. If a new engineer can't get it running in an afternoon, it isn't finished.
Every premium plugin, its renewal date and the account it belongs to — yours. Updates never stop because a relationship ended.
Local, staging and production side by side — PHP version, cache layer, cron method. Parity is a written deliverable, because staging that differs from production is theatre.
How a release goes out, who approves it, how to roll one back — steps someone can follow under pressure on a Friday.
Why the expensive choices were made — fields instead of a page builder, logic in a plugin instead of the theme. Your next developer inherits reasoning, not archaeology.
Hosting, DNS, CDN and analytics accounts are yours from day one, with us added as collaborators. Our access is removed on written request within one business day.
Three we inherit on almost every takeover, all cheaper to prevent than to unpick — and none of them WordPress's fault.
Edited over FTP or in the admin's theme editor. No history, no diff, no way back when the contact form stops posting on a Friday.
What we do instead: the site goes into version control before we change a line, and production is only ever written to by a deploy.
The CRM sync, the shipping override and 200 redirects live in functions.php. It works fine — until the redesign replaces the theme and quietly deletes all three.
What we do instead: behaviour moves into a plugin namespaced to you, so it survives any theme change, including one made by an agency that isn't us.
Nobody updates because nobody can test it, and nobody can test it because staging doesn't match production. Most hacked sites we're called about got there through a known vulnerability with a patch available for a year, not a clever attack.
What we do instead: environment parity first, then a documented monthly routine that makes updating a fifteen-minute job instead of a gamble.
If a proposal won't name its tools, there's usually a reason. Ask any agency for this list.
Two WordPress sites with the same page count are rarely the same job. These four things are why.
Below that, a well-chosen commercial theme configured by a competent freelancer will genuinely serve you better than we will — you'd be paying us for coordination overhead rather than engineering. We say so on the first call. It costs us a project and saves you a bad one.
We decline two other briefs outright: reskinning a marketplace theme and calling it custom, and work where the code can't go into version control.
Three ways to engage: a fixed-price project after paid discovery; a named WordPress engineer billed monthly; or white-label delivery under your NDA. Once the site is live, content and technical SEO sit under digital marketing and SEO — separate, because it's continuous rather than a build task.
Three things move the number: how many content types need modelling, whether the systems you want connected expose a documented API, and how much content is migrating. Page count barely matters. We quote a fixed price after a short paid discovery, and you keep the field map and the written estimate either way. Nothing under $3,000.
Four to seven weeks for a custom-theme marketing site once content is ready, eight to fourteen when the content model spans several types or two systems need integrating, plus three to six weeks for a migration above a few hundred URLs. Projects slip on content and sign-off, not on code.
A named technical lead who stays from the first commit through handover, one or two WordPress engineers, and QA. The lead doesn't rotate mid-project. Every merge is reviewed by a second engineer, so your site is never something only one person understands.
Yes, and it isn't a transfer we have to remember to make. Code lives in your repository from the first commit; IP assigns to you on payment for the milestone it was written in. Premium licences such as ACF Pro are bought in your name, and hosting, DNS and analytics accounts are yours from day one.
A 30-day defect warranty at no cost covers bugs in what we built. After that, updates, backups, monitoring and a monthly patch routine are a retainer, priced separately. Taking the site in-house is a supported outcome — that's what the handover pack is for, and we run a recorded walkthrough with your developer.
WordPress when a marketing team publishes without a developer and the content model is editorial. Next.js when front-end speed matters commercially and nobody edits weekly. Laravel when roles, permissions and workflow are the product — at that point it's custom software with a public front door. We build all three, so the recommendation costs us nothing either way.
We'll maintain a site that already uses one, and we'll tell you when a builder is genuinely right: a small marketing site, weekly publishing, no integrations, no developer on retainer. We won't start a new custom project on one — the layouts become shortcodes only that plugin can render, so they die with it.
Yes, with discipline — WordPress is rarely the reason a site is slow. WordPress builds carry the same budget as every other build: LCP under 2.5 seconds, INP under 200 milliseconds, CLS under 0.1, on a mid-range Android over throttled 4G. That budget is what rejects the four-slide hero carousel at design stage.
Bring the integration you're worried about, or the site you inherited and can't safely change. Where you give us a URL, we run a real Core Web Vitals check and a plugin audit before replying.