WordCamp 2016 - Themes & Plugins in Harmony Ulrich Pogson

Door op | in Weblog

WordPress heeft een geweldig systeem waar je gemakkelijk plugins en thema’s kunt installeren. Er is alleen één ding waar ontwikkelaars van een plugin of thema goed rekening mee moeten houden: naamgeving.

In PHP (en eigenlijk elke programmeertaal) is het niet mogelijk dat een functie op twee plekken wordt gedeclareerd met dezelfde naam. Anders zou PHP niet weten welke van de twee het moet uitvoeren wanneer de functie wordt aangeroepen. Wat als een ontwikkelaar hier niet goed rekening mee houdt? Dan kom je de volgende foutmelding tegen:

PHP Fatal error: Cannot redeclare (previously declared in ).

WordPress is een heel erg populair platform en het aantal plugins en thema’s die beschikbaar zijn is ook enorm. Daarmee neemt de kans ook toe dat een functie dezelfde naam heeft als een gebruiker meerdere plugins of thema’s heeft geïnstalleerd. Een van de meest simpele oplossingen hiervoor is het gebruik van prefixes.

Prefixing

Met prefixing plaatst een ontwikkelaar in veel gevallen een afkorting (bijvoorbeeld van de pluginnaam) voor de functienaam. In veel gevallen denken ontwikkelaars dat een afkorting van de plugin naam voldoende is. Toch zijn er nog steeds veel risico’s dat een functienaam twee keer voorkomt. Zeker omdat WordPress zo’n 7000 functies bezit, is het zelfs mogelijk om zonder extra plugins of thema’s een dubbele functienaam tegen te komen!

Gelukkig heeft PHP ook meer mogelijkheden dan alleen functies. Zo is het natuurlijk ook mogelijk (en ook aan te raden) om classes te gebruiken en plugins zo object georiënteerd mogelijk te ontwerpen. Dit houdt in dat onderdelen van je plugin die ‘bij elkaar’ horen, samen worden gevoegd in classes. Deze classes hebben dan functies (officieel worden het dan methods genoemd die iets te maken hebben met die class). Het voordeel hiervan is, is dat deze methods qua naam alleen maar uniek hoeven te zijn binnen de class waarin ze zitten. Zo verklein je dus uiteindelijk weer het aantal unieke namen wat je moet bedenken.

Mooi denk je nu, probleem opgelost! We verkleinen het aantal unieke namen die we moeten bedenken door alles in classes te stoppen, top! Maar helaas zijn er nog meer onderdelen in PHP die ook unieke namen vereisen. Daarbij komt ook nog dat WordPress vereist dat sommige onderdelen unieke namen hebben. Even een kort lijstje:

- Globals en constants
- De handle name van een thumbnails, CSS en JS
- ‘Options’ namen
- De page slug bij het aanmaken van een menu pagina

Gelukkig zijn er volgens Ulrich een aantal stappen die je kunt ondernemen om de kans om dubbele namen enorm te verkleinen. Voor globals en constants geldt eigenlijk hetzelfde als voor classnames, denk goed na of de naam uniek is. Een naam prefixen met een afkorting kan, maar houdt er rekening mee dat er nog steeds een kans is dat er een dubbele naam ontstaat.

De handle naam voor een thumbnail en CSS kan ook het beste met een prefix beginnen om vervolgens te omschrijven waarvoor de thumbnail is. Bijvoorbeeld: TSD_blog_header voor de afbeelding die bovenin blogs in wordt geladen. Dit zelfde geldt ook voor CSS wanneer je enqueue_style gebruikt.

Voor het inladen van JS via enqueue_scripts kun je nog gebruik maken van een andere prefix. Namelijk de library waarop de library die je inlaadt op leunt. Ulrich geeft als voorbeeld de jQuery library fitvids.js. Wanneer fitvidsjs wordt ingeladen, geeft hij deze als handle naam ‘jquery-fitvids’. Voor andere programmeurs is het direct duidelijk wat er ingeladen wordt. Daarnaast is de kans erg klein dat deze library twee keer (per ongeluk of niet) wordt ingeladen, wanneer je je aan deze structuur houdt.

De laatste twee punten die Ulrich benoemt, options en de page slug van menu pagina’s, zouden het beste gebaat zijn met de prefix van de plugin. Voor options benoemt hij nog wel als extra tip om alle instellingen als array op te slaan. Op die manier heb je één naam voor alle opties, inplaats dat je voor elke optie apart een naam moet bedenken. Tenslotte hoeven elementen in arrays alleen maar een unieke naam te hebben binnen de array.

Naast goed advies wat je wel moet doen, heeft Ulrich ook nog een paar adviezen over wat vooral niet te doen om dubbele namen te voorkomen. Tegen het gevoel in, raadt hij inline laden van CSS of Javascript af. Alhoewel je dan bijna zeker weet dat er niks mis kan gaan, voor andere ontwikkelaars die graag je plugin of thema willen uitbreiden is het heel erg lastig om een gedeelte van de code te bewerken. Als je al wel scripts inline wilt inladen, is het aan te raden om dit bijvoorbeeld te doen via de functie wp_add_inline_style() voor CSS. Deze functie vereist wel weer een (unieke) handle naam, maar op deze manier is het mogelijk voor andere ontwikkelaars om je scripts te bewerken.

Meer informatie over WordPress

Wil je meer informatie over WordPress en/of WordCamp? Of ben je op zoek naar een WordPress specialist die jou helpt? Tussendoor is jouw WordPress partner! Neem contact met ons op via telefoonnummer 058 - 711 0916, gebruik ons contactformulier of mail naar info@tussendoor.nl.

Leeuwarden