Persisted WordPress Admin Merknader Del 2

I del en av denne serien lærte vi hvordan å implementere en grunnleggende administrasjonsvarsel som vises øverst på hver WordPress admin side. I denne opplæringen begynner vi å bygge ut et plugin for å inneholde alle våre egendefinerte adminvarselskoder.

Vi begynner med å implementere standardadvarsler og bruke dem som en base for mer fleksible og avanserte eksempler.

Setter opp vårt plugin

Først, men la oss sette opp et nytt plugg fra grunnen som vi skal bruke for alle våre administrasjonsmeldinger, så vi er klare til å begynne å skrive inn kode.

Jeg antar her at du allerede har en lokal WP-utviklingsside satt opp. Hvis ikke, referer du tilbake til koblingene i del 1 av denne opplæringsserien.

Opprett en ny plugin-mappe som heter admin_notices innsiden / Wp-content / plugins /, og opprett deretter en admin_notices.php fil som vil være hoved plugin-filen.

Åpne opp admin_notices.php i din favorittredigerer og legg til den grunnleggende pluginstrukturen:

i det();

Vi la til en grunnleggende plugin header så WordPress gjenkjenner vårt plugin. Dette følges av en klasse som vil inneholde metoder for å vise våre administrasjonsmeldinger.

Jeg hette klassen Gwyer_Admin_Notices å prøve å gjøre det så unikt som mulig. På denne måten er det mye mindre sannsynlig å komme i konflikt med et eksisterende klassenavn.

La oss begynne med å vise en grunnleggende administrasjonsvarsel, og legg til det for å gjøre det mer nyttig. For å opprette en adminvarsel legger du til admin_notices krok til i det() funksjon:

add_action ('admin_notices', array ($ this, 'test_notice'));

Kroken inneholder en test_notice tilbakeringingsfunksjon som vil bli brukt til å sende ut administrasjonsoppslaget.

Legg til følgende klassemetode til Gwyer_Admin_Notices for å vise den faktiske administrasjonen. For meldingene bruker vi klassiske filmnotater fra de siste 100 årene av filmer.

/ ** * Utfør en testadministrasjonsadvarsel. * / public function test_notice () ?> 

Yoo hoo, stor sommer blåse ut.

Aktiver plugin for å vise testmeldingen.

La oss også legge til eksempler på de andre typer administrasjonsvarsler vi kan vise, inkludert den avvisbare typen, ved å legge til er-dismissible CSS klasse. Legg til disse i test_notice () metode under den eksisterende administrasjonen div:

Toto, jeg har en følelse av at vi ikke er i Kansas lenger.

Du hadde meg på "hallo".

Av alle gin-leddene i alle byene i hele verden går hun inn i min.

Ingen setter Baby i et hjørne.

Dette er hele spekteret av administrasjonstyper vi kan vise via WordPress-kjerne CSS-klassene. Husk at den avvisbare administrasjonsmeldingen vil dukke opp igjen på hver sidelast!

"Avvisbar" administrasjon i denne sammenhengen betyr bare for den aktuelle siden. Å ha vedvarende administrasjonsmeldinger er ikke veldig fleksibel, så senere vil vi se nærmere på forskjellige måter du kan avvise dine administrasjonsmeldinger effektivt.

Admin Notice Hooks

Så langt har vi bare brukt admin_notice krok for å implementere en administrasjon. Det er faktisk fire separate administrasjonshenger som du kan bruke til å vise varsler, men admin_notice er den mest brukte.

De fire krokene som er tilgjengelige er:

  • admin_notices (brukt i de fleste tilfeller)
  • network_admin_notices
  • all_admin_notices*
  • user_admin_notices*

*Ingen offisiell dokumentasjon tilgjengelig for disse krokene.

Så hvor vil du vanligvis bruke all_admin_notices, user_admin_notices, og network_admin_notices? Og hvordan skiller de seg fra admin_notices?

Jeg sa tidligere at admin_notices krok viser varsler på alle admin sider, men dette er ikke helt sant. Hvis du ser på admin-header.php i WordPress-kjerne, vil du se det admin_notices, network_admin_notices, og user_admin_notices er gjensidig eksklusiv. Det er bare en av disse krokene brenner på en WordPress admin side.

En rekke betingede uttrykk evaluerer gjeldende admin side og brenner bare en av dem, avhengig av hvilken type admin side du er i øyeblikket på.

for det første, is_network_admin () sjekker for å se om du er på et nettverksadministrasjonsskjermbilde (for eksempel hvilken adminsside som er basert på en / Wp-admin / network / URL). I så fall er det network_admin_notices krokbranner.

Ellers, is_user_admin () sjekker for å se om du er på en brukeradministrasjonsskjerm (for eksempel en admin side basert på a / Wp-admin / user / URL). I så fall er det user_admin_notices krokbranner. 

