Snelle tip voorwaardelijk inclusief JS en CSS met get_current_screen

Zoals velen voor mij zeiden: "Een goede WordPress-burger laadt zijn bestanden alleen op de plaats waar ze nodig zijn". Dit principe is van toepassing op zowel het front-end als het back-end (admin). Het is niet gerechtvaardigd om CSS- en JS-bestanden op elke beheerderspagina te laden wanneer u ze alleen op één pagina nodig hebt die u hebt gemaakt. Gelukkig is het op de juiste manier doen van dingen slechts één functie om te bellen.

"Neem nooit CSS- of JS-bestanden op alle beheerderspagina's op, dit veroorzaakt conflicten met andere plug-ins."


Er is een WordPress-functie voor alles

Omdat bijna alle admin-pagina's een unieke URL hebben, is het echt niet moeilijk om te detecteren wanneer een bepaalde pagina is geladen en bevatten we (en alleen dan) JS- en CSS-bestanden die we nodig hebben. We kunnen gebruiken $ _SERVER [ 'REQUEST_URI'], of in veel gevallen, de $ _GET [ 'action'] variabel. Er is echter een veel eenvoudigere, schonere en meer gestandaardiseerde manier om dat te doen. Zeg hallo tegen de get_current_screen functie.

Dingen om te weten over de get_current_screen functie:

  • Het werd geïntroduceerd in WordPress v3.1, dus als u het in oudere versies probeert te gebruiken, krijgt u een foutmelding "call to undefined function". De ... gebruiken function_exists functie om te controleren of het een goed idee is om een ​​alternatief te bieden.
  • Het is niet beschikbaar in de admin_init of in het haakt omdat het wordt geïnitialiseerd nadat die haken worden genoemd.
  • De functie retourneert een WP_Screen object met veel info, maar je zult vooral geïnteresseerd zijn in de ID kaart objecteigenschap.
  • Het is niet beschikbaar aan de voorkant (omdat het daar geen nut heeft).

Een paar regels code maken het verschil

Laten we aannemen dat uw plug-in een pagina met opties heeft onder het menu Instellingen die u hebt gemaakt met:

add_options_page ('My Plugin', 'My Plugin', 'manage_options', 'my_plugin', 'my_plugin_options');

Je hebt wat extra CSS en JavaScript nodig op die pagina, dus je voegt ook deze code toe:

 // Slechte code hieronder! Kopieer / plak niet! add_action ('admin_enqueue_scripts', 'my_plugin_scripts'); function my_plugin_scripts () wp_enqueue_style ('farbtastic'); wp_enqueue_script (farbtastic); 

Dat is slecht! Doe dat niet! Het bovenstaande fragment bevat CSS en JS voor de Farbtastic-kleurkiezer op elke afzonderlijke beheerderspagina. Als andere plug-ins uw inhoud van hun pagina's willen verwijderen, moeten ze deze gebruiken wp_dequeue_ * functies om ze te verwijderen. Dat is echt onnodig en onbeleefd omdat we betere code kunnen schrijven!


 add_action ('admin_enqueue_scripts', 'my_plugin_scripts'); function my_plugin_scripts () // Voeg JS / CSS alleen toe als we op onze optiespagina zijn als (is_my_plugin_screen ()) wp_enqueue_style ('farbtastic'); wp_enqueue_script (farbtastic);  // Controleer of we op onze functie voor opties pagina is_my_plugin_screen () $ screen = get_current_screen (); if (is_object ($ scherm) && $ scherm-> id == 'settings_page_my_plugin') return true;  else return false; 

Het is echt gemakkelijk

Als u onze verbeterde code bekijkt, kunt u zien dat we er slechts één hebben toegevoegd als verklaring en een eenvoudige functie - is_my_plugin_screen die controleert of we op de pagina met opties van onze plug-in staan. De variabele $ screen houdt de WP_Screen object met veel eigenschappen, maar we zijn alleen geïnteresseerd in de ID kaart een. Dat ID kaart bestaat uit een voorvoegsel "settings_page_", wat hetzelfde is voor alle instellingenpagina's, en een string"my_plugin"wat uniek is voor onze plug-in omdat we het definieerden als de 4e parameter in de add_options_page functieaanroep.

De code is heel eenvoudig en gemakkelijk aan te passen aan elk beheerdersscherm. Om te zien wat de ID van het huidige scherm is, dumpt u simpelweg de inhoud van $ screen met:

echo '
'. print_r (get_current_screen (), true). '
';

Dingen om mee naar huis te nemen:

  • Nooit CSS- of JS-bestanden opnemen op alle beheerderspagina's; het veroorzaakt conflicten met andere plug-ins.
  • Gebruik get_current_screen na in het om erachter te komen wanneer uw beheerdersscherm zichtbaar is en pas dan extra bestanden toe te voegen.
  • U vindt een lijst met de ID's van het kernbeheerdersscherm in de Codex onder Beheerdersschermreferentie.
  • Nooit echoën > of