Hoe kan je je WordPress Plugin Conflicten oplossen?

Hoe ontstaan plugin conflicten?

WordPress is een relatief eenvoudige omgeving om mee te werken, maar juist omdat het op het eerste gezicht zo eenvoudig lijkt, is er onder de motorkap eigenlijk heel veel techniek te vinden. En met techniek kunnen dingen misgaan. Met veel techniek kan heel veel misgaan. En het zal je wellicht wel eens overkomen zijn, dat er ‘iets’ ineens niet meer werkt op je site. Je moet nu WordPress Plugin Conflicten oplossen… maar hoe doe je dat?

Om te begrijpen hoe je een WordPress plugin conflict op moet lossen, is het goed om eerst te kijken hoe zo’n conflict ontstaat.

Complexe code – PHP

WordPress plugin conflicten oplossen

Een WordPress site bestaat uit letterlijk miljoenen regels code. Als ‘motor’ voor heel WordPress wordt de programmeertaal PHP gebruikt. Maar omdat jouw browser geen PHP verstaat, moet de uitvoer van PHP in HTML -de opmaaktaal voor het internet- zijn.

Zoals in de meeste programmeertalen kent PHP verschillende bouwstenen die ‘functies’, ‘variabelen’, ‘klassen’ en ‘contanten’ genoemd worden. En één van de eisen is, dat al deze componenten unieke namen hebben.

Dubbele functies

Stel je nu voor, dat ik een plugin maak en een functie ‘mijn_geweldige_functie’ noem. En die functie doet het inderdaad geweldig. Tot het moment dat iemand anders besluit ook een plugin met een functie ‘mijn_geweldige_functie’ te maken. Op dat moment weet PHP niet meer welke functie er bedoeld wordt. En om te voorkomen, dat er per ongeluk de verkeerde functie aangeroepen wordt, zal het programma eindigen met een foutmelding, dat er een functie dubbel gedeclareerd is.

Globale variabelen

Vervelender wordt het echter met variabelen. Nu heeft PHP de nodige beveiligingen ingebouwd, waardoor variabelen een beperkt bereik hebben, maar PHP kent ook zogenaamde ‘global’ variabelen. Variabelen die je eigenlijk overal nodig hebt. Eén van die globale variabelen is de variabele $wpdb, die de verbinding met de database aangeeft. Een andere is de variabele $post die de gegevens van de op dat moment actieve post bevat. Maar iedere zichzelf respecterende WordPress ontwikkelaar weet dat hij die namen nooit als globale variabele variabelen mag gebruiken.

Maar sommige grotere plugins hebben ook zo’n ‘globale variabele’, waar belangrijke gegevens in op worden geslagen. Zo heeft WooCommerce de globale variabele $wc.

Stel nu, dat ik nooit echt iets met WooCommerce gedaan zou hebben, waardoor ik dit niet zou weten. En ik maak een eigen plugin met een paar prachtige componenten… en ik noem deze plugin Wilko’s Componenten. En bepaalde globaal bij te houden gegevens sla ik op in de globale variabele $wc.

Wat nu zal gebeuren is dat mijn plugin Wilko’s Componenten het prima zal doen. Op een andere site zal WooCommerce het ook prima doen. Maar zodra beide plugins op één site worden geïnstalleerd, zal het onvoorspelbaar worden, wat er zal gebeuren, omdat de ene $wc de andere $wc zal overschrijven zonder enige waarschuwing.

Prefixes gebruiken

Nu is er wel een manier om bovenstaande problemen op te lossen. En die manier wordt door de makers van WordPress ook eigenlijk direct al aan de hand gedaan. Je gebruikt gewoon een ‘prefix’ voor al je functies.

Ik gebruik zo bijvoorbeeld altijd de prefix wxp. Bovendien, wanneer ik een functie specifiek voor een bepaalde klant schrijf komt daar nog een tweede prefix voor de klant bij. Dus voor mijn klant ‘MijnBedrijf’ gebruik ik bijvoorbeeld de prefix wxpmbd.

Mijn mijn_geweldige_functie zou bijvoorbeeld wxp_mijn_geweldige_functie worden.

