WordPress-Benachrichtigungen leicht gemacht

Veröffentlicht: 2022-03-10
Kurze Zusammenfassung ↬ Haben Sie nach einer Möglichkeit gesucht, ein Benachrichtigungssystem bei der Verwendung von WordPress zu erstellen? Lernen Sie das „Notification“-Plugin kennen, eine All-in-One-Lösung für jedes benutzerdefinierte WordPress-Benachrichtigungssystem.

WordPress bietet keinerlei Benachrichtigungssystem. Alles, was Sie verwenden können, ist die Funktion wp_mail() , aber alle Einstellungen müssen fest codiert sein, oder Sie müssen einen separaten Einstellungsbildschirm erstellen, damit der Benutzer die Optionen optimieren kann. Es dauert viele Stunden, ein System zu schreiben, das zuverlässig, konfigurierbar und einfach zu bedienen ist. Aber nicht mehr. Ich zeige Ihnen, wie Sie mit dem kostenlosen Benachrichtigungs-Plugin innerhalb weniger Minuten Ihr eigenes Benachrichtigungssystem erstellen. Mit Benachrichtigung meine ich jede Art von Benachrichtigung . Meistens wird es eine E-Mail sein, aber mit dem Plugin, das wir verwenden, können Sie auch Webhooks und andere Arten von Benachrichtigungen senden.

Beim Erstellen eines Projekts für einen meiner Kunden bin ich auf dieses beschriebene Problem gestoßen. Die Anforderung bestand darin, mehrere benutzerdefinierte E-Mail-Benachrichtigungen mit konfigurierbaren Inhalten zu haben. Anstatt jede einzelne Warnung fest zu codieren, beschloss ich, ein System zu erstellen. Ich wollte, dass es sehr flexibel ist, und das Ziel war, neue Szenarien so schnell wie möglich programmieren zu können.

Der Code, den ich geschrieben habe, war der Beginn einer großartigen Entwicklungsreise. Es stellte sich heraus, dass das von mir erstellte System flexibel genug war, um als separates Paket zu funktionieren. So wurde das Benachrichtigungs-Plugin geboren.

Angenommen, Sie möchten eine E-Mail über ein Benutzerprofil senden, das von einem Mitglied Ihrer Website aktualisiert wird. WordPress bietet diese Funktionalität nicht, aber mit dem Benachrichtigungs-Plugin können Sie eine solche E-Mail in wenigen Minuten erstellen. Oder nehmen Sie an, Sie möchten Ihre WooCommerce-Produkte mit Software von Drittanbietern synchronisieren, indem Sie jedes Mal, wenn ein neues Produkt veröffentlicht wird, einen Webhook an eine separate URL senden. Auch das geht ganz einfach mit dem Plugin.

Lektionen, die bei der Entwicklung von WordPress-Plugins gelernt wurden

Gute Plugin-Entwicklung und Support führen zu mehr Downloads. Mehr Downloads bedeuten mehr Geld und einen besseren Ruf. Erfahren Sie, wie Sie mit sieben goldenen Regeln hochwertige Produkte entwickeln. Lesen Sie einen verwandten Artikel →

In diesem Artikel erfahren Sie, wie Sie das Plugin in Ihre eigene Anwendung integrieren und schneller und einfacher als je zuvor ein fortschrittliches WordPress-Benachrichtigungssystem erstellen.

In diesem Artikel behandeln wir:

  1. wie installiere ich das Plugin,
  2. die Idee hinter dem Plugin und seiner Architektur,
  3. Erstellen eines benutzerdefinierten Szenarios für Benachrichtigungen,
  4. Erstellen der Aktion (Schritt 1 des Prozesses),
  5. Erstellen des Triggers (Schritt 2 des Prozesses),
  6. Erstellen des benutzerdefinierten Benachrichtigungstyps,
  7. wie Sie den White-Label-Modus aktivieren und das Plugin in Ihrem Paket bündeln.
Mehr nach dem Sprung! Lesen Sie unten weiter ↓

Installation des Plugins

Um Ihre eigenen Szenarien zu erstellen, benötigen Sie das Notification-Plugin. Installieren Sie es einfach aus dem WordPress.org-Repository in Ihrem WordPress-Dashboard oder laden Sie es aus dem GitHub-Repository herunter.

Große Vorschau

Später in diesem Artikel erfahren Sie, wie Sie dieses Plugin vor Ihren Clients verbergen und es als integrierten Bestandteil Ihres Plugins oder Designs verwenden können.

Die Idee des Plugins

Bevor Sie in Ihren Code-Editor gehen, müssen Sie wissen, wie die Architektur des Plugins aussieht. Das Plugin enthält viele verschiedene Komponenten, aber sein Kern sind wirklich ein paar abstrakte Klassen.

