Fermer

juillet 26, 2018

Notifications WordPress Made Easy


À propos de l'auteur

Jakub est un développeur WordPress et propriétaire de underDEV . Il est l'auteur de nombreux plugins gratuits et premium, y compris Advanced Cron Manager et Notification. Dort …
En savoir plus sur Jakub

Avez-vous cherché un moyen de créer un système de notification lors de l'utilisation de WordPress? Rencontrez le plugin 'Notification', une solution tout-en-un pour tout système de notification WordPress personnalisé.

WordPress n'offre aucun système de notification. Tout ce que vous pouvez utiliser est la fonction wp_mail () mais tous les paramètres doivent être codés en dur, ou bien vous devez créer un écran de paramètres séparé pour permettre à l'utilisateur de modifier les options. Il faut de nombreuses heures pour écrire un système fiable, configurable et facile à utiliser. Mais plus maintenant. Je vais vous montrer comment créer votre propre système de notification en quelques minutes avec le plugin de notification gratuit. Par notification, j'entends tout type de notification . La plupart du temps, ce sera un email, mais avec le plugin que nous utiliserons, vous pourrez également envoyer des webhooks et d'autres types de notifications.

En créant un projet pour un de mes clients, j'ai rencontré ce problème. décrit. L'exigence était d'avoir plusieurs alertes email personnalisées avec un contenu configurable. Au lieu de coder en dur chaque alerte, j'ai décidé de construire un système. Je voulais que ce soit très flexible, et l'objectif était de pouvoir coder de nouveaux scénarios aussi rapidement que possible.

Le code que j'ai écrit était le début d'un grand voyage de développement. Il s'est avéré que le système que j'avais créé était suffisamment flexible pour fonctionner comme un paquet séparé. C'est ainsi que le plugin Notification est né.

Supposons que vous vouliez envoyer un courriel à propos d'un profil utilisateur mis à jour par l'un des membres de votre site Web. WordPress ne fournit pas cette fonctionnalité, mais avec le plugin Notification, vous pouvez créer un tel email en quelques minutes. Ou supposons que vous souhaitiez synchroniser vos produits WooCommerce avec un logiciel tiers en envoyant un webhook à une URL distincte chaque fois qu'un nouveau produit est publié.

Leçons apprises lors du développement de plugins WordPress

Un bon développement et un bon support pour les plugins permettent d'augmenter le nombre de téléchargements. Plus de téléchargements signifient plus d'argent et une meilleure réputation. Apprenez comment développer des produits de qualité avec sept règles d'or. Lire la suite →

Dans cet article, vous apprendrez comment intégrer le plugin dans votre propre application et comment créer un système de notification WordPress avancé plus rapidement et plus facilement que jamais.

Dans cet article, nous 'll couvrir:

  1. comment installer le plugin,
  2. l'idée derrière le plugin et son architecture,
  3. créer un scénario personnalisé pour les notifications,
  4. créer l'action (étape 1 du processus), [19659013] création du déclencheur (étape 2 du processus),
  5. création du type de notification personnalisé,
  6. activation du mode étiquette blanche et regroupement du plug-in dans votre package.

Installation du plugin

Pour créer vos propres scénarios, vous aurez besoin du plugin Notification. Il suffit de l'installer à partir du dépôt WordPress.org dans votre tableau de bord WordPress, ou de le télécharger depuis le dépôt GitHub .

Grand aperçu

Plus loin dans l'article, vous apprendrez à cacher ce plugin

L'idée du plugin

Avant d'entrer dans votre éditeur de code, vous aurez besoin de savoir à quoi ressemble l'architecture du plugin. Le plugin contient de nombreux composants, mais son noyau est vraiment quelques classes abstraites .

Les composants principaux sont:

  • La notification
    Cela peut être un email, un webhook, une notification push ou SMS
  • Le déclencheur
    C'est ce qui envoie la notification. C'est effectivement l'action WordPress.
  • La balise de fusion
    Ceci est une petite partie du contenu dynamique, comme {post_title} .

Pour vous donner une meilleure idée de comment Tout joue ensemble, vous pouvez regarder cette courte vidéo:

Le cœur du plugin Notification est vraiment une API. Tous les déclencheurs par défaut, comme Post publié et Utilisateur enregistré sont des choses construites au-dessus de cette API.

Parce que le plugin a été créé pour les développeurs, ajouter vos propres déclencheurs est très facile. Tout ce qui est requis est une action WordPress qui est juste une ligne de code et une déclaration de classe

Scénario personnalisé

