Hurtig Tips Tilstandsbestemt Inkludert JS og CSS Med get_current_screen

Så mange sa for meg: "En god WordPress-borger laster bare sine filer der de trengs". Dette prinsippet gjelder både front-end og back-end (admin). Det er ingen grunn til å laste inn CSS og JS-filer på hver admin side når du bare trenger dem på en enkelt side du opprettet. Heldigvis gjør ting på den rette måten er bare en funksjonskall unna.

"Ikke ta med CSS eller JS filer på alle admin sider. Det vil føre til konflikter med andre plugins."


Det er en WordPress-funksjon for alt

Siden nesten alle administrasjonssidene har en unik nettadresse, er det egentlig ikke vanskelig å oppdage når en bestemt side er lastet, og deretter (og bare da) inkluderer JS og CSS-filer vi trenger. Vi kan bruke $ _SERVER [ 'REQUEST_URI'], eller i mange tilfeller $ _GET [ 'handling'] variabel. Men det er en mye enklere, renere og mer standardisert måte å gjøre det på. Hallo til get_current_screen funksjon.

Ting å vite om get_current_screen funksjon:

  • Den ble introdusert i WordPress v3.1, så hvis du prøver å bruke den i eldre versjoner, får du en "ring til udefinert funksjon" -feil. Bruker function_exists funksjon for å sjekke om det er en god ide om du vil gi et alternativ.
  • Det er ikke tilgjengelig i admin_init eller i det kroker fordi den blir initialisert etter at krokene er kalt.
  • Funksjonen returnerer a WP_Screen objekt med mye info, men du vil hovedsakelig være interessert i id objekt eiendom.
  • Det er ikke tilgjengelig på forsiden (fordi det ikke tjener noe formål der).

Et par linjer av kode gjør hele forskjellen

La oss anta at pluginet ditt har en tilleggsside under Innstillinger-menyen som du opprettet med:

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

Du trenger litt ekstra CSS og JavaScript på den siden, så du legger til denne koden også:

 // Dårlig kode nedenfor! Ikke kopier / lim inn! add_action ('admin_enqueue_scripts', 'my_plugin_scripts'); fungere my_plugin_scripts () wp_enqueue_style ('farbtastic'); wp_enqueue_script ( 'farbtastic'); 

Det er ille! Ikke gjør det! Utsnittet ovenfor vil inkludere CSS og JS for Farbtastic fargeplukker på hver enkelt admin side. Hvis andre plugins ønsker å bli kvitt din inneholder på sidene de må bruke wp_dequeue_ * Fungerer for å dequeue dem. Det er virkelig unødvendig og uhøflig av oss fordi vi kan skrive bedre kode!


 add_action ('admin_enqueue_scripts', 'my_plugin_scripts'); funksjon my_plugin_scripts () // Inkluder JS / CSS bare hvis vi er på vår opsjonsside hvis (is_my_plugin_screen ()) wp_enqueue_style ('farbtastic'); wp_enqueue_script ( 'farbtastic');  // Sjekk om vi er på funksjonssiden vår funksjon is_my_plugin_screen () $ screen = get_current_screen (); hvis (er_objekt ($ skjerm) && $ skjerm-> id == 'settings_page_my_plugin') return true;  ellers return false; 

Det er veldig enkelt

Hvis du ser på vår forbedrede kode, kan du se at vi bare har lagt til en hvis uttalelse og en enkel funksjon - is_my_plugin_screen som sjekker om vi er på alternativet for plugin-modulen vår. Variabelen $ skjermen holder WP_Screen objekt som har mange egenskaper, men vi er bare interessert i id en. At id består av et prefiks "settings_page_", som er det samme for alle innstillingssider, og en streng"my_plugin"som er unikt for plugin fordi vi definerte det som fjerde parameter i add_options_page funksjonsanrop.

Koden er veldig enkel og lett å tilpasse til hvilken som helst admin skjerm. For å se hva ID-en er for den nåværende skjermen, bare dump innholdet av $ skjermen med:

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

Ting å ta med hjem:

  • Ikke ta med CSS eller JS-filer på alle admin sider; det vil føre til konflikter med andre plugins.
  • Bruk get_current_screen etter i det for å finne ut når administrasjonsskjermen din er synlig, og bare da ta med flere filer.
  • Du kan finne en liste over kjernedisplay-skjerm-IDene i Codex under Admin Screen Reference.
  • Aldri ekko > eller