Natuurlijk is het nog steeds mogelijk, dat een andere programmeur ook de wxp prefix gebruikt. Er is geen ‘centraal register’ voor deze prefixes. Maar de kans dat iemand en dezelfde prefix en dezelfde functienaam zal gebruiken is minimaal.

Dubbele libraries

Een tweede mogelijke reden voor plugin conflicten is omdat twee plugins allebei een bepaalde library gebruiken die niet standaard deel uitmaken van WordPress.

Om het makkelijker te maken voor programmeurs hebben partijen met externe diensten als MailChimp, Facebook of ActiveCampaign bibliotheken beschikbaar gesteld om dit contact makkelijker te maken.

Omdat je mogelijk meerdere plugins hebt met een MailChimp, Facebook of ActiveCampaign koppelingen en al deze bibliotheken dezelfde functies bevatten, zal je ‘dubbele namen’ krijgen… PHP is niet in staat de onderkennen, dat twee functies met dezelfde naam en dezelfde inhoud in principe ook gelijke functies zijn.

Wat je dus eigenlijk als programmeur hoort te doen is te controleren op het resultaat wat door zo’n bibliotheek veroorzaakt wordt. Zo zal het laden van een bibliotheek voor MailChimp mogelijk de functie ‘mailchimp_connect’ bevatten. Of de ‘class’ ‘MailChimp’. Voor je als programmeur jouw bibliotheek laadt, moet je dus eerst kijken of dat resultaat (het bestaan van een functie of class) al bereikt is. En als dat zo is, laadt je de functie niet. Doe je dat wel, dan krijg je een foutmelding.

Libraries en updates…

Maar zelfs met programmeurs die zich prima aan de regels houden, is het werken met libraries riskant. Want van de meeste libraries bestaan er verschillende versies. Omdat er fouten worden gecorrigeerd, of omdat er gewoon functies aan worden toegevoegd.

Stel je bijvoorbeeld deze situatie voor:

We hebben Plugin A en Plugin B die allebei Library X versie 1 gebruiken. Plugin A wordt als eerste geladen. Plugin B volgt, maar omdat de programmeur zich aan de regels heeft gehouden, en controleert of Library X bestaat, gebruikt Plugin B eigenlijk Library X van Plugin A.

Omdat beide libraries identiek zijn maakt het niets uit. Maar nu komt er een nieuwe versie van Library X, versie 2. Hier is een functie aan toegevoegd, die door Plugin B gebruikt wordt.

Met Plugin A gaat niets mis. Die zal namelijk gewoon de versie 1 gebruiken die hij altijd heeft gebruikt.

Met Plugin B gaat het wel mis. Ondanks dat de programmeur zich netjes aan de regels heeft gehouden. Want Plugin B blijft de Library van Plugin A laden, waar de nieuwe functie in ontbreekt.

En dat is nog maar het topje van de ijsberg

plugin conflicten

Nu zijn er veel meer mogelijke oorzaken van plugin conflicten, maar de hierboven genoemde ‘fouten’ zijn wel de meest voorkomende. Maar wat de problemen ook zijn, de stappen om de problemen te identificeren en ook de plugin conflicten op te lossen blijven dezelfde.

Hierbij overigens één kanttekening. Jouw invloed op het ‘oplossen’ van de problemen is minimaal. Er is een aantal manieren om de problemen zelf op te lossen, maar voor de meeste oplossingen zal je terug moeten gaan naar de makers van de plugins die het probleem veroorzaken.

Hoe herken ik het probleem?

Om een probleem op te lossen, moet je natuurlijk eerst onderkennen, dat er een probleem is. Het meest duidelijk is natuurlijk wel, wanneer je na een plugin update een 500 fout of een blanco scherm hebt. De oplossing hier is ook het meest eenvoudig.

Een 500 fout of blanco scherm hoeft overigens geen plugin conflict te zijn. Het kan ook gewoon een fout in één specifieke plugin zijn.

