Most sites reach a point where no plugin in the WordPress.org repository does the job — the right answer is a purpose-built plugin that solves exactly that problem, written to standards that keep it maintainable five years from now.
Recent work: thisismyurl-svg-support, thisismyurl-login-support, thisismyurl-webp-support, thisismyurl-external-link-control — public plugins shipping since 2008 · site-specific: custom CPTs, REST endpoints, download tracking, glossary system, SEO emitters, tool calculators · thisismyurl-shadow diagnostics plugin
Practitioner context: WordPress development since 2007. PHPCS (WordPress Coding Standards), PHPStan, and php -l are the baseline — not the finish line. $275 CAD/hr, Fort Erie, ON.
Plugin development requests tend to arrive from one of three directions: a site doing something unusual enough that nothing on the .org repo covers it; a site that found a plugin which almost worked but whose author stopped responding in 2019; or a site that has been piling filter callbacks onto an existing plugin for so long that the extension is larger than the plugin it wraps. All three are legitimate reasons to commission a custom build. What they share is that the off-the-shelf route has been exhausted, and what you need now is code written for your specific problem — not a general-purpose plugin with half its surface disabled and the rest worked around.
Who this is for
- ✅ Internal teams or product companies who need a clean integration between WordPress and a system they already run — a CRM, an internal database, a billing platform, a proprietary API.
- ✅ Sites that found an abandoned plugin with the right idea and a dead GitHub repository. I can assess it, tell you whether a rewrite or a fork is the right call, and execute whichever path makes more sense.
- ✅ Development teams who have been extending a third-party plugin through filters and hooks until the custom code dwarfs the plugin itself.
- ✅ Other agencies and freelancers who need senior plugin work executed cleanly while their team focuses elsewhere.
- ✅ Buyers who understand that a properly built plugin costs less over four years than a cheap build that needs a rewrite in eighteen months.
- ❌ Anyone whose total budget is under $2,750. Below that threshold you are paying for a stub, not a plugin.
- ❌ Buyers who want to skip the written spec. The spec is not overhead — it is where I find out whether we agree on what the plugin is supposed to do before a line of code is written.
What I build
- Custom post types and taxonomies with admin columns, metaboxes, and capability-mapped access controls.
- REST API endpoints — authenticated or public, schema-documented, respecting WordPress nonce and application-password patterns.
- Third-party integrations — CRM connectors, payment gateway hooks, external API polling, webhook receivers.
- Admin UIs — settings pages, data tables, bulk-action screens, and dashboard widgets built with the Settings API.
- WP-CLI commands for import jobs, maintenance tasks, and operations that belong in a terminal, not an admin screen.
- Download tracking and access control — gated file delivery, engagement logging, capability-gated REST routes.
- Gutenberg blocks — single blocks or small sets, built with
@wordpress/scripts, server-side-rendered where JS-off behaviour matters. - Site-specific plugin architecture — extracting
functions.phpspaghetti into a proper plugin with a namespace, autoloader, and hook manifest. - Diagnostic and tooling plugins — admin-only instrumentation, shadow-testing infrastructure, performance samplers.
What every plugin ships with
- PHPCS passing against WordPress Coding Standards — no exceptions for “it works fine.”
- PHPStan static analysis at a level appropriate to the codebase complexity.
php -lclean on every file before delivery.- Nonces on every state-changing form or AJAX action.
- Capability checks on every privileged operation — no relying on the admin UI to gate what the code should gate itself.
- Prepared statements on every database query — no raw string interpolation into SQL.
- PHPDoc on all public functions and hooks.
- A short developer README covering the hook surface, filters, and any CLI commands.
- Semantic versioning from day one, with a documented update path if the plugin will receive future maintenance.
- 30-day defects warranty after delivery. Bugs in the delivered scope are fixed at no charge; scope changes are a change order.
What it costs
I bill at $275 an hour. Simple projects are quoted time-and-materials; anything over 20 hours I will quote fixed-fee after the scoping session so you know the number before the build starts.
| Plugin complexity | Typical hours | Typical cost (CAD) |
|---|---|---|
| Simple — single CPT, a basic shortcode or widget, or an admin settings panel | 10–20 hrs | $2,750–$5,500 |
| Mid-complexity — REST endpoints, CPT + taxonomy + admin UI, or a third-party API connector | 20–50 hrs | $5,500–$14,000 |
| Complex — multi-CPT system, public API surface, WP-CLI command set, or multiple WordPress subsystems coordinated | 50–80 hrs | $14,000–$22,000 |
The scoping session (1–3 hours, billed) produces a written technical spec — data model, endpoint list, capability matrix, hook surface. That spec is a deliverable: if you decide not to proceed, you keep it and can take it elsewhere.
The scoping session that comes with the engagement
Every custom plugin engagement starts with a paid scoping session (1–3 hours) that produces a written technical specification — data model, endpoint list, capability matrix, hook surface, and the build estimate. The scoping document is a deliverable you can take elsewhere if you decide not to proceed with the build:
- Simple plugin ($2,750–$5,500) — scoping session is included in the engagement price; the technical spec is the contract.
- Mid-complexity ($5,500–$14,000) — longer scoping session covering the integration shape with third-party systems, the data flows, and the capability-and-nonce surface; included in the engagement price.
- Complex builds ($14,000–$22,000) — the scoping session produces a deeper architecture document covering the multi-subsystem coordination, the WP-CLI surface, and the test strategy; included in the engagement price.
If the scoping shows the plugin idea is the wrong answer — a content-model change, a different integration architecture, or an existing plugin in the .org repo that already covers the requirement — the document will say so. The scoping work is honest about whether a custom plugin is what you actually need.
What comes alongside the plugin work
Plugin engagements are senior developer-to-developer work. The training piece is structured around the developer team that will maintain the plugin after handover.
- A plugin handover walkthrough for your developer team covering the hook surface, the capability matrix, the test use, the deployment process, and any WP-CLI commands shipped with the plugin.
- A developer README covering the architectural decisions, the integration touchpoints, and the upgrade path for future maintenance — not generic plugin documentation, but the actual rationale for the codebase.
- PHPCS, PHPStan, and
php -lbaselines documented alongside the code so the team can hold the same standards going forward. - 30-day defects warranty after delivery on bugs in the delivered scope.
- Email Q&A access for the first 30 days post-delivery on anything related to the plugin codebase, no per-ticket limit.
Scoping credit and the take-it-elsewhere clause
WordPress training classes delivered as part of this package
The training surface above is built around the WordPress training catalogue. The specific classes delivered as part of this engagement:
- Bespoke workshop on top of the catalogue. A plugin handover walkthrough for your developer team covering the hook surface, the capability matrix, the test use, and any WP-CLI commands shipped with the plugin.
Each course in the WordPress training catalogue has its own public-cohort schedule and pricing if your team wants the catalogue cohort outside an engagement. Within an engagement the delivery is tailored to your specific build — same curriculum, your context, your dashboard.