Beveiliging en consistentie zijn enkele van de grootste zorgen die we hebben bij het gebruik van bibliotheken, frameworks en plug-ins van derde partijen. We hebben hetzelfde probleem bij het gebruik van gratis en commerciële WordPress-thema's en -plug-ins.
De WordPress Codex biedt een reeks richtlijnen en regels voor het ontwikkelen van thema's. Om thema's in te dienen in de themapagina van WordPress, moet u zich aan die richtlijnen houden. Maar er zijn honderden gratis en commerciële thema's die mogelijk niet volgens deze richtlijnen worden ontwikkeld.
In principe moeten we controleren of een thema overeenkomt met ten minste de gegeven set richtlijnen en regels. Theme Check is een gratis WordPress plug-in ontwikkeld om WordPress-thema's te valideren.
Het kan zeker niet, tenminste, met zijn standaardfunctionaliteit. Dus hier gaan we kijken hoe we de bestaande controles kunnen gebruiken en kunnen we onze eigen regels voor de validatie van WordPress-thema's toevoegen.
Theme Check komt met ongeveer 40 ingebouwde tests om uw thema te valideren op zowel het front-end als het admin dashboard. In principe zullen deze controles de nodige validaties bevatten om beveiligingsproblemen en bijpassende themafuncties te vermijden tegen richtlijnen voor het ontwikkelen van thema's.
Als thema-ontwikkelaars of gebruikers van thema's van derden zouden we zo'n tool moeten gebruiken om ervoor te zorgen dat onze thema's voldoen aan de normen.
Het belangrijkste belang van themachecker is dat het bestaande gedrag kan veranderen of nieuw gedrag kan toevoegen via inplugbare plug-ins. In dit artikel zullen we kijken naar de architectuur en de mogelijkheden om de plug-in uit te breiden en deze te gebruiken als een thematische bibliotheek met volledige functionaliteit.
Ik neem aan dat de meesten van jullie deze plug-in al in je WordPress-ontwikkeltaken hebben gebruikt. Degenen die nog niet bekend zijn met deze plug-in kunnen een kopie van de WordPress plugin repository pakken op http://wordpress.org/extend/plugins/theme-check/.
Eenmaal geïnstalleerd en geactiveerd, krijgt u een submenu met de naam Themacheck onder de Verschijning menu. Daar vindt u een vervolgkeuzelijst met alle beschikbare thema's in uw WordPress-installatie. U kunt een thema selecteren en op klikken Controleer het om de thema-validatie te starten. Zodra het proces is voltooid, krijgt u een scherm zoals het volgende.
WP_DEBUG
optie in de wp-config.php bestand naar TRUE
voordat u begint met het valideren van thema's. Het scherm 'Themacontrole' bevat alle soorten fouten in uw thema in verschillende soorten fouten, zoals AANBEVOLEN, VERPLICHT, WAARSCHUWING, etc. Houd er rekening mee dat al deze validaties worden gedaan op basis van de WordPress-normen voor themaherziening.
De werkelijke kracht van Theme Check komt wanneer we de plug-in uitbreiden met aangepaste validatiecontroles. Dus laten we ons verdiepen in de code om erachter te komen hoe het werkt en hoe we het kunnen uitbreiden met onze eigen controles.
Themacontrole biedt een goed gedefinieerde en eenvoudige interface voor het maken van cheques. Alle bestaande controles en nieuwe controles moeten in deze interface worden geïmplementeerd om de zaken te laten werken. De volgende code in de checkbase.php bestand toont de gemeenschappelijke interface voor thema-controles.
// interface die alle controles zou moeten implementeren interface themacheck // zou true moeten retourneren voor goed / oke / acceptabel, false voor slecht / niet-ok / onacceptabele publieke functiecontrole ($ php_files, $ css_files, $ other_files); // moet een reeks tekenreeksen retourneren die eventuele gevonden problemen openbare functie getError () verklaren;
Eigenlijk bevat het twee functies voor het controleren van het thema en het verstrekken van fouten. Alle bestandsinhoud van uw thema wordt als tekenreeksen in drie hoofdvariabelen gecomprimeerd. Die variabelen worden vervolgens door de plug-in in de controlefunctie van elke controleklasse ingevoerd.
Binnen in de controleren
functie moeten we de validaties implementeren en fouten retourneren als de controle is voltooid als een fout. Dan de getError
functie wordt aangeroepen om de foutmeldingen toe te voegen aan de pagina met resultaten van de themacontrole.
Ik denk dat het belangrijk is om het initialisatieproces van Theme Check te begrijpen om erachter te komen hoe het werkt en de belangrijke secties die we moeten focussen, voordat we de plugin-functionaliteit uitbreiden.
Zodra we het thema hebben geselecteerd en op de knop 'Check it' hebben geklikt, zoekt plugin naar alle bestanden in het geselecteerde thema met behulp van de PHP RecursiveDirectoryIterator
en wijst de volledige inhoud van die bestanden toe aan een stringvariabele.
Vervolgens wordt de inhoud van het bestand gescheiden in drie variabelen, één voor PHP-bestanden, CSS-bestanden en andere bestanden. Daarna begint het proces van het uitvoeren van thema-controles, wat voor ons als ontwikkelaars het belangrijkste onderdeel zal zijn.
Beschouw de volgende code voor het eerste uitvoeringsproces na het laden van de bestandsvariabelen.
// laad alle controles in de checklist $ dir = 'checks'; foreach (glob (dirname (__ FILE__). "/$dir/*.php") als $ bestand) include $ file; do_action ('themecheck_checks_loaded'); functie run_themechecks ($ php, $ css, $ other) global $ themechecks; $ pass = true; foreach ($ themechecks als $ check) if ($ check instanceof themecheck) $ pass = $ pass & $ check-> check ($ php, $ css, $ other); return $ pass;
themecheck_checks_loaded
. Deze actie fungeert als het belangrijkste onderdeel in het uitbreidingsproces.run_themechecks
functie, die PHP-bestanden, CSS-bestanden en andere bestanden als variabelen neemt.$ themechecks
variabele die zal worden uitgevoerd om het controleproces te voltooien.De meeste thema-controles zijn gebaseerd op overeenkomende reguliere expressies of het matchen van specifieke posities in strings. Onze eerste vereiste is om uit te zoeken hoe we het gedrag van bestaande cheques kunnen aanpassen. Dus laten we een kijkje nemen naar de IncludeCheck
klasse, die valideert hoe bestanden in een thema moeten worden opgenomen.
class IncludeCheck implementeert themecheck protected $ error = array (); functiecontrole ($ php_files, $ css_files, $ other_files) $ ret = true; $ checks = array ('/ (? __ ('Het thema lijkt include of require te gebruiken. Als deze worden gebruikt om afzonderlijke secties van een sjabloon op te nemen uit onafhankelijke bestanden, dan get_template_part () moet in plaats daarvan worden gebruikt. ',' themecheck ')); foreach ($ php_files als $ php_key => $ phpfile) foreach ($ controleert als $ key => $ check) checkcount (); if (preg_match ($ key, $ phpfile, $ matches)) $ filename = tc_filename ($ php_key); $ error = '/ (?fout [] = sprintf (__ ('INFO: % 1 $ s % 2 $ s% 3 $ s ',' themecheck '), $ filename, $ check, $ grep); retourneer $ ret; functie getError () return $ this-> error; $ themechecks [] = nieuwe IncludeCheck;
CheckCount
veranderlijk.$ themechecks
array aan het einde van het bestand.Stel dat u een bestaande thema-controle wilt verbeteren door nieuwe regels toe te voegen of bestaande regels aan te passen. Het enige wat u hoeft te doen is een nieuw item toevoegen of de reguliere expressies van bestaande items in de controleserie wijzigen.
Nu moet u een goed begrip hebben van hoe thema-controles werken en hoe de fouten worden gegenereerd bij fouten. Laten we verder gaan met het belangrijkste deel van het maken van onze eigen aangepaste controles zonder de kernplug-in uit te voeren.
Het bouwen van nieuwe thema-controles kan net zo eenvoudig zijn als het implementeren van de interface met een nieuwe themacontroleklasse en het plaatsen van de bestanden in de controlemap van de plug-in. Maar het veranderen van de kernfunctionaliteit is geen aanbevolen methode, omdat je altijd je bestanden verliest bij updates van plug-ins.
Best practice is om plug-ins uit te breiden met behulp van mogelijke opties zonder de kerncode aan te tasten. Ontwikkelaars van Themacheck hebben de mogelijkheid ingeschakeld om de functionaliteit uit te breiden met behulp van een actiehaak genaamd themecheck_checks_loaded
.
Deze actiehaak wordt uitgevoerd nadat alle themacontroles zijn geladen. Daarom hebben we toegang tot de algemene themacontrolevariabele binnen inplugbare plug-ins. Nu is het tijd om aan de slag te gaan door een aangepaste plug-in te maken.
Soms moeten we enkele thema-controles uitschakelen om aan de vereisten van onze eigen thema's te voldoen. U moet het bestand verwijderen of de initialisatiecode becommentariëren om ze in een normaal scenario uit te schakelen. Maar met de kracht van een pluggable plug-in kunnen we ze op elk gewenst moment in- of uitschakelen zonder de kern te beïnvloeden. Laten we eens kijken hoe we thema-controles kunnen uitschakelen met behulp van een plug-in.
function custom_themecheck_checks_loaded () global $ themechecks; $ Checks_to_disable = array ("Deprecated", "Screenshot_Checks"); foreach ($ themechecks als $ keyindex => $ check) if ($ check instanceof themecheck) $ check_class = get_class ($ check); if (in_array ($ check_class, $ checked_to_disable)) unset ($ themechecks [$ keyindex]); add_action ('themecheck_checks_loaded', 'custom_themecheck_checks_loaded');
We kunnen het themecheck_checks_loaded
actie van de Theme Check-plugin, in onze eigen plug-ins. Daar hebben we toegang tot alle geladen thema-controles. We kunnen een array definiëren die de klassenamen bevat van thema-controles die we willen uitschakelen. Uiteindelijk schakelen we de controles uit in de uitgeschakelde array en wordt de thema-controle uitgevoerd zonder deze validaties.
We mogen de bestaande thema-controles gemakkelijk aanpassen met onze eigen plug-in. Het implementeren van een themacheck vanuit het niets is de belangrijkste bedoeling van deze tutorial. Laten we dus eens kijken hoe we een nieuwe themacontrole kunnen maken.
Er kunnen honderden scenario's zijn voor het implementeren van aangepaste thema-cheques. Validatie van aangepaste actiehaken is een van mijn favorieten en ik zal de code gebruiken voor uitleg.
Eigenlijk zou ik graag bepaalde aangepaste actiehaken in mijn thema's hebben om nieuwe functionaliteit toe te voegen. Het thematische thema is een goed voorbeeld voor het effectief gebruiken van aangepaste actiehaken in thema's. Laten we beginnen met het implementeren van een aangepaste themacontrole.
Maak binnen de aangepaste plug-in map een nieuwe PHP-klasse en implementeer de interface met de details die in de vorige secties zijn besproken. De eenvoudigste manier is om een bestaande themacontrole te kopiëren en de controlefunctie en initialisatie te wijzigen. Overweeg de volgende code voor de implementatie van het controleren van aangepaste actiehaken.
__( 'Zien: ',' themecheck '),' do_action \ (\ s? ("| \ ') sample_action2 (" | \') \ s? \) '=> __ (' Zie: ',' themacontrole ')); foreach ($ controleert als $ key => $ check) checkcount (); if (! preg_match ('/'. $ key. '/ i', $ php)) if ($ key === 'do_action \ (\ s? ("| \') sample_action1 (" | \ ') \ s? \) ') $ key = __ (' do_action (\ 'samplerijdende 1 \') ',' themechek '); if ($ key === 'do_action \ (\ s? ("| \') sample_action2 (" | \ ') \ s? \)') $ key = __ ('do_action (\' sample_action2 \ ') ',' themechek '); $ key = ltrim (trim (trim ($ key, '('), '\\')); $ this-> error [] = sprintf (__ ('VERPLICHT: Kon niet vinden % 1 $ s. % 2 $ s ',' themecheck '), $ key, $ check); $ ret = false; retourneer $ ret; functie getError () return $ this-> error; $ themechecks [] = nieuwe CustomActions; ?>
Bij deze aangepaste controle heb ik reguliere expressies gebruikt om twee aangepaste actiehaken te valideren sample_action1
en sample_action2
. Nadat een overeenkomst is gevonden, definiëren we een gebruikersvriendelijke sleutel die aan de gebruiker moet worden getoond in plaats van de oorspronkelijke reguliere expressies. Als u het vergelijkt met bestaande controles, zult u merken dat reguliere expressies en berichten van de controlefunctie de enige dingen zijn die zijn gewijzigd.
Eindelijk kunnen we nieuwe controles toevoegen met behulp van een andere implementatie van de actie zoals weergegeven in de volgende code.
function custom_new_themecheck_loadeder () global $ themechecks; include_once 'custom_actions.php'; add_action ('themecheck_checks_loaded', 'custom_new_themecheck_loadeder');
Nu kunt u uw eigen themachecks integreren in de plug-in Theme Check.
Themacontrole is ontwikkeld om thema's te valideren met de richtlijnen voor ontwikkeling van WordPress-thema's. Daarom zal het zich vooral richten op beveiligingsproblemen en een consistent formaat en functies behouden.
We kunnen deze plug-in vanuit een ander perspectief gebruiken om functies toe te voegen, zoals in het laatste gedeelte. Als u een expert bent in reguliere expressies, is het mogelijk om een aantal geavanceerde themacontroles te maken met deze geweldige tool.
Het is aan jou om te beslissen wanneer je aangepaste thema-cheques gebruikt. Dit is natuurlijk belangrijker voor thema-ontwikkelaars dan voor gebruikers van WordPress-thema's.
Ik kan twee belangrijke scenario's bedenken waar aangepaste thema-controles nuttig kunnen worden.
Ik denk niet dat een ontwikkelaar elk WordPress-thema helemaal zelf zal ontwikkelen. Meestal behouden ontwikkelaars hun eigen basisthema voor het thema en bouwen daarbovenop verschillende ontwerpen.
Aangepaste thema-controles zijn dus erg handig om de consistentie van een basiskader voor alle thema's te behouden. U kunt zaken als afbeeldingsformaten, maten, shortcodes, acties enz. Valideren binnen uw eigen framework.
Over het algemeen zijn de meeste WordPress-thema's ontworpen om te passen bij een soort bloggingstype. WordPress biedt ingebouwde actiehaken voor blogfuncties en daarom hebben we geen problemen om ze uit te breiden.
Er kunnen echter scenario's zijn waarbij u thema's ontwikkelt voor toepassingen zoals vacaturesites, winkelwagentjes, eventmanagementsystemen enz. Die thema's hebben totaal verschillende secties en functies in vergelijking met blogs. WordPress biedt geen ingebouwde functies voor dergelijke thema's. Daarom zou het een goed idee zijn om actiehaken binnen dergelijke thema's te implementeren en ze te valideren met behulp van Themacontrole.
Ik hoop dat je het belang van Themacheck hebt geleerd en hoe we het kunnen gebruiken om de samenhang tussen onze thema's te behouden.
Ik zou graag willen weten of je deze plug-in hebt gebruikt en wat voor soort aangepaste thema-controles je hebt geïmplementeerd om de functies ervan uit te breiden.
Aarzel niet om uw suggesties en vragen te delen in de comments hieronder.