Een fout kan ook veel subtieler zijn. Laat ik een aantal problemen van heel subtiele fouten die ik in het verleden heb meegemaakt noemen:

  • De ‘Bijwerken’ knop blijft op ‘niet actief’ staan, waardoor je posts niet op kan slaan.
  • Bepaalde elementen van je website zijn ineens verdwenen (header, footer, sidebar)
  • In een dropdown waar je normaal altijd iets kon kiezen als een pagina, mailinglijst, blogpost etc staan nu ineens geen gegevens meer.
  • Je krijgt een foutmelding in het beheerder dashboard, maar de site lijkt verder wel gewoon te werken
  • Gegevens worden niet opgeslagen

Kortom, het kan van alles zijn. Hoe kunnen we deze plugin conflicten oplossen?

Werk niet op je site zelf!

De methode die ik hierna ga beschrijven om je plugin conflicten op te lossen voer je nooit uit op een live site. Je gaat namelijk thema’s en plugins uitzetten, die ervoor zorgen, dat je site er heel anders uit komt te zien. Dit wil je je bezoekers besparen.

Lees mijn artikel over het ‘stagen’ van WordPress websites als je wilt weten hoe je het wel moet doen.

Controleer of je op beide sites met dezelfde PHP versies werkt!

Soms doen bepaalde problemen zich alleen maar voor bij een specifieke PHP versie. Controleer dus in het beheerpaneel van je hoster of je overal wel dezelfde PHP versie wordt gebruikt.

Begin met het verwijderen van alle plugins die je eigenlijk niet nodig hebt!

Soms overkomt het je, dat je bepaalde plugins nog steeds actief hebt staan, terwijl je ze eigenlijk niet gebruikt. Je hebt bijvoorbeeld ooit met Autorespond gewerkt, maar bent allang overgestapt naar MailChimp of ActiveCampaign… de plugin staat echter nog steeds actief. Die kan je dus rustig deactiveren.

Test of de plugin conflicten zich nog steeds voordoen. Is het opgelost, dan heb je geluk gehad. In de meeste gevallen zal je echter niet zoveel geluk hebben.

Update alle plugins, het thema en WordPress zelf!

Voor je begint met testen, controleer eerst of alle componenten van WordPress ook inderdaad wel de meest recente zijn. Is dit niet zo, update alles eerst.

Kunnen bepaalde plugins niet geupdate worden, omdat het premium plugins zijn en je licentie is verlopen, koop een nieuwe licentie en update alsnog.

Test nu opnieuw of de plugin conflicten zijn opgelost. Mijn ervaring is dat dit in veel gevallen het geval is. Plugin conflicten zijn namelijk vaak het gevolg van het bovengenoemde ‘Library conflict’. Wanneer alle plugins netjes onderhouden worden door de makers zal bij een nieuwe versie van een library deze snel geïntegreerd worden in de plugin.

De Eliminatie Test

De beste manier om de ontdekken wat de oorzaken van je plugin conflicten zijn.

Deactiveer alle plugins en kies een default thema

Het eerste wat je doet is alle plugins deactiveren. Als thema kies je het ‘Default thema’ voor WordPress. Op het moment van het schrijven van deze blogpost is dat Twenty Twenty.
Controleer of alles nu werkt als verwacht. Als dat niet het geval is, dan is er waarschijnlijk om één of andere reden een fout in de code van WordPress zelf ontstaan. Dat kan bijvoorbeeld omdat bij een eerdere update iets fout is gegaan en je die foutmelding hebt gemist.
Werkt het niet zoals verwacht, installeer WordPress opnieuw.

Activeer de noodzakelijke plugins

Soms is het heel duidelijk waar problemen zich voordoen. Wanneer ik bijvoorbeeld een probleem hebben, dat GravityForms een bepaalde dropdown niet vult, dan kan ik dit alleen controleren, wanneer GravityForms aan staat.
Wanneer ineens de koppeling tussen WP Courseware of LearnDash met WooCommerce niet meer werkt, dan heb ik minimaal de LMS plugin (WP Courseware of LearnDash) en WooCommerce nodig.

Controleer of de plugin conflicten zich nu voordoen. Doen deze zich voor, dan kan je er eigenlijk vanuit gaan, dat je bij de maker van de plugin waarin het conflict zichtbaar wordt moet zijn.
In de meeste gevallen zal je echter door moeten gaan naar de volgende stap.