Die Hauptkomponenten sind:

  • Die Benachrichtigung
    Dies kann eine E-Mail, ein Webhook, eine Push-Benachrichtigung oder eine SMS sein.
  • Der Auslöser
    Dies ist, was die Benachrichtigung sendet. Es ist praktisch die WordPress-Aktion.
  • Das Merge-Tag
    Dies ist ein kleiner Teil des dynamischen Inhalts, wie {post_title} .

Um Ihnen eine bessere Vorstellung davon zu geben, wie alles zusammenspielt, können Sie sich dieses kurze Video ansehen:

Der Kern des Benachrichtigungs-Plugins ist wirklich nur eine API. Alle Standardauslöser, wie Post veröffentlicht und Benutzer registriert, sind Dinge, die auf dieser API aufbauen.

Da das Plugin für Entwickler erstellt wurde, ist das Hinzufügen eigener Trigger sehr einfach. Alles, was erforderlich ist, ist eine WordPress-Aktion, die nur aus einer einzigen Codezeile und einer Klassendeklaration besteht.

Benutzerdefiniertes Szenario

Lassen Sie uns ein einfaches Szenario entwerfen. Wir fügen am Ende jedes Beitrags einen Textbereich und eine Schaltfläche hinzu, damit Fehler im Artikel gemeldet werden können. Dann lösen wir die Benachrichtigung beim Absenden des Formulars aus.

Dieses Szenario wurde in einem anderen Artikel behandelt: „Formulare übermitteln, ohne die Seite neu zu laden: AJAX-Implementierung in WordPress“.

Machen wir es der Einfachheit halber zu einem statischen Formular, aber es ist kein Problem, die Aktion in einen AJAX-Handler statt in die Funktion wp_mail() zu packen.

Lassen Sie uns das Formular erstellen.

Die Form

 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; }

Bitte beachten Sie, dass viele Komponenten fehlen, wie z. B. WordPress-Nonces, Fehlerbehandlung und Anzeige des Aktionsergebnisses, die jedoch nicht Gegenstand dieses Artikels sind. Um besser zu verstehen, wie Sie mit diesen Aktionen umgehen, lesen Sie bitte den oben genannten Artikel.

Vorbereitung der Aktion

Um die Benachrichtigung auszulösen, benötigen wir nur eine einzige Aktion. Dabei muss es sich nicht um eine benutzerdefinierte Aktion wie die unten stehende handeln. Sie können jede der bereits im WordPress-Kern oder einem anderen Plugin registrierten Aktionen verwenden.

Der Formular-Handler und die Aktion

 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; }

Sie können mehr darüber lesen, wie Sie die Datei admin-post.php im WordPress Codex verwenden.

Das ist alles, was wir brauchen, um eine benutzerdefinierte, konfigurierbare Benachrichtigung zu erstellen. Lassen Sie uns den Auslöser erstellen.

Registrieren des benutzerdefinierten Triggers

Der Trigger ist nur eine einfache Klasse, die den abstrakten Trigger erweitert. Die abstrakte Klasse erledigt die ganze Arbeit für Sie. Es fügt den Trigger in die Liste ein und verarbeitet die Benachrichtigungen und Merge-Tags.

Beginnen wir mit der Trigger-Deklaration.

Minimale Triggerdefinition

 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() {} }

Alles, was Sie tun müssen, ist, den übergeordneten Konstruktor aufzurufen und den Trigger-Slug und den schönen Namen zu übergeben.

Dann können wir uns in unsere benutzerdefinierte Aktion einklinken. Die add_action Methode ist der add_action() Funktion sehr ähnlich; Der zweite Parameter ist also die Priorität und der letzte die Anzahl der Argumente. Nur der Callback-Parameter fehlt, weil das die abstrakte Klasse für uns erledigt.

Nachdem wir die Klasse haben, können wir sie als unseren neuen Trigger registrieren.

 register_trigger( new ReportBug() );

Dies ist jetzt ein voll funktionsfähiger Auslöser. Sie können es beim Verfassen einer neuen Benachrichtigung aus der Liste auswählen.

(Große Vorschau)

Obwohl der Auslöser funktioniert und wir die gewünschte Benachrichtigung bereits senden können, ist er nicht sehr nützlich. Wir haben keine Möglichkeit, dem Empfänger zu zeigen, welcher Beitrag einen Fehler enthält und was die Nachricht ist.

Dies wäre also der richtige Zeitpunkt, um einige Merge-Tags zu registrieren und den Trigger-Kontext mit den Aktionsparametern einzurichten, die wir haben: die Beitrags-ID und die Nachricht.

