WooCommerce / Errors
Conflicte de plugins a WooCommerce: com trobar la causa
Resposta curta
Abans de desactivar res, parteix de les evidències: la ruta del fitxer d’un error o una petició que falla solen anomenar els components implicats. Si no hi ha error, reprodueix el problema en una còpia de staging, canvia a un tema per defecte i desactiva plugins per meitats fins que desaparegui: així trobes el culpable en pocs passos. Després arregla la interacció (prioritat de hooks, càrrega de scripts, un snippet de compatibilitat o una actualització) en lloc de deixar alguna cosa important desactivada.
Símptomes
- Alguna cosa s’ha trencat just després d’instal·lar o actualitzar un plugin, el tema o WooCommerce.
- El checkout, el carretó o les fitxes de producte es comporten diferent amb una extensió concreta activa.
- Errors de JavaScript que esmenten l’script d’un altre plugin, o llibreries duplicades.
- Un error fatal com
Cannot declare classoCannot redeclare function. - El problema només apareix amb alguns productes, mètodes de pagament o rols d’usuari.
Causes més habituals
- Competència de hooks: dos components enganxats al mateix filtre, on l’últim sobreescriu o desfà el primer (preus, càrrecs, enviaments, camps del checkout).
- Conflictes de JavaScript: versions de jQuery o de llibreries duplicades, scripts carregats en l’ordre equivocat, optimitzadors que combinen o difereixen els scripts del checkout.
- Col·lisions de llibreries incloses: dos plugins que porten versions diferents de la mateixa llibreria PHP, de manera que guanya la que es carrega primer.
- Plantilles sobreescrites al tema que estan desactualitzades respecte a WooCommerce.
- Supòsits diferents sobre les dades: un plugin desa valors que un altre no espera, o tots dos escriuen la mateixa clau de meta.
- Restriccions de REST i AJAX: plugins de seguretat que bloquegen endpoints dels quals depèn una altra extensió.
Diagnosi
1. Parteix de les evidències, no de la desactivació
- Un error PHP? La ruta del fitxer anomena el component i la traça mostra quin hook els connecta.
- Un error de JavaScript? La consola mostra el fitxer de l’script i la línia.
- Una petició que falla? El cos de la resposta al panell de xarxa sol contenir l’error o el nom del component que l’ha rebutjada.
- Una cronologia? La primera aparició sol coincidir amb una actualització o una instal·lació.
2. Reprodueix-ho a staging
Copia la botiga a staging i confirma que el problema també hi passa. Si no hi passa, la causa és de l’entorn (memòria cau, CDN, configuració del servidor), no d’un plugin.
3. Aïlla per meitats
Canvia a un tema per defecte (com Storefront) i prova. Si el problema continua, desactiva la meitat dels plugins (mantenint WooCommerce i el que necessiti la prova, com la passarel·la de pagament), torna a provar i continua dividint per la meitat el grup que conté el problema.
| Plugins actius | Proves necessàries, dividint cada vegada |
|---|---|
| 16 | unes 4 |
| 32 | unes 5 |
| 64 | unes 6 |
4. Confirma la parella
Quan tinguis un sospitós, prova WooCommerce només amb aquest plugin, i després amb aquest plugin i amb el que més probablement hi interactua. Un conflicte queda confirmat quan el pots reproduir amb el conjunt més petit possible.
Registres i comprovacions tècniques
- WooCommerce → Estat → Registres (
fatal-errors) i el registre d’errors PHP. - WooCommerce → Estat → Estat del sistema: plugins actius i versions, plantilles sobreescrites desactualitzades.
- Consola del navegador i panell de xarxa a la pàgina afectada.
- Els changelogs dels plugins actualitzats al voltant de la primera aparició.
Solucions
- Actualitza els dos components; molts conflictes ja estan arreglats en una versió posterior.
- Ajusta la prioritat dels hooks en un petit mu-plugin de compatibilitat, perquè la lògica que vols s’executi l’última.
- Impedeix que els scripts es carreguin on no calen, i exclou els scripts del checkout de la combinació i el diferiment.
- Actualitza o elimina les plantilles sobreescrites desactualitzades del tema.
- Envia un cas reproduïble als desenvolupadors: versions, passos i el conjunt mínim de plugins actius.
- Substitueix un plugin abandonat en lloc de pedaçar-lo per sempre.
// Assegura que la nostra lògica de càrrecs s’executa després d’un altre plugin que els reinicia amb prioritat 20.
add_action( 'plugins_loaded', function () {
remove_action( 'woocommerce_cart_calculate_fees', 'mystore_apply_fees', 10 );
add_action( 'woocommerce_cart_calculate_fees', 'mystore_apply_fees', 30 );
}, 20 );Què no s’ha de fer
- No desactivis plugins un per un a la botiga en producció: és lent, trenca altres fluxos per als clients i pots desactivar alguna cosa que processa pagaments.
- No editis els fitxers del plugin en conflicte; el canvi desapareix amb la següent actualització.
- No deixis un plugin important desactivat «de moment» sense entendre què feia.
- No donis per fet que el culpable és l’últim plugin actualitzat sense provar-ho.
Quan recórrer a un expert
Recorre a un enginyer quan el conflicte implica codi a mida o extensions prèmium de les quals depens, quan només apareix a producció amb trànsit real, quan corromp dades com preus o comandes, o quan necessites que els dos components continuïn funcionant.
Problemes relacionats
- WooCommerce / Errors Error fatal a WooCommerce: guia pràctica per resoldre’l Llegeix bé l’error fatal (fitxer, línia, traça) i relaciona’l amb el canvi que el va provocar.
- WooCommerce / Checkout El checkout de WooCommerce no funciona: com diagnosticar la causa arrel Determina primer si la fallada passa abans de la petició del checkout, durant la petició o després de la resposta de la passarel·la. El panell de xarxa i els registres PHP solen mostrar quina capa falla.
- WooCommerce / Rendiment Checkout lent a WooCommerce: què cal revisar Separa el temps de PHP, les consultes a la base de dades i les crides a APIs externes abans de canviar la memòria cau o el hosting.
Preguntes freqüents
Com trobo quin plugin entra en conflicte amb WooCommerce?
Revisa primer els registres d’errors; la ruta del fitxer sol anomenar el plugin. Si no hi ha error, reprodueix el problema a staging i desactiva plugins per meitats, provant cada vegada, fins a trobar aquell la desactivació del qual ho arregla. Després prova’l només amb WooCommerce per confirmar-ho.
Puc buscar conflictes en una botiga en producció?
No desactivant plugins per a tot el lloc. El mode de resolució de problemes del plugin Health Check & Troubleshooting desactiva plugins i canvia el tema només per a la teva sessió, cosa molt més segura; tot i així, una còpia de staging continua sent el millor lloc.
Sempre és un plugin?
No. El tema, un snippet a functions.php, un mu-plugin, la memòria cau del servidor o l’optimització de scripts d’una CDN es poden comportar com un conflicte de plugins.
I si necessito els dos plugins?
Llavors l’objectiu és arreglar la interacció: canviar la prioritat d’un hook, impedir que un script es carregui en certes pàgines, afegir un petit snippet de compatibilitat o enviar un cas reproduïble als desenvolupadors.