Concevons un scénario simple. Nous ajouterons une zone de texte et un bouton au bas de chaque article, ce qui permettra de signaler les bogues dans l'article. Ensuite, nous déclencherons la notification lors de la soumission du formulaire.

Ce scénario a été couvert dans un autre article, " Soumission de formulaires sans rechargement de la page: Implémentation AJAX dans WordPress ".

Pour plus de simplicité , faisons-en une forme statique, mais il n'y a aucun problème à placer l'action dans un gestionnaire AJAX, au lieu de la fonction wp_mail () .

Créons le formulaire

] add_filter ('the_content', 'report_a_bug_form');
function report_a_bug_form ($ content) {

    // Afficher le formulaire uniquement sur les publications.
    if (! is_single ()) {
        retourner $ content;
    }

    // Ajoute le formulaire au bas du contenu.
    $ content. = '




»;

    retourner $ content;

}

S'il vous plaît noter que de nombreux composants sont manquants, comme WordPress nonces, la gestion des erreurs et l'affichage du résultat de l'action, mais ceux-ci ne sont pas l'objet de cet article. Pour mieux comprendre comment gérer ces actions, veuillez lire l'article mentionné ci-dessus

Préparation de l'action

Pour déclencher la notification, nous n'aurons besoin que d'une seule action. Cela ne doit pas nécessairement être une action personnalisée comme celle ci-dessous. Vous pouvez utiliser l'une des actions déjà enregistrées dans le core WordPress ou un autre plugin.

Le gestionnaire de formulaire et l'action

 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']);

    // Redirige vers l'article.
    wp_safe_redirect (get_permalink ($ _POST ['post_id']));
    Sortie;

}

Vous pouvez en savoir plus sur l'utilisation du fichier admin-post.php dans le WordPress Codex .

C'est tout ce dont nous avons besoin pour créer une notification personnalisée et configurable . Créons le déclencheur.

Enregistrement du déclencheur personnalisé

Le déclencheur est une simple classe qui étend le déclencheur abstrait. La classe abstraite fait tout le travail pour vous. Il place le déclencheur dans la liste et gère les notifications et les balises de fusion.

Commençons par la déclaration du déclencheur

Classe de déclencheur minimal

 class ReportBug extends  BracketSpace  Notification  Abstracts  Trigger {

    fonction publique __construct () {

        // Ajoute un slug et le titre.
        parent :: __ construct (
            'signaler un bug',
            __ ('Rapport de bogue envoyé', 'reportabug')
        )

        // Accroche-toi à l'action.
        $ this-> add_action ('report_a_bug', 10, 2);

    }

    fonction publique merge_tags () {}

}

Tout ce que vous avez à faire est d'appeler le constructeur parent et de passer le slug trigger et le joli nom

Ensuite, nous pouvons nous accrocher à notre action personnalisée. La méthode add_action est très similaire à la fonction add_action () ; Ainsi, le deuxième paramètre est la priorité, et le dernier est le nombre d'arguments. Seul le paramètre callback est manquant parce que la classe abstraite le fait pour nous.

Ayant la classe, nous pouvons l'enregistrer comme notre nouveau trigger

 register_trigger (new ReportBug ());

Ceci est maintenant un déclencheur pleinement opérationnel. Vous pouvez le sélectionner dans la liste lors de la composition d'une nouvelle notification.


( Grand aperçu )

Bien que le déclencheur fonctionne et que nous puissions déjà envoyer la notification que nous voulons, ce n'est pas très utile. Nous n'avons aucun moyen d'indiquer au destinataire quel message a un bogue et quel est le message.

Il serait alors temps d'enregistrer des balises de fusion et de configurer le contexte de déclenchement avec les paramètres d'action que nous avons. : l'ID poste et le message.

Pour ce faire, nous pouvons ajouter une autre méthode à la classe de déclencheur. C'est le rappel d'action, où nous pouvons attraper les arguments d'action.

Arguments d'action de manipulation

 action publique de fonction ($ post_ID, $ message) {

    // Si le message est vide, n'envoyez aucune notification.
    if (vide ($ message)) {
        return false;
    }

    // Définit les propriétés du trigger.
    $ this-> post = get_post ($ post_ID);
    $ this-> message = $ message;

}

Notez la déclaration return false; . Si vous renvoyez false à partir de cette méthode, le déclencheur sera arrêté et aucune notification ne sera envoyée. Dans notre cas, nous ne souhaitons pas qu'une notification soit soumise avec un message vide. Dans le monde réel, vous voudriez valider cela avant que le formulaire ne soit envoyé.