Og som du kanskje har gjettet, hvis både is_network_admin () og is_user_admin () returner falsk da admin_notices krokbranner.

Det forlater bare all_admin_notices kroken. Denne kroken er ikke en del av det betingede uttrykket som er diskutert ovenfor, så denne kroken er garantert å vises på alle admin sider uansett hva, inkludert multisite nettverk administrasjonssider.

For å klargjøre, for enhver WordPress admin side, bare all_admin_notices krok er garantert å alltid brann. Ut av de andre tre kroker, bare en vil brann avhengig av admin siden du er på.

Jeg vil oppfordre deg til å ta en titt på admin-header.php (mot slutten av filen) for å se for deg selv hvordan WordPress evaluerer når du skal bruke hver admin notiser krok.

Vi bruker bare admin_notices gjennom hele denne opplæringsserien, men du kan finne at du har behov for noen av de andre krokene i ditt eget prosjekt, så det er vel verdt å sjekke dem ut.

Viser administrasjonsmeldinger på bestemte sider

La oss få oppmerksomheten vår nå for å vise administrasjonsmeldinger på bestemte sider. Først, kommentere anropet til ADD_ACTION så våre testmeldinger vises ikke lenger.

Innsiden i det(), legg til en ny ADD_ACTION () ring som vi vil bruke til å vise en administrasjonsvarsel på en bestemt admin side.

add_action ('admin_notices', array ($ this, 'specific_admin_page'));

Definer deretter specific_admin_page () metode som følger:

/ ** * Utfør en administrasjon på en bestemt admin skjerm. * / offentlig funksjon specific_admin_page () $ admin_page = get_current_screen (); ?> 

Informasjon: Vi er for tiden på utgangspunkt; ?> admin side.

Lagre endringene dine og se hvilken som helst side i WordPress-administrasjonen. Jeg skal prøve hoveddashboardsiden.

Som du kan se, for hvilken admin side du besøker, vises navnet på siden på siden i administrasjonsmeldingen.

De get_current_screen () funksjon returnerer a WP_Screen objekt med detaljer om gjeldende admin skjerm. Den bestemte objektegenskapen vi er interessert i er WP_Screen-> basen, som evaluerer til basen av den nåværende skjermen. Prøv å laste forskjellige WordPress admin sider for å se hvilke verdier som returneres for WP_Screen-> basen.

Vi kan bruke basisverdien til betinget å laste inn vår administrasjon kun på dashbordssiden. Verdien vi må sjekke for er dashbord. La oss også vise et alternativt administrasjonsoppslag hvis vi ikke er på admin dashboard siden. Erstatt din definisjon av specific_admin_page () med:

/ ** * Utfør en administrasjon på en bestemt admin skjerm. * / offentlig funksjon specific_admin_page () $ admin_page = get_current_screen (); hvis ($ admin_page-> base == "dashboard"):?> 

Vi klarte det! Velkommen til dashbordet.

Hvor gikk du? Dette er ikke instrumentbrettet!

Alt er greit når vi er på dashbordssiden, men prøv å navigere til en annen admin side og se hva som skjer.

Ved å bruke denne enkle tilnærmingen gir vi ganske fleksibilitet når du viser adminvarsler på bestemte admin sider. Vi kan enkelt utvide dette til hvitelisten et hvilket som helst antall administrasider som vi vil vise administrasjonsvarsler på.

Igjen, erstatt specific_admin_pages () funksjon, denne gangen med følgende kode:

/ ** * Utfør en administrasjon på en bestemt admin skjerm. * / offentlig funksjon specific_admin_page () $ whitelist_admin_pages = array ('dashbord', 'opplasting', 'redigering-kommentarer'); $ admin_page = get_current_screen (); hvis (in_array ($ admin_page-> base, $ whitelist_admin_pages)):?> 

Vi klarte det! Dette er 'utgangspunkt; ?> 'admin side.

Ikke på nelly! Denne siden er ikke på listen min.

I stedet for å sjekke for en enkelt admin side, kontrollerer vi nå for å se om basenavnet for gjeldende admin side er i $ whitelist_admin_pages array. Når vi navigerer til dashbordet, mediebiblioteket eller kommentarer på adminssider, ser vi vår suksessadvarsel.

Og når vi besøker noen annen admin side (ikke inkludert i vår whitelist array), ser vi en alternativ administrasjonsvarsel.

Hva med å vise en adminvarsel på en plugin-valgside? Hvordan ville vi gå om det? Før vi kommer inn i dette, må vi først opprette en dummyalternativerside for pluginet vårt.

Opprett en ny fil som heter plugin-options.php inne i admin-meldinger plugin-mappe vi la til tidligere, og legg til følgende kode:

 

Administrasjonsplugin

Skriv inn litt tekst
i det();

På toppen av admin-notices.php (rett over klassedeklarasjonen), inkludere plugin-opsjonsklassen i hovedpluginfilen med:

