Thema's aanpassen voor het valideren van WordPress-thema's

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.


Kan Theme Check Alles 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.


Belang van Theme Check Plugin

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.


Themacontrole gebruiken

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.


Zorg ervoor dat u de 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.


Understanding Theme Check Interface

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.


Inleiding tot het themacontroleproces

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; 

Code Uitleg

  • Alle thema-cheques worden opgeslagen in de checks map van de plug-in en elk ervan wordt opgenomen door te zoeken naar de PHP-bestanden in de map.
  • Nadat alle themacontroles zijn geladen, voert de plug-in een aangepaste actie uit genaamd themecheck_checks_loaded. Deze actie fungeert als het belangrijkste onderdeel in het uitbreidingsproces.
  • Vervolgens begint het systeem thema-controles uit te voeren via de run_themechecks functie, die PHP-bestanden, CSS-bestanden en andere bestanden als variabelen neemt.
  • Ten slotte wordt de controlefunctie van elk van de thema-controles in de globale geladen $ themechecks variabele die zal worden uitgevoerd om het controleproces te voltooien.

Het aanpassen van bestaande thema-cheques

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;

Code Uitleg

  • Alle thema-controles hebben een beveiligde array voor het opslaan van fouten.
  • Binnen de controlefunctie kunnen we elk aantal controles in een array opnemen. Hier hebben we maar één controle.
  • De meeste thema-controles worden uitgevoerd door overeenkomende reguliere expressies en daarom zijn de sleutels voor de reeks controles reguliere expressies. De waarde van de betreffende sleutel moet de foutmelding bevatten die moet worden weergegeven in geval van storingen.
  • Vervolgens moeten we een specifiek type bestand kiezen en elke controle in de array doorlopen terwijl het globale wordt bijgewerkt CheckCount veranderlijk.
  • Vervolgens voeren we de reguliere expressie-overeenkomst uit en wijzen we de fouten toe aan de globale foutarray bij fouten.
  • Nadien geven we de status van de cheque terug als een succes of een mislukking. Afhankelijk van de status, pakt de plug-in de nodige fouten voor weergave op de resultatenpagina.
  • Ten slotte initialiseren we het object van de themacontroleklasse en wijzen we het toe aan het globale $ 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.


Thema-controle verlengen met insteekbare plug-in

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.


Bestaande cheques verwijderen

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.


Nieuwe thema-cheques 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.


Wanneer gebruik je Themacontrole

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.

Een basisraamwerk onderhouden

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.

Thema's ontwikkelen die verder gaan dan blogs

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.


Conclusie

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.