Bine ați venit înapoi la seria noastră pe anunțurile persistente de WordPress admin. Suntem acum într-o poziție bună pentru a putea extinde funcționalitatea și controlul notiunii de administrator cand ele apar pe pagină.
După aceasta, vom trece la notificările de administrare persistente și vom vedea cum vă puteți asigura că sunt respinși astfel încât să nu reapară când paginile de admin sunt reîncărcate.
Acest lucru este deosebit de important, deoarece notificările de administrator personalizate implementate în pluginuri și teme sunt foarte utile atunci când le puteți respinge definitiv. Nu este suficient să adăugați pur și simplu este-fi închise
CSS.
Până în prezent, toate notificările de administrator au fost afișate imediat ce pagina se încarcă. Pot exista momente când acest lucru este incomod și doriți ca anunțul de administrator să fie afișat după un anumit eveniment a fost declanșat în schimb.
Ce zici dacă am dori ca o notificare de administrare personalizată să fie afișată pe pagina cu opțiuni de plugin create mai devreme, dar numai după Salvează modificările a fost apăsat butonul?
Știm deja din partea a doua despre cum să restricționăm o notificare de administrator pe pagina cu opțiuni de plugin. Hai să aflăm cum putem declanșa să apară după ce opțiunile pluginului au fost salvate.
Începeți prin a comenta ADD_ACTION
funcția de apel pentru plugin_admin_notice
. Apoi, adăugați un al patrulea ADD_ACTION
sună init
după cum urmează:
add_action ('admin_notices', array ($ this, 'conditional_plugin_admin_notice'));
Ori de câte ori sunt salvate opțiunile pluginului, a setările aduse la zi
valoarea Adevărat
este adăugat la super-global $ _GET
matrice variabilă. Putem folosi aceasta pentru a determina dacă trebuie să afișăm nota noastră de administrator.
Adăugați un mesaj nou conditional_plugin_admin_notice
metoda de a Gwyer_Admin_Notices
care afișează valoarea $ _GET
pe ecran.
/ ** * Efectuați o notificare de administrare pe pagina opțiunilor pluginului, atunci când setările au fost salvate. * / funcția publică conditional_plugin_admin_notice () echo ""; print_r ($ _GET); echo"";
Atunci când pagina cu opțiuni pentru pluginuri este încărcată în mod normal, nu vedem o valoare setată pentru setările actualizate.
Acum introduceți un text în Introduceți un text câmp și faceți clic pe Salvează modificările. De data aceasta vedem setările aduse la zi
setat la Adevărat
, pe care le putem folosi bine.
Inlocuieste conditional_plugin_admin_notice
cu:
/ ** * Efectuați o notificare de administrare pe pagina opțiunilor pluginului, atunci când setările au fost salvate. * / funcția publică conditional_plugin_admin_notice () $ whitelist_admin_pages = array ('settings_page_admin-notices / plugin-options'); $ admin_page = get_current_screen (); $ actual_user = wp_get_current_user (); dacă in_array ($ admin_page-> base, $ whitelist_admin_pages) && isset ($ _GET ['settings-updated']) && $ _GET ['settings-updated'])Opțiunile de plugin au fost salvate. numele afisat; ?>, esti asa de minunat!
Până acum, acest cod ar trebui să vă fie familiarizat. Au fost adăugate câteva caracteristici noi. În primul rând, expresia condiționată a fost extinsă pentru a testa prezența
Setări actualizare
. Acum, notificarea de administrare va fi afișată numai dacă suntem pe pagina opțiunilor pluginului și dacăsetările aduse la zi
este setat saAdevărat
.De asemenea, numele de afișare curent al utilizatorului este afișat pentru a face notificarea administratorului puțin mai personală.
wp_get_current_user ()
funcția returnează informații despre utilizatorul conectat în prezent. Acest obiect este stocat în$ current_user
și conține detalii cum ar fi e-mailul utilizatorului, ID-ul, prenumele, numele și numele afișat, care este proprietatea particulară de care suntem interesați.În cele din urmă, pentru puțină lustruire suplimentară, am împiedicat afișarea notificării prestabilite de admin, astfel încât versiunea personalizată este singura vizibilă pentru utilizator. Pentru a realiza acest lucru, am adăugat o singură linie de cod la
conditional_plugin_admin_notice ()
pentru a scoate CSS pentru a ascunde nota de administrare nedorită.ecou "„;Rezultatul final când sunt salvate opțiunile pluginului este prezentat mai jos.
În timp ce acest lucru funcționează bine în scopuri demonstrative, o abordare mai bună (și mai curată) ar fi să adăugați stiluri într-o foaie de stil separată și să o încorporați în pagina cu opțiuni de pluginuri.
Notificarea personalizată a administratorului nostru ar putea fi extinsă și mai mult în mai multe moduri. O posibilitate ar fi menținerea unui jurnal care să stocheze data / ora curentă împreună cu informațiile despre utilizator de fiecare dată când au fost salvate opțiunile pluginului.
Sau cum să obțineți notificarea administratorului pentru a afișa de câte ori au fost salvate opțiunile pluginului în acea zi, săptămână, lună etc.? Sunt sigur că vă puteți gândi și la mai multe exemple!
Eliminarea efectiv a notificărilor de administrator persistente
Este timpul să ne murdărim mâinile acum și să explorăm un cod mai aprofundat în timp ce ne îndreptăm atenția asupra respingerii anunțurilor de administrare persistente. Până acum, singura modalitate prin care am văzut cum să procedăm este să adăugăm
.este-fi închise
Clasa CSS în containerul nostru de anunțuri div div. Aceasta elimină notificarea de administrare pentru pagina curentă, dar nu este folosită în practică, deoarece reapare atunci când o pagină de administrator este reîncărcată.Deci, cum putem rezolva asta? Vom analiza câteva metode diferite de respingere a notificărilor de administrare persistente, inclusiv:
Înainte de a începe implementarea fiecăruia dintre aceste exemple, asigurați-vă că toate ADD_ACTION ()
apeluri Gwyer_Admin_Notices :: init ()
au fost comentate. Apoi adăugați un nou -admin-închise cu notices.php
fișier la admin_notices
dosar plugin. Deschideți acest fișier nou și adăugați o nouă definiție a clasei:
init ();
În admin_notices.php
, adaugă altul require_once ()
sunați pentru a importa noua noastră clasă:
requ_once (dirname (__FILE__) ./dismissible-admin-notices.php ');
Gwyer_Dismissible_Admin_Notices
clasa va conține tot codul referitor la respingerea notificărilor de administrare persistente.
Prima metodă pe care o vom examina este cum să afișăm o notificare de administrare doar o singură dată, astfel încât să nu reapară la încărcarea paginii. Ați putea folosi această metodă pentru a notifica un utilizator atunci când un plugin sau o temă tocmai a fost activată.
Hai să facem asta pentru pluginul Notificări pentru administratori. Vom începe prin înregistrarea unei opțiuni temporare WordPress după activarea pluginului, care este setată să expire aproape imediat.
În Gwyer_Dismissible_Admin_Notices
clasă, adăugați un apel la register_activation_hook ()
:
register_activation_hook (plugin_dir_path (__FILE__). 'admin-notices.php', array ($ this, 'set_admin_notice_transient'));
register_activation_hook ()
funcția vă cere să specificați calea către fișierul plugin principal, dar suntem în prezent în -admin-închise cu notices.php
. Deci nu putem folosi doar constanta magică PHP __FIŞIER__
am folosit anterior deoarece acest lucru indică întotdeauna fișierul curent PHP.
În schimb, noi trebuie să construim calea către fișierul principal de plugin plugin_dir_path (__FILE__). 'Admin-notices.php'
.
Când pluginul Notificări Administrator este activat, acesta va rula codul adăugat la a set_admin_notice_transient
clasă, pe care o vom defini în continuare.
funcția publică set_admin_notice_transient () set_transient ('admin-notice-transient', true, 5);
Această metodă creează un nou numit tranzitoriu 'Admin-Notă-tranzitorie'
cu o valoare de Adevărat
, și este setată să expire după cinci secunde.
Să facem uz de acest tranzitoriu prin afișarea condiționată a unei notificări de administrare dacă suntem pe pagina de administrare corectă și tranzitoria noastră există încă.
Adăugați un mesaj nou ADD_ACTION ()
Sună la init ()
.
add_action ('admin_notices', array (& $ this, 'display_admin_notice'));
Apoi, adăugați display_admin_notice
funcția de apel invers ca metodă nouă de clasă:
funcția publică display_admin_notice () $ current_user = wp_get_current_user (); $ whitelist_admin_pages = array ("pluginuri"); $ admin_page = get_current_screen (); dacă (in_array ($ admin_page-> base, $ whitelist_admin_pages) && get_transient ("admin-notice-transient"))Notificări Admin pluginul a fost activat. Mulțumesc pentru sprijin numele afisat; ?>!
Similar cu exemplele anterioare, anunțul de administrare se afișează numai dacă suntem pe o anumită pagină - în acest caz, pagina principală a pluginurilor pentru administratori. Dar avem o condiție suplimentară că
'Admin-Notă-tranzitorie'
trebuie să existe, de asemenea, anunțul de administrare nu va fi afișat.După ieșirea notificării de administrare, transientul este șters imediat, chiar dacă inițial l-am setat să expire după doar cinci secunde. Acest lucru asigură doar că nu va fi afișat din nou. Acest lucru s-ar putea întâmpla dacă un utilizator a încercat să actualizeze foarte repede pagina de pluginuri. Dar, prin ștergerea deliberată a celor tranzitorii, putem fi siguri că acest lucru nu va mai fi cazul.
Pentru a testa codul pe care tocmai l-am adăugat, mergeți pe pagina principală a pluginurilor și dezactivați, apoi reactivați pluginul Notificări pentru administratori.
Cheia este aici
'Admin-Notă-tranzitorie'
setare tranzitorie. Fără aceasta, notificarea administratorului va apărea de fiecare dată când pagina de pluginuri a fost încărcată (după ce plugin-ul a fost activat), ceea ce nu este ceea ce dorim.Conținutul anunțului de administrator
Următoarea este o notificare de administrator care va afișa un anumit număr de ori, după care nu va mai fi vizibilă. De asemenea, de data aceasta nu va fi limitată la nicio pagină de administrare specială.
Înainte de a începe, în
Gwyer_Dismissible_Admin_Notices
clasa, comenteze afarăregister_activation_hook ()
șiADD_ACTION ()
apeluri funcționale. Acum, să punem la punct o notificare de bază pe care o vom extinde în scurt timp.Adăugați un mesaj nou
ADD_ACTION ()
sunăinit ()
:add_action ('admin_notices', array (& $ this, 'display_admin_notice_counter'));Apoi, clătiți funcția de apel invers
display_admin_notice_counter ()
:funcția publică display_admin_notice_counter () ?>Anunț contrare.
Aceasta va afișa o notificare de administrare standard care va apărea pe fiecare pagină de administrare WordPress.
Să ne gândim la ce trebuie să facem. Notificarea noastră de administrare ar trebui să afișeze un număr setat de ori și, de fiecare dată când apare, un numărător intern este mărit cu unul. Odată ce limita de cont a fost atinsă, nota de administrare nu ar trebui să apară din nou.
Vrem ca anunțul de administrator să fie afișat pe orice pagină de administrare și astfel valoarea contorului trebuie să persiste între încărcările paginii. O modalitate bună de a face acest lucru este de a utiliza o opțiune de bază de date pentru a stoca valoarea contorului.
Adăugați o proprietate de clasă contra pentru a stoca valoarea limită a contului:
public $ counter_limit = 5;Aceasta va fi utilizată în scurt timp pentru a gestiona de câte ori apare mesajul de administrare. Interior
display_admin_notice_counter ()
, actualizați codul după cum urmează:funcția publică display_admin_notice_counter () $ counter = get_option ('admin_notice_counter', 1); ?>Această notificare de administrator a fost afișată timp (s).
Înainte de afișarea avertizării de administrare, preluăm opțiunea de contra și se returnează o valoare implicită dacă aceasta nu există încă. După anunțul de administrare, opțiunea de opțiune este mărită cu una și actualizată. Dacă nu există, va fi creată o nouă opțiune pentru a stoca valoarea curentă.
De asemenea, am actualizat clasa CSS pentru a fi o notificare de administrator de informații.
Încercați să vizitați pagini de administrare diferite și să vedeți creșterea numărului de contoare de fiecare dată.
++$ counter
cod este un exemplu de operator de pre-incrementare. Adăugă o valoare la$ counter
inainte de este salvat în baza de date. Dacă am folosit un operator post incrementare (adică.$ counter++
), atunci valoarea lui$ counter
ar fi stocate mai întâi și atunci a crescut, ceea ce nu ar funcționa.Să încorporăm
$ counter_limit
acum pentru a împiedica apariția prea multor notificări de administrator. Adăugați acest lucru ladisplay_admin_notice_counter ()
sub declarația pentru$ counter
:dacă ($ counter> $ this-> counter_limit) retur;Acum, odată ce notificarea de administrator a fost afișată de cinci ori, nu va fi vizibilă în paginile de administrare ulterioare. Ar putea fi frumos să afișați un mesaj ultima dată când apare mesajul de administrare, astfel încât utilizatorul să știe că nu va apărea din nou. Extindeți expresia condiționată și extrageți un mesaj suplimentar:
funcția publică display_admin_notice_counter () $ counter = get_option ('admin_notice_counter', 1); dacă ($ counter> $ this-> counter_limit) retur; altfel dacă ($ counter == $ this-> counter_limit) $ extra_message = "Este timpul să vă luați la revedere acum."; ?>Această notificare de administrator a fost afișată timp (s).
Cu toate acestea, nu veți vedea mesajul dacă ați depășit limita. Puteți rezolva temporar acest lucru prin mărirea
$ counter_limit
variabil.În scopuri de testare, ar fi mai bine să puteți reinițializa limita contorului. Dacă știi cum să editezi baza de date, poți intra și schimba direct opțiunea, dar acest lucru poate fi obositor de făcut de mai multe ori. Deci, să punem în aplicare propriul element de resetare.
În primul rând, schimbați
$ counter_limit
înapoi la5
și adăugați o proprietate nouă de clasă:public $ counter_reset = false;Apoi, înăuntru
init ()
a inlocuiadd_action ('admin_notices', array (& $ this, 'display_admin_notice_counter'));cu
$ This-> reset_counter_check ();Funcția de resetare ar trebui să afișeze nota noastră de administrare contra sau să șterge
admin_notice_counter
opțiunea de bază de date și afișați o avertizare de avertizare admin.funcția publică reset_counter_check () if (! $ this-> counter_reset) add_action ('admin_notices', array (& $ this, 'display_admin_notice_counter')); altceva delete_option ('admin_notice_counter'); ?>Contorul pentru nota de administrare a fost resetat! Schimbare
$ counter_reset
lafals
pentru a porni din nou contul de notificare de administrare.Pentru a utiliza noua funcție de resetare, schimbați pur și simplu
$ counter_reset
laAdevărat
și încărcați orice pagină de administrare.Apoi schimbați-l înapoi
fals
din nou.Notă: această metodă ar putea fi utilizată cu ușurință pentru a afișa o notificare de administrare o singură dată, așa cum am făcut în exemplul anterior, dar este puțin mai complicat de configurat. Depinde într-adevăr de cerințele dvs..
Dacă tot ce ai nevoie vreodată este o notificare de administrare pentru o singură utilizare, atunci metoda anterioară va răspunde, probabil, mai bine nevoilor tale și este mai rapidă de implementat. Metoda contorului este însă mai flexibilă și, odată instalată, este la fel de ușor de utilizat în proiectele proprii.
Concluzie
Am acoperit o mulțime de teren în partea a treia a acestei serii tutorial. Am văzut cum să controlați când apar anunțuri de administrator, decât să apară mereu de îndată ce pagina de administrare a terminat încărcarea. Acest lucru este util în multe feluri, dar exemplul nostru a arătat cum să afișați o notificare de administrare personalizată după ce opțiunile pluginului au fost salvate.
Apoi, am trecut la două exemple distincte de respingere a anunțurilor de administrare persistente. Acest lucru vă oferă o mulțime de flexibilitate în modul în care prezentați notificările de administrator utilizatorului. În următoarea și ultima parte a acestei serii de tutorial, vom examina mai multe modalități de a elimina notificările persistente de admin.
Și, pentru un pic de distracție, vom crea propriile tipuri de notificări personalizate de administrare și vom adăuga decorațiuni pentru pictograme.