require_once (dirname (__ FILE__). '/plugin-options.php');

Jeg går ikke inn for mye detalj på hvordan koden i plugin-options.php fungerer som det kan være en hel opplæring på egen hånd! Hvis du vil ha en oppfriskning, vil jeg anbefale å ta en titt på WordPress Codex-siden når du legger til tilleggsinnstillingssider.

I utgangspunktet er alt vi gjør, å legge til en ny Administrasjonsopplysninger underside til innstillinger Meny. Pluginalternativer-siden inneholder i seg et enkelt tekstfelt som du kan legge inn en streng inn i. Når Lagre endringer knappen klikkes, innholdet i tekstfeltet lagres i WordPress-databasen.

Dette er bare et bare-bein eksempel på en plugininnstillingsside bare for demonstrasjon. Det inkluderer ikke de nødvendige sanitiserings- eller oversettelsesfunksjonene som anbefales for en produksjonsplugg beregnet for generell utgivelse.

Gå til Innstillinger> Administrasjonsopplysninger for å vise plugin-opsjonssiden.

Som forventet vises administrasjonsvarselet vi la til tidligere, på vår plugin-valgside. Feilmeldingen vises fordi vår side for pluginalternativer ikke er i $ whitelist_admin_pages array av tillatte admin sider. La oss fikse det nå.

For å legge til vår tilleggsside i arrayet, må vi kjenne basenavnet. Innsiden specific_admin_page (), endre feilvarsel div til følgende:

Ikke på nelly! Dette "utgangspunkt; ?> 'er ikke på listen min.

Vi får fortsatt den samme feilmeldingen som tidligere, men denne gangen inneholder den basenavnet vi trenger, noe som viser seg å være settings_page_admin-meldinger / plugin-alternativer. Det er ikke et navn vi lett kunne gjette, så det var verdt å ta seg tid til å skrive ut det!

Legg til basenavnet til $ whitelist_admin_pages array, som nå skal se slik ut:

$ whitelist_admin_pages = array ('settings_page_admin-notices / plugin-options', 'dashboard', 'opplasting', 'redigering-kommentarer');

Oppdater oppdateringssiden for plugin for å se den oppdaterte adminmeldingen.

Nå som vi kjenner plugin-alternativets sidebasenavn, kan vi enkelt lage en administrasjonsmelding som bare vises på administrasjonssiden. Fjerne settings_page_admin-meldinger / plugin-alternativer fra $ whitelist_admin_pages array og kommentere det andre ADD_ACTION funksjonsanrop inn i det(). Deretter legger du til en tredje handling som vi vil bruke til vår pluggalternativer-side, kun administrasjon. Din i det() funksjonen skal nå se slik ut:

/ ** * Registrer kroker. * / offentlig funksjon init () // add_action ('admin_notices', array ($ this, 'test_notice')); // add_action ('admin_notices', array ($ this, 'specific_admin_page')); add_action ('admin_notices', array ($ this, 'plugin_admin_notice'));  

La oss kjøre ut plugin_admin_notice () tilbakeringingsfunksjon nå. Legg til denne nye metoden til Gwyer_Admin_Notices klasse:

/ ** * Utfør en adminvarsel på siden Plugin Options. * / offentlig funksjon plugin_admin_notice () $ whitelist_admin_pages = array ('settings_page_admin-notices / plugin-options'); $ admin_page = get_current_screen (); hvis (in_array ($ admin_page-> base, $ whitelist_admin_pages)):?> 

Velkommen til administrasjonsplugin-siden!

Dette ligner veldig specific_admin_page () bortsett fra at vi har fjernet betingelsesuttrykket. Vi har også lagt til en avvisbar knapp ved å legge til er-dismissible CSS-klassen, slik at administrasjonsmeldingen nå kan lukkes også.


Prøv å laste inn andre admin sider for å bekrefte at administrasjonsoppslaget bare vises på plugin-valgsiden.

Konklusjon

I denne opplæringen lærte vi mer om administrasjonsmeldinger og de ulike krokene som er tilgjengelige for å vise dem. Vi har også dekket hvordan du viser admin kunngjøringer bare på bestemte sider av WordPress admin. Vi utviklet en dedikert plugin for å inneholde alle de egendefinerte admin varselkoden.

I del tre vil vi videre utvide pluginet ved å vise hvordan du utløser administrasjonsmeldinger når visse hendelser oppstår. Husk at WordPress åpen kildekode gjør det enkelt å lære og utvide. Til det formål har vi mye å vurdere og studere i Envato Market hvis du er nysgjerrig.

Vi vil da være oppmerksom på å finne ut hvordan vi kan løse det vedvarende administrasjonsproblemet, slik at de ikke vises når siden oppdateres. Vi implementerer flere forskjellige metoder i vår tilpassede plugin slik at vi kan gjøre dette.