Persisted WordPress Admin Merknader Del 3

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.

Kontrollerer når administrasjonsopplysninger vises

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 hvis innstillingene er oppdatert er satt til ekte.

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:

  • Engangsadvarsel som forsvinner etter en visning.
  • En administrasjonsdisk som forsvinner etter et visst antall visninger.
  • Klistret administrasjonsvarsel som fortsatt blir avvist ved sideoppdatering.
  • Tilpasset handling avskedigelse (administrasjonsvarsel fjernet etter at spesifikk handling har fullført).

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.

One-Off Admin Notice

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, kommentere register_activation_hook () og ADD_ACTION () funksjonsanrop. La oss nå sette opp en grunnleggende administrasjonsmelding som vi snart vil forlenge funksjonaliteten til.

Legg til en ny ADD_ACTION () ring inn i 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 til display_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 til 5 og legg til en ny klasse eiendom:

offentlig $ counter_reset = false;

Deretter inne i det() erstatte

add_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 til falsk for å starte administrasjonsmeldingen igjen.

For å bruke den nye tilbakestillingsfunksjonen, må du bare endre $ counter_reset til ekte 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.