Notificări WordPress simplificate

Publicat: 2022-03-10
Rezumat rapid ↬ Ați căutat o modalitate de a crea un sistem de notificare când utilizați WordPress? Faceți cunoștință cu pluginul „Notificare”, o soluție all-in-one pentru orice sistem personalizat de notificare WordPress.

WordPress nu oferă niciun fel de sistem de notificare. Tot ce puteți utiliza este funcția wp_mail() , dar toate setările trebuie să fie codificate, altfel trebuie să creați un ecran de setări separat pentru a permite utilizatorului să modifice opțiunile. Este nevoie de multe ore pentru a scrie un sistem care este fiabil, configurabil și ușor de utilizat. Dar nu mai. Vă voi arăta cum să vă creați propriul sistem de notificare în câteva minute cu pluginul gratuit de notificare. Prin notificare mă refer la orice fel de notificare . De cele mai multe ori, va fi e-mail, dar cu pluginul pe care îl vom folosi, puteți trimite și webhook-uri și alte tipuri de notificări.

În timp ce cream un proiect pentru unul dintre clienții mei, am întâlnit această problemă pe care am descris-o. Cerința a fost să existe mai multe alerte personalizate prin e-mail cu conținut configurabil. În loc să codific fiecare alertă, am decis să construiesc un sistem. Mi-am dorit să fie foarte flexibil, iar scopul a fost să pot codifica noi scenarii cât mai repede posibil.

Codul pe care l-am scris a fost începutul unei mari călătorii de dezvoltare. S-a dovedit că sistemul pe care l-am creat a fost suficient de flexibil încât să poată funcționa ca un pachet separat. Așa s-a născut pluginul Notification.

Să presupunem că doriți să trimiteți un e-mail despre actualizarea unui profil de utilizator de către unul dintre membrii site-ului dvs. WordPress nu oferă această funcționalitate, dar cu pluginul Notificare, puteți crea un astfel de e-mail în câteva minute. Sau să presupunem că doriți să sincronizați produsele WooCommerce cu software terță parte, trimițând un webhook la o adresă URL separată de fiecare dată când este publicat un produs nou. Este ușor de făcut și cu pluginul.

Lecții învățate în timpul dezvoltării pluginurilor WordPress

Dezvoltarea și suportul bun de plugin duc la mai multe descărcări. Mai multe descărcări înseamnă mai mulți bani și o reputație mai bună. Aflați cum puteți dezvolta produse de bună calitate cu șapte reguli de aur. Citiți un articol înrudit →

În acest articol, veți învăța cum să integrați pluginul în propria aplicație și cum să creați un sistem avansat de notificare WordPress mai rapid și ușor ca niciodată.

În acest articol, vom acoperi:

  1. cum se instalează pluginul,
  2. ideea din spatele pluginului și arhitectura acestuia,
  3. crearea unui scenariu personalizat pentru notificări,
  4. crearea acțiunii (pasul 1 al procesului),
  5. crearea declanșatorului (pasul 2 al procesului),
  6. crearea tipului de notificare personalizat,
  7. cum să activați modul etichetă albă și să includeți pluginul în pachetul dvs.
Mai multe după săritură! Continuați să citiți mai jos ↓

Instalarea pluginului

Pentru a vă crea propriile scenarii, veți avea nevoie de pluginul Notificare. Doar instalați-l din depozitul WordPress.org în tabloul de bord WordPress sau descărcați-l din depozitul GitHub.

Previzualizare mare

Mai târziu în articol, veți învăța cum să ascundeți acest plugin de clienții dvs. și să îl faceți să funcționeze ca parte integrată a pluginului sau a temei dvs.

Ideea Pluginului

Înainte de a intra în editorul de cod, va trebui să știți cum arată arhitectura pluginului. Pluginul conține multe componente diferite, dar nucleul său este într-adevăr câteva clase abstracte.

