Software & Applications · Service 12

Extend the platform without breaking it.

Custom WordPress plugins, WooCommerce extensions and Joomla modules — built against the platform's own extension points rather than around them. That distinction is why some sites survive a decade of updates and others break every autumn.

Core APIs onlyNo core files edited Namespaced and prefixedDocumented for the next developer
Core · hooks · extensions

How extension actually works

A value passes through, and each plugin gets a turn

WordPress does not let plugins rewrite core. It hands them a value, lets each one modify it, and passes the result along. Toggle the extensions below and watch a product title travel the chain.

Extensions listening

apply_filters( 'the_product_title', $title )

$24.00 $30.00
340g · whole bean

A question worth asking first

Where should this code actually live?

Half the mess we get called to fix is functionality in the wrong place — usually pasted into a theme that later got replaced.

Plugin

A proper plugin

Functionality that should survive a redesign. Activating, deactivating and moving it between sites all work as expected.

Use forCustom post types, integrations, business logic, anything reusable

Child theme

The child theme

Only things that are genuinely about presentation. If it would still matter after a redesign, it does not belong here.

Use forTemplate overrides, styles, layout-specific markup

mu-plugin

A must-use plugin

Loads before everything and cannot be switched off from the admin. Useful for guard rails a client should not be able to disable.

Use forEnvironment config, security constraints, critical fixes

Snippet

A code snippet plugin

Convenient and genuinely useful for small tweaks — but it lives in the database, not in version control, and it is invisible to the next developer.

Use forTemporary fixes and experiments, not permanent logic

Craft

What makes an extension update-safe

None of this is visible from the outside. All of it decides whether the site still works after the next platform release.

01

Public APIs only

Hooks, filters and documented functions — never editing core, never calling private internals that can change without warning.

02

Prefixed and namespaced

Every function, class and option name carries a unique prefix, so it cannot collide with another plugin doing something similar.

03

Uninstall that cleans up

Removing the plugin removes its options and tables. Leaving debris behind is how databases become archaeology.

04

Capability checks and nonces

Every admin action verifies who is asking and that the request was intended. Most plugin vulnerabilities are a missing check, not clever code.

05

Escaped output, sanitised input

Data is cleaned going in and escaped coming out, every time, without exception for the bits that "obviously cannot" contain anything harmful.

06

Loads only where needed

Admin code stays out of the front end and scripts load on the pages that use them. This is where plugin bloat starts.

07

Translatable strings

Text wrapped for translation from the start, because retrofitting it later means touching every file.

08

Database changes versioned

Schema updates run once, in order, and can be re-run safely — so upgrading from any older version lands in the same place.

09

Documented for a stranger

A readme explaining what it does, which hooks it uses and what it expects — written for whoever inherits it, not for us.

Questions

Plugin development, answered

Should we build a plugin or find one that already exists?
Look first, always. If something reputable does the job, use it — a maintained plugin with thousands of users is tested in ways yours never will be. Custom is worth it when nothing fits, when the available options each bring three features you do not want, or when the functionality is specific to how your business works.
Will a custom plugin break when WordPress updates?
It should not. Code written against documented hooks and functions is exactly what those APIs are for, and WordPress takes backward compatibility unusually seriously. What breaks is code that edited core, relied on undocumented internals or copied a theme file that later changed.
Can you fix or extend a plugin we already have?
Usually — and often without touching it. Most decent plugins provide their own hooks, so the change lives in a separate small plugin that survives the original being updated. If it offers no extension points, we will say whether a fork is sensible or whether replacing it is cheaper.
Do you build WooCommerce extensions?
Yes, and it is one of the more common requests — shipping rules, pricing logic, checkout fields, integrations with fulfilment systems. WooCommerce is well-hooked, so most of what people assume needs a fork can be done cleanly alongside it.
What about Joomla or other platforms?
Joomla modules and plugins too. The principles carry across: use the extension points the platform provides, prefix everything, and leave the core untouched.
Can we sell the plugin commercially?
Yes. If the intention is a product rather than an internal tool, that changes the build — licensing, update delivery, support documentation and a settings experience aimed at strangers rather than at you. Worth saying so at the start, since retrofitting it is expensive.