Activeer je thema

In deze stap gebruiken we TwentyTwenty niet meer, maar activeren we het thema wat we oorspronkelijk gebruikten.
Controleer opnieuw of de plugin conflicten zich voordoen. Is dat het geval, dan is het thema wat je wilt gebruiken de oorzaak.
Neem contact op met de maker van je thema.

Activeer je overige plugins één voor één.

De laatste stap is een stap die je blijft herhalen, tot alle plugins die actief moeten zijn actief zijn.
Activeer de plugin, test of de plugin conflicten zich voordoen. Doet het probleem zich voor, dan is deze specifieke plugin de oorzaak.

Zeldzaam geluk

Soms heb je zeldzaam geluk. Door plugins uit- en weer aan te zetten kan het zo zijn, dat de plugins voortaan in een verschillende volgorde zullen worden geladen. De oorzaak van het probleem is dan vaak het ‘Library probleem’ zoals hierboven beschreven geweest.

Probleem oplossen

plugin conflicten

Maar in de meeste gevallen heb je niet dat ‘zeldzame geluk’ en heb je een serieus probleem op te lossen.

Er is een aantal mogelijke manieren om het probleem op te lossen.

Vervangen door een andere plugin

Dit is meestal geen optie, maar soms is de makkelijkste oplossing om de plugin die het probleem veroorzaakt te vervangen door een ander. Toen op een gegeven moment ‘Broken Link Checker’ een conflict veroorzaakte, heb ik gewoon een andere plugin gebruikt met dezelfde functie. Toevallig bleek dat nog een betere plugin te zijn ook.

Maar als Elementor een conflict zou veroorzaken, of in één van mijn webshops WooCommerce de boosdoener zou zijn, dan kan ik deze niet zomaar vervangen, omdat deze plugins deel uit maken van het hart van de website.

Dan zullen we toch naar de andere mogelijkheden moeten kijken.

De laadvolgorde veranderen

Onder het kopje ‘Zeldzaam geluk’ heb ik je al verteld, dat je soms door een toevallige verandering de laadvolgorde van plugins aan kan passen. Dit kan je echter ook opzettelijk doen met een plugin als ‘Plugin Organizer’.

Contact opnemen met de makers

In de meeste gevallen zit er echter niets anders op dan contact opnemen met de makers van de plugins die deel uitmaken van het probleem. Een tijdelijke oplossing is terug te keren naar de situatie toen alles nog prima werkte door oudere versies van de plugin te installeren.

Wanneer je consistent gebruik maakt van staging is dit geen probleem, omdat je de update (nog) niet op de live site hebt gedaan.

Maar je kan de update niet altijd tegenhouden. Dus je zal toch actie richting de plugin makers moeten nemen.

Afhankelijk van de maker kan dit heel soepel of juist heel moeizaam verlopen. Vaak zal men de oplossing bij de maker van de andere plugin neer willen leggen.

Hulp nodig?

Het oplossen van plugin problemen kan tijdrovend zijn. En het is vrij lastig in te plannen hoe lang het precies gaat duren.

Wanneer ik bijvoorbeeld 50 plugins op mijn site zou hebben, dan hoef ik in het beste geval maar één extra plugin te activeren om de oorzaak te vinden, maar in het slechtste geval alle 50. Als ik voor iedere plugin activeren plus de test uitvoeren 5 minuten kwijt zou zijn, dan zou me dit 250 minuten, ofwel ruim vier uur kunnen kosten. En dat alleen nog maar voor het identificeren van het probleem.

En hoewel ik het absoluut niet het leukste werk vindt, is het oplossen van plugin conflicten typisch iets waarvoor de WordXPression Support Strippenkaart in het leven is geroepen…

Wees eens aardig en deel dit met je vrienden
Enkele trefwoorden om vergelijkbare posts te vinden:

Word je website de baas. Neem vandaag nog contact op!

Contact Information

WordXPression 
Imkersdreef 525
7328DG Apeldoorn
06-10449807 (van 9:00 tot 17:00 van ma-vr)

KVK : 75580152 

Social media
Stuur een bericht

Flinke kortingen op cursussen van WordXPression.