Velkommen tilbake til vår serie om vedvarende WordPress admin notices. Vi er nå i en god posisjon for å kunne utvide vår administrasjonsfunksjonalitet og kontroll når de vises på siden.
Deretter går vi videre til vedvarende administrasjonsmeldinger og ser hvordan du kan sørge for at de blir avvist på en slik måte at de ikke kommer igjen når administratorsider blir lastet opp.
Dette er spesielt viktig som tilpassede admin-notiser implementert i plugins og temaer er bare veldig nyttige når du permanent kan avvise dem. Det er ikke nok å bare legge til er-dismissible
CSS klasse.
Hittil har alle administrasjonsmeldinger blitt vist så snart siden lastes. Det kan være ganger når dette er ubeleilig, og du vil at administrasjonsmeldingen skal vises etter en viss hendelse har blitt utløst i stedet.
Hva med om vi ville ha en egendefinert admin melding om å bli vist på plugin options siden vi opprettet tidligere, men bare etter Lagre endringer knappen ble klikket?
Vi vet allerede fra del to hvordan du begrenser en administrasjonsmelding til plugin-opsjonssiden. La oss finne ut hvordan vi kan utløse det som vises etter at pluginalternativene har blitt lagret.
Begynn med å kommentere ADD_ACTION
funksjonsanrop for plugin_admin_notice
. Deretter legger du til en fjerde ADD_ACTION
ring inn i det
som følger:
add_action ('admin_notices', array ($ this, 'conditional_plugin_admin_notice'));
Når plugin alternativer er lagret, a innstillingene er oppdatert
verdien av ekte
er lagt til super global $ _GET
array variabel. Vi kan bruke dette til å avgjøre om vi må vise vår administrasjon.
Legg til en ny conditional_plugin_admin_notice
metode til Gwyer_Admin_Notices
som gir verdien av $ _GET
til skjermen.
/ ** * Utfør en adminmelding på plugin-valgsiden når innstillingene er lagret. * / offentlig funksjon conditional_plugin_admin_notice () echo ""; print_r ($ _ GET); ekko"";
Når plugin-tilleggssiden er lastet normalt, ser vi ikke en verdi for innstillinger-oppdatert.
Skriv inn litt tekst i Skriv inn litt tekst felt og klikk Lagre endringer. Denne gangen ser vi innstillingene er oppdatert
satt til ekte
, som vi kan sette for godt bruk.
Bytt ut conditional_plugin_admin_notice
med:
/ ** * Utfør en adminmelding på plugin-valgsiden når innstillingene er lagret. * / offentlig funksjon conditional_plugin_admin_notice () $ whitelist_admin_pages = array ('settings_page_admin-notices / plugin-options'); $ admin_page = get_current_screen (); $ current_user = wp_get_current_user (); hvis (in_array ($ admin_page-> base, $ whitelist_admin_pages) && isset ($ _GET ['settings-updated']) && $ _GET ['settings-updated']):?>Plugin alternativer bare lagret. DISPLAY_NAME; ?>, du er bare så fantastisk!
Nå skal denne koden være kjent for deg. Et par nye funksjoner har blitt lagt til, skjønt. For det første har det betingede uttrykket blitt utvidet til å teste for tilstedeværelsen av
innstillinger-oppdatering
. Nå vil administrasjonsmeldingen bare vises hvis vi er på siden for pluginalternativer og hvisinnstillingene er oppdatert
er satt tilekte
.Det nåværende brukernavnetavnet blir også sendt ut for å gjøre administrasjonen litt mer personlig.
De
wp_get_current_user ()
Funksjonen returnerer informasjon om den innloggede brukeren. Dette objektet er lagret i$ CURRENT_USER
og inneholder detaljer som brukerens epost, ID, fornavn, etternavn og visningsnavn, som er den aktuelle eiendommen vi er interessert i.Til slutt, for litt ekstra polsk har vi forhindret standardadvarsel fra å vise, så vår tilpassede er den eneste som er synlig for brukeren. For å oppnå dette, har vi nettopp lagt til en enkelt linje med kode til
conditional_plugin_admin_notice ()
å skrive ut CSS for å skjule den uønskede administrasjonen.ekko "";Det endelige resultatet når pluginalternativer er lagret, vises nedenfor.
Selv om dette virker bra for demonstrasjonsformål, ville en bedre (og renere) tilnærming være å legge til stiler til et eget stilark i stedet, og bare legge det på plugin-opsjonssiden bare.
Vår tilpassede admin varsel kan utvides enda flere på en rekke måter. En mulighet kan være å opprettholde en logg som lagret gjeldende dato / klokkeslett sammen med brukerinformasjon hver gang pluginalternativene ble lagret.
Eller hva med å få administrasjonsmeldingen til å vise hvor mange ganger pluginalternativene har blitt lagret den dagen, uken, måneden, etc.? Jeg er sikker på at du også kan tenke på flere eksempler!
Avvisning vedvarende administrasjonsmeldinger effektivt
Det er på tide å få våre hender skitne nå og grave inn i mer grundig kode som vi gjør oppmerksom på å avvise vedvarende administrasjonsmeldinger. Frem til nå er den eneste måten vi har sett hvordan du gjør dette, å legge til
.er-dismissible
CSS klasse til vår admin varsel div container. Dette avviser administrasjonen for gjeldende side, men det er ikke mye bruk i praksis som det vises når en admin side er lastet opp.Så hvordan kan vi fikse dette? Vi ser på flere forskjellige metoder for å avvise vedvarende administrasjonsmeldinger, inkludert:
Før du begynner å implementere hvert av disse eksemplene, sørg for alt ADD_ACTION ()
ringer inn Gwyer_Admin_Notices :: init ()
har blitt kommentert. Legg deretter til en ny dismissible-admin-notices.php
fil til admin_notices
plugin-mappe. Åpne denne nye filen og legg til en ny klasses Definisjon:
i det();
I admin_notices.php
, Legg til en annen require_once ()
ring for å importere vår nye klasse:
require_once (dirname (__ FILE__). '/ dismissible-admin-notices.php');
De Gwyer_Dismissible_Admin_Notices
klassen vil inneholde all kode relatert til å avvise vedvarende admin meldinger.
Den første metoden vi ser på, er hvordan du viser en administrasjonsvarsel bare en gang, slik at den ikke vises på sidebelastning. Du kan bruke denne metoden til å varsle en bruker når et plugin eller tema nettopp har blitt aktivert.
La oss gjøre dette for pluginet for Admin Notices. Vi starter med å registrere et WordPress forbigående alternativ ved plugin aktivering som er satt til å utløpe nesten umiddelbart.
I Gwyer_Dismissible_Admin_Notices
klasse, legg til et anrop til register_activation_hook ()
:
register_activation_hook (plugin_dir_path (__FILE__). 'admin-notices.php', array ($ dette, 'set_admin_notice_transient'));
De register_activation_hook ()
funksjonen krever at du spesifiserer banen til hovedpluginfilen, men vi er for tiden inne dismissible-admin-notices.php
. Så vi kan ikke bare bruke PHP magisk konstanten __FIL__
Vi brukte tidligere da dette alltid peker på den nåværende PHP-filen.
I stedet må vi bygge banen til hoved pluginfilen selv ved å bruke plugin_dir_path (__FILE__). 'Admin-notices.php'
.
Når admin notisplugin er aktivert, vil den kjøre kode lagt til en set_admin_notice_transient
klassemetode, som vi skal definere neste.
offentlig funksjon set_admin_notice_transient () set_transient ('admin-notice-transient', true, 5);
Denne metoden oppretter en ny forbigående kalt 'Admin-varsel-transient'
med en verdi på ekte
, og er satt til å gå ut etter fem sekunder.
La oss gjøre bruk av dette forbigående ved betinget å vise en administrasjonsmelding hvis vi er på høyre admin side og vår forbigående eksisterer fortsatt.
Legg til en ny ADD_ACTION ()
ring til i det()
.
add_action ('admin_notices', array (& $ dette, 'display_admin_notice'));
Deretter legger du til display_admin_notice
tilbakeringingsfunksjon som en ny klassemetode:
offentlig funksjon display_admin_notice () $ current_user = wp_get_current_user (); $ whitelist_admin_pages = array ('plugins'); $ admin_page = get_current_screen (); hvis (in_array ($ admin_page-> base, $ whitelist_admin_pages) && get_transient ('admin-notice-transient')):?>De Administrasjonsopplysninger plugin ble bare aktivert. Takk for støtten DISPLAY_NAME; ?>!
På samme måte som tidligere eksempler, vises kun administrasjonsmeldingen hvis vi er på en bestemt side - i dette tilfellet, hovedadministratorens plugin-side. Men vi har en ekstra betingelse at
'Admin-varsel-transient'
må også eksistere, ellers vil administrasjonsmeldingen ikke vises.Etter at administrasjonen er utstedt, blir transienten slettet umiddelbart, selv om vi først satte den til å utløpe etter bare fem sekunder. Dette sikrer bare at det ikke vises igjen. Dette kan potensielt skje hvis en bruker prøvde å oppdatere plugin-siden veldig raskt. Men ved å bevisst slette forbigående, kan vi være sikre på at dette aldri vil være tilfelle.
For å teste koden vi nettopp har lagt til, gå videre til hovedinnstillingene og deaktiver, og reaktiver deretter, administrasjonsplugin-modulen.
Nøkkelen her er
'Admin-varsel-transient'
forbigående innstilling. Uten dette vil administrasjonsmeldingen vises hver gang pluginsiden er lastet (etter at pluginet ble aktivert), som ikke er det vi vil ha.Admin Notice Counter
Neste opp er en adminvarsel som bare viser et visst antall ganger, hvorefter det ikke vil bli synlig lenger. Også denne gangen vil det ikke bli begrenset til noen bestemt admin side.
Før vi begynner, i
Gwyer_Dismissible_Admin_Notices
klasse, kommentereregister_activation_hook ()
ogADD_ACTION ()
funksjonsanrop. La oss nå sette opp en grunnleggende administrasjonsmelding som vi snart vil forlenge funksjonaliteten til.Legg til en ny
ADD_ACTION ()
ring inni det()
:add_action ('admin_notices', array (& $ dette, 'display_admin_notice_counter'));Og deretter kutte ut tilbakeringingsfunksjonen
display_admin_notice_counter ()
:offentlig funksjon display_admin_notice_counter () ?>Teller admin melding.
Dette vil vise en standard adminvarsel som vises på hver WordPress admin side.
La oss tenke på hva vi trenger å gjøre. Vår admin varsel bør vise et angitt antall ganger, og hver gang det vises en intern teller økes med en. Når tellergrensen er nådd, bør administrasjonsmeldingen ikke vises igjen.
Vi vil at administrasjonsmeldingen skal vises på en hvilken som helst admin side, og så må tellerverdien fortsette mellom sidelaster. En god måte å gjøre dette på er å bruke et databasealternativ for å lagre counterverdien.
Legg til en tellerklasse eiendom for å lagre tellergrenseverdien:
offentlig $ counter_limit = 5;Dette vil bli brukt til å administrere hvor mange ganger administrasjonsvarselet vises. Innsiden
display_admin_notice_counter ()
, oppdater koden som følger:offentlig funksjon display_admin_notice_counter () $ counter = get_option ('admin_notice_counter', 1); ?>Denne administrasjonen har blitt vist tid (s).
Før administrasjonsoppgaven vises, henter vi mottaksalternativet, og en standardverdi returneres hvis den ikke eksisterer. Etter at administrasjonsbekreftelsen er gjort, blir telleralternativet økt med en og oppdatert. Hvis det ikke eksisterer, vil et nytt alternativ bli opprettet for å lagre gjeldende verdi.
Vi har også oppdatert CSS-klassen som en informasjonsadvarsel.
Prøv å besøke ulike administrasider og se disken øke hver gang.
De
++$ teller
kode er et eksempel på en pre-increment operatør. Det legger til en verdi til$ teller
før den er lagret i databasen. Hvis vi brukte en post-stigningsoperatør (dvs..$ teller++
) deretter verdien av$ teller
ville bli lagret først og deretter økt, som ikke ville fungere.La oss innlemme
$ counter_limit
nå for å hindre at administrasjonen vises for mange ganger. Legg til dette tildisplay_admin_notice_counter ()
under erklæringen for$ teller
:hvis ($ counter> $ this-> counter_limit) return;Nå, når administrasjonsvarselet har vist fem ganger, vil det ikke bli synlig på påfølgende administrasjons sider. Det kan imidlertid være fint å vise en melding siste gang adminmeldingen vises, slik at brukeren vet at den ikke vises igjen. Utvid det betingede uttrykket og skriv ut en ekstra melding:
offentlig funksjon display_admin_notice_counter () $ counter = get_option ('admin_notice_counter', 1); hvis ($ counter> $ this-> counter_limit) return; ellers hvis ($ counter == $ this-> counter_limit) $ extra_message = "Det er på tide å si farvel nå."; ?>Denne administrasjonen har blitt vist tid (s).
Du ser imidlertid ikke meldingen hvis du allerede har gått over tellergrensen. Du kan midlertidig løse dette ved å øke
$ counter_limit
variabel.For testformål ville det være bedre å kunne tilbakestille tellergrensen. Hvis du vet hvordan du redigerer databasen, kan du gå inn og endre alternativet direkte, men dette kan være kjedelig å gjøre flere ganger. Så la oss implementere vår egen tilbakestillingsfunksjon.
Først, endre
$ counter_limit
tilbake til5
og legg til en ny klasse eiendom:offentlig $ counter_reset = false;Deretter inne
i det()
erstatteadd_action ('admin_notices', array (& $ dette, 'display_admin_notice_counter'));med
$ Dette-> reset_counter_check ();Tilbakestillingsfunksjonen skal enten vise vår counter admin notice eller slette
admin_notice_counter
database alternativ og vise en advarselsadvarsel i stedet.offentlig funksjon reset_counter_check () if (! $ this-> counter_reset) add_action ('admin_notices', array (& $ dette, 'display_admin_notice_counter')); annet delete_option ('admin_notice_counter'); ?>Tjenestemeldingsteller har blitt tilbakestilt! Endring
$ counter_reset
tilfalsk
for å starte administrasjonsmeldingen igjen.For å bruke den nye tilbakestillingsfunksjonen, må du bare endre
$ counter_reset
tilekte
og last hvilken som helst admin side.Så bytt den tilbake til
falsk
en gang til.Merk: Denne metoden kan enkelt brukes til å vise en administrasjon kun én gang, som vi gjorde i det forrige eksempelet, men det er litt mer komplisert å sette opp. Det avhenger virkelig av dine krav.
Hvis alt du trenger, er en engangsadvarsel, vil den tidligere metoden trolig passe dine behov bedre og er raskere å implementere. Men counter-metoden er mer fleksibel, og når den er satt opp, er den like enkel å bruke i dine egne prosjekter.
Konklusjon
Vi har dekket ganske mye bakken i del tre av denne opplæringsserien. Vi har sett hvordan du kontrollerer når administrasjonsmeldinger vises i stedet for bare å vises så snart en admin side er ferdig med å laste inn. Dette er nyttig på mange måter, men vårt eksempel viste hvordan du viser en egendefinert administrasjonsvarsel etter at pluginalternativer var lagret.
Så flyttet vi videre til to forskjellige eksempler på å avvise vedvarende administrasjonsmeldinger. Dette gir deg stor fleksibilitet i hvordan du presenterer administrasjonsvarsler til brukeren. Og i neste og siste del av denne opplæringsserien, ser vi på flere måter å avvise vedvarende administrasjonsmeldinger.
Og for litt moro, vil vi lage våre egne tilpassede adminvarseltyper og legge til ikondekorasjoner.