Componentele principale sunt:

  • Notificarea
    Acesta poate fi un e-mail, un webhook, o notificare push sau un SMS.
  • Trăgaciul
    Acesta este ceea ce trimite notificarea. Este efectiv acțiunea WordPress.
  • Eticheta de îmbinare
    Aceasta este o mică parte a conținutului dinamic, cum ar fi {post_title} .

Pentru a vă face o idee mai bună despre cum se joacă totul împreună, puteți viziona acest scurt videoclip:

Nucleul pluginului Notification este de fapt doar un API. Toate declanșatoarele implicite, cum ar fi Postul publicat și Utilizatorul înregistrat , sunt lucruri construite pe baza acelui API.

Deoarece pluginul a fost creat pentru dezvoltatori, adăugarea propriilor declanșatoare este foarte ușoară. Tot ceea ce este necesar este o acțiune WordPress, care este doar o singură linie de cod și o declarație de clasă.

Scenariu personalizat

Să creăm un scenariu simplu. Vom adăuga o zonă de text și un buton în partea de jos a fiecărei postări, permițând raportarea erorilor din articol. Apoi, vom declanșa notificarea la trimiterea formularului.

Acest scenariu a fost tratat într-un alt articol, „Trimiterea formularelor fără reîncărcarea paginii: implementarea AJAX în WordPress”.

Pentru simplitate, să o facem într-o formă statică, dar nu există nicio problemă să puneți acțiunea într-un handler AJAX, în loc de în funcția wp_mail() .

Să creăm formularul.