Dazu können wir der Trigger-Klasse eine weitere Methode hinzufügen. Dies ist der Aktionsrückruf, bei dem wir die Aktionsargumente abfangen können.

Umgang mit Aktionsargumenten

 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; }

Beachten Sie die return false; Aussage. Wenn Sie von dieser Methode false zurückgeben, wird der Trigger gestoppt und es wird keine Benachrichtigung gesendet. In unserem Fall möchten wir nicht, dass eine Benachrichtigung mit einer leeren Nachricht gesendet wird. In der realen Welt möchten Sie dies überprüfen, bevor das Formular gesendet wird.

Dann setzen wir einfach die Eigenschaften der Trigger-Klasse, das vollständige Post-Objekt und die Nachricht. Jetzt können wir sie verwenden, um unserem Trigger einige Merge-Tags hinzuzufügen. Wir können einfach den Inhalt der merge_tags Methode füllen, die wir zuvor deklariert haben.

Merge-Tags definieren

 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; }, ) ) ); }

Dadurch werden vier Merge-Tags hinzugefügt, die alle einsatzbereit sind, während eine Benachrichtigung erstellt wird.

Das Merge-Tag ist eine Instanz einer speziellen Klasse. Sie können sehen, dass es viele Arten dieser Tags gibt, und wir verwenden sie abhängig von dem Wert, der vom Resolver zurückgegeben wird. Sie können alle Merge-Tags im GitHub-Repository sehen.

Alle Zusammenführungs-Tags werden über die add_merge_tag Methode hinzugefügt und erfordern das Konfigurationsarray mit drei Schlüsseln:

  • Schnecke
    Der statische Wert, der in der Benachrichtigung verwendet wird (z. B. {post_url} ).
  • Name
    Das übersetzte Label für das Merge-Tag.
  • Resolver
    Die Funktion, die das Merge-Tag durch den tatsächlichen Wert ersetzt.

Der Resolver muss nicht wie in unserem Fall der Abschluss sein, aber seine Verwendung ist bequem. Sie können einen Funktionsnamen als Zeichenfolge oder als Array übergeben, wenn es sich um eine Methode in einer anderen Klasse handelt.

In der Resolver-Funktion ist nur ein Argument verfügbar: die Trigger-Klasseninstanz. Somit können wir auf die Eigenschaften zugreifen, die wir gerade in der action festgelegt haben, und den benötigten Wert zurückgeben.

Und das ist alles! Die Zusammenführungs-Tags können nicht mit unserem Trigger verwendet werden, und wir können so viele Benachrichtigungen über den Fehlerbericht einrichten, wie wir möchten.

(Große Vorschau)

Erstellen des benutzerdefinierten Benachrichtigungstyps

Das Benachrichtigungs-Plugin bietet nicht nur benutzerdefinierte Auslöser, sondern auch benutzerdefinierte Benachrichtigungstypen. Das Plugin wird mit zwei Typen geliefert, E-Mail und Webhook, aber es hat eine einfache API, um Ihre eigenen Benachrichtigungen zu registrieren.

Es funktioniert sehr ähnlich wie der benutzerdefinierte Trigger: Sie benötigen auch eine Klasse und einen Aufruf einer einfachen Funktion, um ihn zu registrieren.

Ich zeige nur ein Beispiel; Die Implementierung variiert je nach System, das Sie integrieren möchten. Möglicherweise müssen Sie eine Bibliothek eines Drittanbieters einbinden und ihre API aufrufen oder im Dateisystem von WordPress arbeiten, aber die folgende Anleitung wird Sie mit dem grundlegenden Prozess vertraut machen.

Beginnen wir mit einer Klassendeklaration:

 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 ) {} }

Im Konstruktor müssen Sie den Klassenkonstruktor der übergeordneten Klasse aufrufen und den Slug und den netten Namen der Benachrichtigung übergeben.

Die Methode form_fields wird verwendet, um ein Konfigurationsformular für Benachrichtigungen zu erstellen. (Zum Beispiel hätte die E-Mail-Benachrichtigung einen Betreff, Text usw.)

Die send -Methode wird vom Trigger aufgerufen, und hier können Sie die Drittanbieter-API aufrufen, die Sie integrieren möchten.

Als nächstes müssen Sie es mit der Funktion register_notification .

 register_trigger( new CustomNotification() );

Das Benachrichtigungsformular

Es kann vorkommen, dass Sie eine Benachrichtigung ohne Konfigurationsfelder erhalten. Das ist in Ordnung, aber höchstwahrscheinlich möchten Sie dem WordPress-Administrator eine Möglichkeit geben, den Benachrichtigungsinhalt mit den Merge-Tags zu konfigurieren.

