Technical
The WordPress Block I Ship With Every Client Site
Most WordPress work in 2026 is still theme tweaks and plugin glue. I kept noticing one block I was rebuilding for every client: a flexible call-out that locked to the brand style. I finally packaged it and it now ships with every WordPress project I take on. Here is what is in it and why it matters more than it sounds.
What the Block Does
- Renders a headline, body, and CTA
- Pulls brand colors from theme.json automatically
- Offers three layout variants (card, banner, sidebar)
- Supports dark mode out of the box
- Exposes the CTA URL as a standard link, not a hardcoded attribute
The whole thing is maybe 200 lines of JavaScript and PHP combined. It is the kind of thing every WP consultant builds fifty times. Once is enough.
Why It Saves Hours
Client edits happen on day one, day ten, and day one hundred. Giving the client a constrained block means they cannot accidentally break the brand with inline styles. Constraints are a feature. The block lets non-technical editors change copy and colors within brand without touching the stylesheet.
The Structure
{
"apiVersion": 3,
"name": "plai/callout",
"title": "Callout",
"attributes": {
"variant": { "type": "string", "default": "card" }
}
}The attribute shape is minimal. Anything more complex belongs in a specialized block rather than a generic callout.
What I Would Change
If I redid it today I would ship it as an NPM package so multiple client sites can receive updates through composer update. The current approach requires copying the plugin per site which means bug fixes do not propagate. That is on my roadmap for Q2.
The Quality Gate
The block gets the same axe accessibility tests as any other component I ship. It caught three accessibility regressions last year that I would have missed by eye. The WordPress block editor handbook is the canonical reference if you want to build your own.
The Business Lesson
Every repeated task is a product waiting to be packaged. Even a humble custom block. The question to ask is not 'should I package this?' but 'why have I not packaged this yet?' The answer is usually that you did not realize it was repeated until the fifth time.
RELATED READING
The Consulting Shift I Am Making In Year Two
After a year of writing and building, my consulting practice is changing shape. Shorter engagements. Sharper outcomes.
ReadThe Frontend Shift: Shipping Less JavaScript In Year Two
A year ago I reached for Next.js for everything. This year I often reach for nothing.
ReadThe Serverless Lesson I Would Write On A Sticky Note
After a year of shipping serverless projects, one rule explains most of the wins and all of the losses.
Read