Perspectivele WordPress Notificări Admin Partea 3

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.

Controlarea când apar notificări de administrator

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 sa Adevă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:

  • Observație de administrare unică care dispare după o vizualizare.
  • Un contor de note de admin care dispare după un anumit număr de vizualizări.
  • Notă adezivă administratorului care rămâne respinsă la reîmprospătarea paginii.
  • Eliminarea acțiunii personalizate (notificarea administratorului a fost eliminată după ce o anumită acțiune a fost finalizată).

Î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.

Observație de administrator unică

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 () și ADD_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 la display_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 la 5 și adăugați o proprietate nouă de clasă:

public $ counter_reset = false;

Apoi, înăuntru init () a inlocui

add_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 la fals 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 la Adevă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.

Cod