Ensuite, nous venons de définir les propriétés de la classe de déclenchement, l'objet de message complet et le message. Maintenant, nous pouvons les utiliser pour ajouter des balises de fusion à notre déclencheur. Nous pouvons simplement remplir le contenu de la méthode merge_tags que nous avons déclarée plus tôt.

Définition des balises de fusion

 public function merge_tags () {

    $ this-> add_merge_tag (nouveau  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 (nouveau  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 (nouveau  BracketSpace  Notification  Defaults  MergeTag  HtmlTag (array (
        'slug' => 'message',
        'name' => __ ('Message', 'reportabug'),
        'resolver' => function ($ trigger) {
            return nl2br ($ trigger-> message);
        },
    )));

    $ this-> add_merge_tag (nouveau  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;
        },
    )));

}

Cela ajoutera quatre balises de fusion, toutes prêtes à être utilisées pendant la composition d'une notification

La balise de fusion est une instance d'une classe spéciale. Vous pouvez voir qu'il existe plusieurs types de ces balises et nous les utilisons en fonction de la valeur renvoyée par le résolveur. Vous pouvez voir toutes les balises de fusion dans le dépôt GitHub .

Toutes les balises de fusion sont ajoutées via la méthode add_merge_tag et elles nécessitent le tableau de configuration avec trois clés:

  • slug
    La valeur statique qui sera utilisée dans la notification (ie {post_url} ).
  • nom
    L'étiquette traduite pour l'étiquette de fusion.
  • resolver
    Fonction qui remplace la balise de fusion par la valeur réelle

Le résolveur ne doit pas être la fermeture, comme dans notre cas, mais l'utiliser est pratique. Vous pouvez passer un nom de fonction en tant que chaîne ou tableau s'il s'agit d'une méthode d'une autre classe

Dans la fonction de résolution, un seul argument est disponible: l'instance de la classe de déclencheur. Ainsi, nous pouvons accéder aux propriétés que nous venons de définir dans la méthode action et renvoyer la valeur dont nous avons besoin.

Et c'est tout! Les balises de fusion ne sont pas disponibles à utiliser avec notre déclencheur, et nous pouvons configurer autant de notifications du rapport de bogue que nous voulons.


( Grand aperçu )

Création du type de notification personnalisé

Le plugin Notification offre non seulement des déclencheurs personnalisés, mais également des types de notification personnalisés. Le plugin est livré avec deux types, email et webhook, mais il possède une API simple pour enregistrer vos propres notifications.

Cela fonctionne de manière très similaire au trigger personnalisé: vous avez également besoin d'une classe et d'un appel à une fonction simple pour l'enregistrer.

Je montre seulement un exemple; la mise en œuvre variera en fonction du système que vous souhaitez intégrer. Vous devrez peut-être inclure une bibliothèque tierce et appeler son API ou opérer dans le système de fichiers de WordPress, mais le guide ci-dessous vous permettra de configurer le processus de base.

Commençons par une déclaration de classe:

 class CustomNotification extends  BracketSpace  Notification  Résumés  Notification {

    fonction publique __construct () {

        // Ajoute un slug et le titre.
        parent :: __ construct (
            'custom_notification',
            __ ('Notification personnalisée', 'textdomain')
        )

    }

    fonction publique form_fields () {}

    fonction publique send ( BracketSpace  Notification  Interfaces  Triggerable $ trigger) {}

}

Dans le constructeur, vous devez appeler le constructeur de classe du parent et lui transmettre le slug et le joli nom de la notification.

La méthode form_fields permet de créer un formulaire de configuration pour les notifications. (Par exemple, la notification par email aurait un sujet, un corps, etc.)

La méthode envoi est appelée par le déclencheur, et c'est là que vous pouvez appeler l'API tierce que vous souhaitez

Ensuite, vous devez l'enregistrer avec la fonction register_notification .

 register_trigger (new CustomNotification ());

Le formulaire de notification

Il peut y avoir un cas dans lequel vous avez une notification sans champs de configuration. C'est bien, mais vous voudrez probablement donner à l'administrateur WordPress un moyen de configurer le contenu de la notification avec les balises de fusion.

C'est pourquoi nous allons enregistrer deux champs, le titre et le message, dans le form_fields méthode. Il ressemble à ceci:

 public function form_fields () {

    $ this-> add_form_field (nouveau  BracketSpace  Notification  Defaults  Field  InputField (array (
        'label' => __ ('Titre', 'textdomain'),
        'name' => 'titre',
        'resolvable' => true,
        'description' => __ ('Vous pouvez utiliser les balises de fusion', 'textdomain'),
    )));

    $ this-> add_form_field (nouveau  BracketSpace  Notification  Defaults  Field  TextareaField (array (
        'label' => __ ('Message', 'textdomain'),
        'name' => 'message',
        'resolvable' => true,
        'description' => __ ('Vous pouvez utiliser les balises de fusion', 'textdomain'),
    )));

}