Aus diesem Grund registrieren wir zwei Felder, den Titel und die Nachricht, in der form_fields Methode. Es sieht aus wie das:

 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' ), ) ) ); }

Wie Sie sehen können, ist jedes Feld ein Objekt und wird mit der Methode add_form_field registriert. Eine Liste aller verfügbaren Feldtypen finden Sie im GitHub-Repository.

Jedes Feld hat die übersetzbare Bezeichnung, den eindeutigen Namen und eine Reihe anderer Eigenschaften. Mit dem resolvable Schlüssel können Sie festlegen, ob das Feld mit den Merge-Tags aufgelöst werden soll. Das bedeutet, wenn jemand das Merge-Tag {post_title} in diesem Feld verwendet, wird es durch den eigentlichen Titel des Beitrags ersetzt. Sie können auch das description für eine bessere Benutzererfahrung bereitstellen.

An diesem Punkt kann Ihr benutzerdefinierter Benachrichtigungstyp in der Benutzeroberfläche des Plugins mit jedem verfügbaren Triggertyp verwendet werden.

(Große Vorschau)

Senden der benutzerdefinierten Benachrichtigung

Damit es wirklich funktioniert, müssen wir die send -Methode in unserer Benachrichtigungsklassendeklaration verwenden. Dies ist der Ort, an dem Sie einen API-Aufruf schreiben oder das Dateisystem von WordPress oder eine beliebige WordPress-API verwenden und mit den Benachrichtigungsdaten machen können, was Sie wollen.

So können Sie darauf zugreifen:

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

An diesem Punkt werden alle Felder mit den Merge-Tags aufgelöst, was bedeutet, dass die Variablen versandfertig sind.

Das gibt Ihnen endlose Möglichkeiten, WordPress mit jedem Dienst zu integrieren, sei es Ihr lokaler SMS-Anbieter, eine andere WordPress-Installation oder eine externe API, mit der Sie kommunizieren möchten.

White Labeling und Bündelung des Plugins

Es ist nicht ideal, eine Abhängigkeit eines Plugins zu erstellen, das einfach deaktiviert und deinstalliert werden kann. Wenn Sie ein System bauen, das wirklich erfordert, dass das Benachrichtigungs-Plugin immer verfügbar ist, können Sie das Plugin in Ihrem eigenen Code bündeln.

Wenn Sie das Advanced Custom Fields-Plugin bereits verwendet haben, sind Sie wahrscheinlich mit dem Bündelungsverfahren vertraut. Kopieren Sie einfach die Dateien des Plugins in Ihr Plugin oder Design und rufen Sie das Plugin manuell auf.

Das Benachrichtigungs-Plugin funktioniert sehr ähnlich, aber das Aufrufen des Plugins ist viel einfacher als mit Advanced Custom Fields.

Kopieren Sie einfach die Dateien des Plugins und benötigen Sie eine Datei, damit es funktioniert.

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

Das Plugin findet seinen Standort und die URLs heraus.

Das Bündeln des Plugins reicht jedoch möglicherweise nicht aus. Vielleicht müssen Sie vollständig verbergen, dass Sie diese Drittanbieterlösung verwenden. Aus diesem Grund verfügt das Benachrichtigungs-Plugin über einen White-Label-Modus, den Sie jederzeit aktivieren können.

Es wird auch als einzelner Aufruf einer Funktion aktiviert:

 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 ), ) );

Standardmäßig werden beim Aufrufen dieser Funktion alle Standardauslöser ausgeblendet.

Durch die Verwendung beider Techniken, White Labeling und Bündelung, werden alle Verweise auf den Ursprung des Plugins vollständig ausgeblendet, und die Lösung verhält sich wie ein vollständig integrierter Teil Ihres Systems.

Fazit

Das Notification-Plugin ist eine All-in-One-Lösung für jedes benutzerdefinierte WordPress-Benachrichtigungssystem. Es ist extrem einfach zu konfigurieren und funktioniert sofort. Alle registrierten Auslöser funktionieren mit jedem Benachrichtigungstyp, und wenn Sie erweiterte Anforderungen haben, können Sie etwas Zeit sparen, indem Sie eine vorhandene Erweiterung verwenden.

Wenn Sie mehr Details und fortgeschrittene Techniken erfahren möchten, besuchen Sie die Dokumentations-Website.

Ich bin immer offen für neue Ideen, wenn Sie also welche haben, können Sie mich hier in den Kommentaren, über die GitHub-Probleme oder auf Twitter kontaktieren.

Laden Sie das Plugin aus dem Repository herunter und probieren Sie es aus!