Forma

 add_filter( 'the_content', 'report_a_bug_form' ); function report_a_bug_form( $content ) { // Display the form only on posts. if ( ! is_single() ) { return $content; } // Add the form to the bottom of the content. $content .= '<form action="' . admin_url( 'admin-post.php' ) . '" method="POST"> <input type="hidden" name="post_id" value="' . get_ID() . '"> <input type="hidden" name="action" value="report_a_bug"> <textarea name="message" placeholder="' . __( 'Describe what\'s wrong...', 'reportabug' ) . '"></textarea> <button>' . __( 'Report a bug', 'reportabug' ) . '</button> </div>'; return $content; }

Vă rugăm să rețineți că lipsesc multe componente, cum ar fi nonces WordPress, gestionarea erorilor și afișarea rezultatului acțiunii, dar acestea nu fac obiectul acestui articol. Pentru a înțelege mai bine cum să gestionați aceste acțiuni, vă rugăm să citiți articolul menționat mai sus.

Pregătirea Acțiunii

Pentru a declanșa notificarea, vom avea nevoie doar de o singură acțiune. Aceasta nu trebuie să fie o acțiune personalizată precum cea de mai jos. Puteți utiliza oricare dintre acțiunile deja înregistrate în WordPress core sau alt plugin.

Manipulatorul de formulare și acțiunea

 add_action( 'admin_post_report_a_bug', 'report_a_bug_handler' ); add_action( 'admin_post_nopriv_report_a_bug', 'report_a_bug_handler' ); function report_a_bug_handler() { do_action( 'report_a_bug', $_POST['post_id'], $_POST['message'] ); // Redirect back to the article. wp_safe_redirect( get_permalink( $_POST['post_id'] ) ); exit; }

Puteți citi mai multe despre cum să utilizați fișierul admin-post.php în Codexul WordPress.

Acesta este tot ce avem nevoie pentru a crea o notificare personalizată, configurabilă. Să creăm declanșatorul.

Înregistrarea declanșatorului personalizat

Declanșatorul este doar o clasă simplă care extinde declanșatorul abstract. Clasa abstractă face toată treaba pentru tine. Acesta pune declanșatorul în listă și se ocupă de notificări și de etichete de îmbinare.

Să începem cu declarația declanșatorului.

Definiție minimă de declanșare

 class ReportBug extends \BracketSpace\Notification\Abstracts\Trigger { public function __construct() { // Add slug and the title. parent::__construct( 'reportabug', __( 'Bug report sent', 'reportabug' ) ); // Hook to the action. $this->add_action( 'report_a_bug', 10, 2 ); } public function merge_tags() {} }

Tot ce trebuie să faceți este să apelați constructorul părinte și să transmiteți slug-ul de declanșare și numele frumos.

Apoi, ne putem conecta la acțiunea noastră personalizată. Metoda add_action este foarte asemănătoare cu funcția add_action() ; deci, al doilea parametru este prioritatea, iar ultimul este numărul de argumente. Lipsește doar parametrul callback, deoarece clasa abstractă face asta pentru noi.

Având clasa, o putem înregistra ca noul nostru declanșator.

 register_trigger( new ReportBug() );

Acesta este acum un declanșator complet funcțional. O puteți selecta din listă atunci când compuneți o nouă notificare.

(Previzualizare mare)

Deși declanșatorul funcționează și deja putem trimite notificarea pe care o dorim, nu este foarte util. Nu avem nicio modalitate de a arăta destinatarului care postare are o eroare și care este mesajul.

Acesta ar fi momentul, deci, să înregistrăm niște etichete de îmbinare și să setăm contextul de declanșare cu parametrii de acțiune pe care îi avem: ID-ul postării și mesajul.

Pentru a face acest lucru, putem adăuga o altă metodă la clasa de declanșare. Acesta este apelul invers al acțiunii, unde putem captura argumentele acțiunii.

Gestionarea argumentelor de acțiune

 public function action( $post_ID, $message ) { // If the message is empty, don't send any notifications. if ( empty( $message ) ) { return false; } // Set the trigger properties. $this->post = get_post( $post_ID ); $this->message = $message; }

Notați return false; afirmație. Dacă returnați false din această metodă, declanșatorul va fi oprit și nu va fi trimisă nicio notificare. În cazul nostru, nu dorim ca o notificare să fie trimisă cu un mesaj gol. În lumea reală, ați dori să validați acest lucru înainte ca formularul să fie trimis.

Apoi, doar setăm proprietățile clasei de declanșare, obiectul post complet și mesajul. Acum, le putem folosi pentru a adăuga câteva etichete de îmbinare la declanșatorul nostru. Putem completa doar conținutul metodei merge_tags pe care am declarat-o mai devreme.

Definirea etichetelor de îmbinare

 public function merge_tags() { $this->add_merge_tag( new \BracketSpace\Notification\Defaults\MergeTag\UrlTag( array( 'slug' => 'post_url', 'name' => __( 'Post URL', 'reportabug' ), 'resolver' => function( $trigger ) { return get_permalink( $trigger->post->ID ); }, ) ) ); $this->add_merge_tag( new \BracketSpace\Notification\Defaults\MergeTag\StringTag( array( 'slug' => 'post_title', 'name' => __( 'Post title', 'reportabug' ), 'resolver' => function( $trigger ) { return $trigger->post->post_title; }, ) ) ); $this->add_merge_tag( new \BracketSpace\Notification\Defaults\MergeTag\HtmlTag( array( 'slug' => 'message', 'name' => __( 'Message', 'reportabug' ), 'resolver' => function( $trigger ) { return nl2br( $trigger->message ); }, ) ) ); $this->add_merge_tag( new \BracketSpace\Notification\Defaults\MergeTag\EmailTag( array( 'slug' => 'post_author_email', 'name' => __( 'Post author email', 'reportabug' ), 'resolver' => function( $trigger ) { $author = get_userdata( $trigger->post->post_author ); return $author->user_email; }, ) ) ); }

Aceasta va adăuga patru etichete de îmbinare, toate gata de utilizare în timp ce se compune o notificare.

Eticheta merge este o instanță a unei clase speciale. Puteți vedea că există multe tipuri de aceste etichete și le folosim în funcție de valoarea returnată de la soluție. Puteți vedea toate etichetele de îmbinare în depozitul GitHub.

Toate etichetele de îmbinare sunt adăugate prin metoda add_merge_tag și necesită matricea de configurare cu trei chei:

  • melc
    Valoarea statică care va fi utilizată în notificare (adică {post_url} ).
  • Nume
    Eticheta tradusă pentru eticheta de îmbinare.
  • rezolutor
    Funcția care înlocuiește eticheta de îmbinare cu valoarea reală.

Resolverul nu trebuie să fie închiderea, ca în cazul nostru, dar folosirea lui este convenabilă. Puteți transmite un nume de funcție ca șir sau matrice dacă aceasta este o metodă dintr-o altă clasă.

În funcția de rezoluție, este disponibil un singur argument: instanța clasei de declanșare. Astfel, putem accesa proprietățile pe care tocmai le-am setat în metoda de action și returnăm valoarea de care avem nevoie.

Și asta e tot! Etichetele de îmbinare nu sunt disponibile pentru a fi utilizate cu declanșatorul nostru și putem configura câte notificări despre raportul de eroare dorim.

(Previzualizare mare)

Crearea tipului de notificare personalizat

Pluginul Notificare oferă nu numai declanșatoare personalizate, ci și tipuri de notificări personalizate. Pluginul este livrat cu două tipuri, e-mail și webhook, dar are un API simplu pentru a vă înregistra propriile notificări.

Funcționează foarte asemănător cu declanșatorul personalizat: aveți nevoie, de asemenea, de o clasă și de un apel la o funcție simplă pentru a o înregistra.

Vă arăt doar un exemplu; implementarea va varia în funcție de sistemul pe care doriți să îl integrați. Poate fi necesar să includeți o bibliotecă terță parte și să apelați API-ul acesteia sau să operați în sistemul de fișiere WordPress, dar ghidul de mai jos vă va configura procesul de bază.

Să începem cu o declarație de clasă:

 class CustomNotification extends \BracketSpace\Notification\Abstracts\Notification { public function __construct() { // Add slug and the title. parent::__construct( 'custom_notification', __( 'Custom Notification', 'textdomain' ) ); } public function form_fields() {} public function send( \BracketSpace\Notification\Interfaces\Triggerable $trigger ) {} }

În constructor, trebuie să apelați constructorul clasei părintelui și să transmiteți slug-ul și numele frumos al notificării.

Metoda form_fields este folosită pentru a crea un formular de configurare pentru notificări. (De exemplu, notificarea prin e-mail ar avea un subiect, un corp etc.)

Metoda de send este apelată de declanșator și este locul unde puteți apela API-ul terță parte cu care doriți să vă integrați.

Apoi, trebuie să-l înregistrați cu funcția register_notification .

 register_trigger( new CustomNotification() );

Formularul de notificare

Este posibil să existe un caz în care aveți o notificare fără câmpuri de configurare. Este în regulă, dar cel mai probabil veți dori să oferiți administratorului WordPress o modalitate de a configura conținutul notificărilor cu etichetele de îmbinare.

De aceea vom înregistra două câmpuri, titlul și mesajul, în metoda form_fields . Arata cam asa:

 public function form_fields() { $this->add_form_field( new \BracketSpace\Notification\Defaults\Field\InputField( array( 'label' => __( 'Title', 'textdomain' ), 'name' => 'title', 'resolvable' => true, 'description' => __( 'You can use merge tags', 'textdomain' ), ) ) ); $this->add_form_field( new \BracketSpace\Notification\Defaults\Field\TextareaField( array( 'label' => __( 'Message', 'textdomain' ), 'name' => 'message', 'resolvable' => true, 'description' => __( 'You can use merge tags', 'textdomain' ), ) ) ); }

După cum puteți vedea, fiecare câmp este un obiect și este înregistrat cu metoda add_form_field . Pentru lista tuturor tipurilor de câmpuri disponibile, vă rugăm să vizitați depozitul GitHub.

Fiecare câmp are eticheta traducabilă, numele unic și un set de alte proprietăți. Puteți defini dacă câmpul trebuie rezolvat cu etichetele de îmbinare cu cheia resolvable . Aceasta înseamnă că, atunci când cineva folosește eticheta de îmbinare {post_title} în acest câmp, aceasta va fi schimbată cu titlul real al postării. De asemenea, puteți furniza câmpul de description pentru o experiență mai bună a utilizatorului.

În acest moment, tipul de notificare personalizat poate fi utilizat în interfața pluginului cu orice tip de declanșare disponibil.

(Previzualizare mare)

Trimiterea notificării personalizate

Pentru ca acesta să funcționeze cu adevărat, trebuie să folosim metoda send în declarația noastră de clasă de notificare. Acesta este locul în care puteți scrie un apel API sau puteți utiliza sistemul de fișiere WordPress sau orice API WordPress și puteți face orice doriți cu datele de notificare.

Iată cum îl puteți accesa:

 public function send( \BracketSpace\Notification\Interfaces\Triggerable $trigger ) { $title = $this->data['title']; $message = $this->data['message']; // @todo Write the integration here. }

În acest moment, toate câmpurile sunt rezolvate cu etichetele de îmbinare, ceea ce înseamnă că variabilele sunt gata pentru a fi expediate.

Acest lucru vă oferă posibilități infinite de a integra WordPress cu orice serviciu, fie că este vorba de furnizorul local de SMS-uri, o altă instalare WordPress sau orice API extern cu care doriți să comunicați.

Etichetarea albă și gruparea pluginului

Nu este ideal să creați o dependență a unui plugin care poate fi dezactivat și dezinstalat cu ușurință. Dacă construiți un sistem care necesită într-adevăr ca pluginul de notificare să fie întotdeauna disponibil, puteți include pluginul în propriul cod.

Dacă ați mai folosit pluginul Advanced Custom Fields, atunci probabil că sunteți familiarizat cu procedura de grupare. Doar copiați fișierele pluginului în pluginul sau tema dvs. și invocați pluginul manual.

Pluginul de notificare funcționează foarte similar, dar invocarea pluginului este mult mai simplă decât în ​​cazul Câmpurilor personalizate avansate.

Doar copiați fișierele pluginului și aveți nevoie de un fișier pentru ca acesta să funcționeze.

 require_once( 'path/to/plugin/notification/load.php' );

Pluginul își va afla locația și adresele URL.

Dar gruparea pluginului ar putea să nu fie suficientă. Poate că trebuie să ascundeți complet faptul că utilizați această soluție terță parte. Acesta este motivul pentru care pluginul Notification vine cu un mod etichetă albă, pe care îl puteți activa în orice moment.

De asemenea, este activat ca un singur apel la o funcție:

 notification_whitelabel( array( // Admin page hook under which the Notifications will be displayed. 'page_hook' => 'edit.php?post_type=page', // If display extensions page. 'extensions' => false, // If display settings page. 'settings' => false, // Limit settings access to user IDs. // This works only if settings are enabled. 'settings_access' => array( 123, 456 ), ) );

În mod implicit, apelarea acestei funcții va ascunde toate declanșatoarele implicite.

Folosind ambele tehnici, etichetarea albă și gruparea, va ascunde complet orice referință la originea pluginului, iar soluția se va comporta ca o parte complet integrată a sistemului dumneavoastră.

Concluzie

Pluginul de notificare este o soluție all-in-one pentru orice sistem personalizat de notificare WordPress. Este extrem de ușor de configurat și funcționează imediat. Toate declanșatoarele care sunt înregistrate vor funcționa cu orice tip de notificare și, dacă aveți cerințe avansate, puteți economisi timp folosind o extensie existentă.

Dacă doriți să aflați mai multe detalii și tehnici avansate, accesați site-ul web de documentație.

Sunt mereu deschis la idei noi, așa că, dacă aveți, puteți să mă contactați aici în comentarii, prin problemele GitHub sau pe Twitter.

Descărcați pluginul din depozit și încercați-l!