Comme vous pouvez le voir, chaque champ est un objet et est enregistré avec la méthode add_form_field . Pour la liste de tous les types de champs disponibles, veuillez visiter le dépôt GitHub .

Chaque champ a l'étiquette traduisible, le nom unique et un ensemble d'autres propriétés. Vous pouvez définir si le champ doit être résolu avec les balises de fusion avec la clé resolvable . Cela signifie que lorsque quelqu'un utilise la balise de fusion {post_title} dans ce champ, elle sera modifiée avec le titre réel de la publication. Vous pouvez également fournir le champ description pour une meilleure expérience utilisateur

A ce stade, votre type de notification personnalisé peut être utilisé dans l'interface du plugin avec tout type de déclencheur disponible.


() Grand aperçu )

Envoi de la notification personnalisée

Pour que cela fonctionne vraiment, nous devons utiliser la méthode send dans notre déclaration de classe de notification. C'est l'endroit où vous pouvez écrire un appel API ou utiliser le système de fichiers de WordPress ou n'importe quelle API WordPress, et faire ce que vous voulez avec les données de notification.

Voici comment y accéder:

 public function send (  BracketSpace  Notification  Interfaces  Triggerable $ trigger) {

    $ title = $ this-> données ['title'];
    $ message = $ this-> data ['message'];

    // @todo Écrivez l'intégration ici.

}

À ce stade, tous les champs sont résolus avec les balises de fusion, ce qui signifie que les variables sont prêtes à être expédiées.

Cela vous donne des possibilités infinies pour intégrer WordPress à n'importe quel service, que ce soit votre fournisseur SMS local, une autre installation de WordPress ou une API externe avec laquelle vous souhaitez communiquer

Etiquetage blanc et regroupement du plugin

Il n'est pas idéal de créer une dépendance d'un plugin qui peut être facilement désactivé et désinstallé. Si vous construisez un système qui nécessite vraiment que le plugin Notification soit toujours disponible, vous pouvez regrouper le plugin dans votre propre code.

Si vous avez déjà utilisé le plugin Advanced Custom Fields, vous connaissez probablement le bundling. procédure. Copiez simplement les fichiers du plugin dans votre plugin ou votre thème, et appelez le plugin manuellement.

Le plugin Notification fonctionne de manière très similaire, mais l'appel du plugin est beaucoup plus simple qu'avec Advanced Custom Fields.

nécessite un fichier pour le faire fonctionner.

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

Le plugin trouvera son emplacement et les URLs.

Mais le regroupement du plugin pourrait ne pas suffire. Peut-être devez-vous complètement cacher que vous utilisez cette solution tierce. C'est pourquoi le plugin Notification est livré avec un mode étiquette blanche, que vous pouvez activer à tout moment.

Il est également activé en tant qu'appel unique à une fonction:

 notification_whitelabel (array (
    // Crochet de la page d'administration sous lequel les notifications seront affichées.
    'page_hook' => 'edit.php? post_type = page',
    // Si la page des extensions d'affichage.
    'extensions' => false,
    // Si la page des paramètres d'affichage.
    'settings' => false,
    // Limite les paramètres d'accès aux ID utilisateur.
    // Cela ne fonctionne que si les paramètres sont activés.
    'settings_access' => tableau (123, 456),
));

Par défaut, l'appel de cette fonction masquera tous les déclencheurs par défaut.

L'utilisation des deux techniques, l'étiquetage et le regroupement en blanc, masquera complètement toute référence à l'origine du plugin et la solution se comportera comme une partie intégrante de votre système.

Conclusion

Le plugin Notification est une solution tout-en-un pour tout système de notification WordPress personnalisé. C'est extrêmement facile à configurer, et cela fonctionne hors de la boîte. Tous les déclencheurs enregistrés fonctionneront avec n'importe quel type de notification, et si vous avez des exigences avancées, vous pouvez gagner du temps en utilisant une extension existante .

Si vous souhaitez en savoir plus détails et techniques avancées, allez sur le site de documentation

Je suis toujours ouvert aux nouvelles idées, donc si vous en avez, vous pouvez me contacter ici dans les commentaires, via le ] Problèmes GitHub ou Twitter .

Téléchargez le plugin à partir du référentiel, et faites un essai!

 Smashing Editorial (ra, yk , il)






Source link

Revenir vers le haut