When an update breaks a module or wipes your changes
The module worked, you accepted the update it offered, and it has been broken since — or it works, but the adaptations made for you have vanished. That isn’t bad luck: a major version change rewrites the module’s configuration, its tables and its files, and that transition is the most fragile moment of its life.
What a module update actually does
Updating a module isn’t just replacing files. On PrestaShop as on WordPress, a well-written module runs an upgrade routine on the way: it can add database columns, rename configuration keys, migrate old settings into a new format, or attach itself to different display points.
Three things can go wrong. The routine stops halfway, and the database is left in an intermediate state the module can’t read back. Old settings aren’t carried over, and the module restarts on its defaults, which looks exactly like a module that does nothing. Or the new version requires a PHP or platform version higher than yours, and fails silently on load.
The most confusing case is the one where the module seems to work, but only part of its settings survived. You hunt for a bug where there is only lost configuration.
What to do, and in what order
-
Don’t re-run the update repeatedly
Re-running an upgrade routine that failed halfway can worsen the database, because it replays operations already performed. An intermediate state can be repaired; a state replayed three times much less so.
-
Read the server error log
An unmet version requirement, a missing method or a non-existent column appear there by name. That is what separates an incompatibility from lost settings.
-
Compare configuration before and after
If you have an earlier backup, the module’s configuration values are in it and can be compared. That is often where the full explanation sits.
-
Roll back, if that is possible
Downgrading is only safe if the database wasn’t altered by the upgrade. Otherwise restoring a full site backup is the only reliable way back.
The special case of payment and shipping modules
Those deserve separate attention, because their failure isn’t visible on the home page but at the last step of checkout, which is where you lose the sale. A new major version frequently changes how the module receives callbacks from the provider, and those callbacks arrive at an address registered with the provider, not inside your store. If the update changes that address, it has to be updated on both sides.
After any payment module update I place a real end-to-end order in production conditions and check that the order is created with the correct status. That is the only test that proves anything.
The other outcome: the update that wipes your changes
The opposite symptom exists and is often confused with the previous one: the module isn’t broken, it has simply gone back to what it was. An update replaces the module’s files with those of the new version. It doesn’t compare, it doesn’t merge, it overwrites. Everything written inside the module folder disappears, with no warning and no trace. The signature is recognisable: a bespoke feature that vanishes twice a year, always after maintenance, and that nobody links to the update because the interval is long.
The second effect is nastier: as long as the change holds, it effectively blocks updates. Since nobody wants to lose it again, the module stays on an old version, piles up incompatibilities and ends up producing exactly the failure described above, only worse, on the day the update becomes unavoidable.
When a module declares no extension point and builds its output without a template you can override, there is no elegant answer, and I would rather say so than suggest otherwise. Three options remain, in this order of preference: ask the module’s publisher to add an extension point, which costs nothing and is sometimes accepted; duplicate the module under another name and own it as yours, knowing you give up its updates and become its maintainer; or keep the change separately as a documented patch, to be reapplied after each update. What I don’t do: modify a module and say nothing. An undocumented change inside code someone will update in six months is a trap for the next person, including when that person is me.
Four ways to adapt a module without editing it
-
Use the extension points provided
Many modules declare their own hook points. A properly written third-party module can be extended from outside, without touching a single one of its lines.
-
Override the template from the theme
On PrestaShop, a theme can supply its own version of a module's template. On WooCommerce, the equivalent mechanism goes through a dedicated folder in the child theme. The change then lives in the theme, not in the module.
-
Write a small companion module
A dedicated module that hooks after the original and alters its result. That is the cleanest option when the change affects behaviour and not just display.
-
Use the translation system
When the change is only wording, it goes through the platform's translation system, which exists for that and survives updates.
Related pages
-
Testing a module before production
How to avoid the problem entirely: update on a copy first.
-
Backing up the store before work starts
The backup that makes rolling back possible, files and database together.
-
A payment method disappears after an update
The specific case of a payment module no longer showing at checkout.
-
Restoring after a failed update
The recovery procedure on the WordPress and WooCommerce side.
-
Maintaining a custom module over time
How a module written for you is designed to stay adaptable without being edited.
Describe your need in one minute
A few targeted questions so I can reply with an estimate rather than another questionnaire.