Skip to content
Get a quote

Custom WooCommerce plugins vs stacking third-party ones

Samir KailaFounder & DirectorPublishedLast reviewedReading time6 min
Split illustration weighing a custom-built WooCommerce plugin against ready-made plugins on a market stall.

Install a third-party plugin when it solves a well-defined, common problem and is actively maintained. Write a custom plugin when your requirement is specific to your business, when you would otherwise stack several overlapping plugins, or when the logic is important enough that you need to be able to read, test and roll it back yourself.

WooCommerce’s plugin ecosystem is genuinely one of its strengths. It is also the most common route by which a maintainable store becomes an unmaintainable one.

The test we apply

Before installing any plugin on a client store, we ask one question:

Would fifty lines of custom code do this?

If yes, we write the fifty lines. Not because writing code is inherently better, but because fifty lines we wrote can be read, understood, tested, and removed. A plugin cannot always be any of those things.

That is the whole heuristic. Everything below is elaboration.

What a plugin actually is

A plugin is code written by somebody else, running inside your store, with full database access and the ability to modify almost anything.

Most of the time that is fine — the ecosystem contains excellent, well-maintained work. But it is worth being clear about what installing one means, because “just install a plugin” is said far too casually.

When a third-party plugin is the right answer

Install one when the problem is common, well-defined, and solved better than you would solve it.

Good candidates:

  • Payment gateway integrations, which need PCI knowledge and ongoing certification work
  • Subscription billing, where dunning and failed-payment recovery are genuinely hard
  • Established shipping carrier integrations
  • Security and backup tooling
  • Anything requiring a maintained relationship with an external API

The common thread: these are problems where somebody else’s specialised, continuously-maintained work is genuinely better than yours would be. Writing your own payment gateway would be a poor use of anyone’s budget.

When custom is the right answer

Write your own when the requirement is specific to your business.

Good candidates:

  • Pricing rules unique to how you trade
  • Order routing based on your own operational logic
  • Integrations with systems you use that have no existing plugin
  • Any requirement where the nearest plugin does 70% of it and you would have to bend your process to fit
  • Anything where you would otherwise install three plugins that each do part of it

That last one matters most. Three overlapping plugins is worse than one custom plugin, because nobody can then say which one owns a given behaviour when it misbehaves.

Where custom code belongs

In a versioned plugin. Not in the theme’s functions.php.

This is not a stylistic preference. Code in functions.php dies with the theme — change or update the theme and your business logic vanishes with it. Code in a plugin survives theme changes, can be code-reviewed properly, deployed independently, and rolled back on its own.

It costs nothing extra to do it correctly and it saves an entire category of incident. We have inherited stores where critical pricing logic lived in a child theme nobody had documented, discovered only when the theme was updated.

Evaluating a plugin before installing

If a third-party plugin is the right call, check:

  1. When was it last updated? Six months is fine. Two years is a warning.
  2. Does the developer answer support threads? An unanswered forum is the clearest signal available, and a better indicator than install count.
  3. Is it compatible with your WooCommerce and PHP versions? Explicitly stated, not assumed.
  4. What does it load on the front end? Some plugins add scripts sitewide for admin-only functionality.
  5. What happens if it disappears? If the developer stops maintaining it, how hard is it to replace or remove?

That fifth question is the one nobody asks, and it is the one that matters in three years.

The accumulation problem

The failure we see most often is not one bad plugin. It is forty plugins where:

  • Three do broadly the same job
  • Two were abandoned by their authors years ago
  • Several were installed for something that ended
  • Nobody can say which one owns the checkout behaviour that is misbehaving

None of those plugins was a bad decision individually. The set is a bad outcome collectively, and it happened because each addition was evaluated alone.

Review the whole list periodically, not each addition in isolation.

A practical policy

  1. Ask whether fifty lines would do it
  2. If installing, evaluate against the five questions above
  3. Put custom logic in a versioned plugin, never the theme
  4. Delete rather than deactivate
  5. Review the full plugin list quarterly and remove what is unused
  6. Document what each remaining plugin is for, so the next person knows

Unglamorous, and the difference between a store that is still maintainable in five years and one that is rebuilt in three.

What a well-built custom plugin looks like

If you are commissioning one, these are reasonable expectations.

It is a plugin, with a proper header, activation and deactivation hooks, and an uninstall routine that cleans up after itself. Code that leaves database rows behind on uninstall is part of the accumulation problem, not a solution to it.

It does one thing. A single plugin containing pricing logic, an integration and three unrelated tweaks is harder to reason about and impossible to remove selectively.

It follows WordPress coding standards, so any competent WordPress developer can pick it up. Bespoke code written in a house style nobody else recognises is a lock-in of a different kind.

It is version controlled and deployed, not edited on production through the file manager.

It is documented, at minimum a README explaining what it does, why it exists, and what depends on it. Six months later this is the difference between a five-minute change and an afternoon of reading code.

It handles failure. External API down, unexpected data, missing configuration — it should degrade rather than break the store.

Auditing what you already have

For an existing store where nobody is sure what is running:

  1. Export the plugin list with versions, last-update dates and active status.
  2. Flag anything not updated in over a year. Check whether the developer is still active.
  3. Identify overlaps. Group plugins by what they do; anywhere two appear in the same group, one is probably removable.
  4. Find the custom code. Check the theme’s functions.php, any child theme, and any plugin with a name matching your business rather than a vendor.
  5. Test removals on staging, one at a time, with a way back.
  6. Document what survives and why.

That process typically removes a third of the list on a store that has been running for a few years, and it makes everything after it easier — updates, debugging, and onboarding whoever maintains it next.

The short version

Ask whether fifty lines would do it. Put anything bespoke in a versioned plugin rather than the theme. Check the last update date and the support forum before installing anything. Delete what you are not using rather than deactivating it. Review the whole list quarterly rather than evaluating each addition alone.

Six rules, and following them is most of the difference between a WooCommerce store that stays maintainable and one that gets rebuilt.

Sources

Questions we get about this

When should I build a custom WooCommerce plugin?

When the requirement is specific to how your business operates, when the alternative is stacking several plugins that each solve part of it, or when the logic matters enough that you need to read, test and roll it back on your own terms. Bespoke business rules are almost always better as custom code.

Why not put custom code in the theme's functions.php?

Because it dies with the theme. Change or update the theme and your business logic disappears with it. Code in a versioned plugin survives theme changes, can be code-reviewed properly, deployed independently and rolled back on its own. It costs nothing extra to do it correctly.

How do I judge whether a third-party plugin is safe to install?

Check when it was last updated, whether the developer answers support threads, how many active installations it has, and whether it is compatible with your WooCommerce and PHP versions. An unanswered support forum is the clearest warning sign, more so than a low install count.

Is it cheaper to buy a plugin than to build one?

Upfront, almost always. Over the life of the store, not necessarily. A purchased plugin carries renewal costs, update risk, unnecessary features you inherit, and the possibility of abandonment. Custom code carries build cost and then only the maintenance you choose to give it.

Thinking about this for your store?

This post comes out of our WooCommerce work. Tell us what you are planning and we will come back within one business day, including if the honest answer is that you do not need us yet.

We reply within 1 business day