Création d'un système de messagerie WordPress personnalisé, Partie 4

Dans cette série, nous avons examiné comment mettre en œuvre un système nous permettant de définir par programme des messages personnalisés à afficher sur une page d'administration donnée dans le back-end WordPress..

Si vous avez suivi la série jusqu'à présent, alors vous savez:

  • Nous avons jeté les bases du plugin utilisé tout au long de cette série et l'avons même développé un peu plus loin..
  • Nous avons défini et utilisé un crochet personnalisé que nous pouvons utiliser pour afficher les messages de paramètres..
  • Nous avons ajouté la prise en charge des messages de réussite, d'avertissement et d'erreur pouvant être affichés en haut d'une page de paramètres donnée..

Comme mentionné dans le tutoriel précédent:

Mais si vous avez lu l'un de mes tutoriels précédents, vous savez que je ne suis pas fan des codes dupliqués. Je ne suis pas non plus partisan d'avoir une classe à faire beaucoup de choses. Et, malheureusement, c'est exactement ce que nous faisons ici.

Et nous allons en parler dans ce dernier tutoriel. À la fin, nous aurons une solution refactorisée complète utilisant certains principes intermédiaires orientés objet, tels que l'héritage. Nous aurons également quelques méthodes que nous pouvons utiliser par programme ou qui peuvent être enregistrées avec le système de hook WordPress.

Commencer à la fin

À ce stade, vous devez savoir exactement ce dont vous avez besoin dans votre environnement de développement local. Plus précisément, vous devriez avoir les éléments suivants:

  • PHP 5.6.25 et MySQL 5.6.28
  • Apache ou Nginx
  • WordPress 4.6.1
  • Votre IDE ou éditeur préféré

Je recommande également la version la plus récente du code source, car elle vous permettra de passer en revue tous les changements que nous allons effectuer. Si vous ne l'avez pas, c'est bon, mais je vous recommande de relire les tutoriels précédents avant d'aller plus loin..

Dans le tutoriel précédent

Comme vous vous en souviendrez peut-être (ou d'après le commentaire ci-dessus), le didacticiel précédent nous a laissé un seul cours qui faisait trop de travail.

Une façon de le savoir est que si vous décriviez ce que faisait la classe, vous ne pourriez pas donner une seule réponse. Au lieu de cela, vous devez dire qu'il était responsable de la gestion des messages de réussite, des messages d'avertissement, des messages d'erreur et de leur rendu indépendamment.

Et bien que vous puissiez prétendre qu'il s'agissait de "gérer des messages personnalisés", vous ne décririez pas nécessairement à quel point la classe était détaillée. C'est ce que nous espérons résoudre dans ce tutoriel.

Dans le dernier tutoriel

Plus précisément, nous allons envisager les actions suivantes:

  • supprimer l'ancienne classe de messagerie des paramètres
  • ajout d'une nouvelle classe de message de paramètres plus génériques
  • ajout d'une classe de messagerie avec laquelle communiquer
  • introduction de méthodes que nous pouvons utiliser indépendamment de WordPress
  • rationaliser le rendu des messages par WordPress

Nous avons du pain sur la planche, alors allons-y et commençons avec tout ce qui précède.

Refactoring notre travail

Quand il s’agit de refactoriser notre travail, il est utile de savoir exactement ce que nous voulons faire. Dans notre cas, nous reconnaissons que nous avons beaucoup de code en double qui pourrait être condensé. 

De plus, nous gérons trois types de messages différents de la même manière, à l’exception de leur rendu. Et dans ce cas, il s'agit d'un problème d'attributs de classe HTML.

Ainsi, nous pouvons généraliser ce code pour se concentrer sur un type, et nous pouvons consolider un grand nombre de méthodes d’ajout de messages de réussite ou de récupération de messages d’erreur en généralisant une méthode permettant de reconnaître ledit message. type

En fin de compte, nous le ferons. Mais d'abord, un peu de ménage.

1. Supprimer les anciens paramètres Messenger

Dans les tutoriels précédents, nous avons travaillé avec une classe appelée Settings_Messenger. Jusqu’à présent, il a atteint son objectif, mais nous allons le refactoriser dans la suite du reste de ce didacticiel..

En ce qui concerne ce type de refactoring, il est facile de vouloir simplement supprimer la classe et recommencer. Il y a des moments où cela est approprié, mais ce n'est pas l'un d'entre eux. Au lieu de cela, nous allons prendre ce cours et refactoriser ce qui est déjà là.

Tout cela pour dire, ne supprimez pas le fichier et commencez avec un nouveau. Suivez plutôt ce que nous faisons tout au long de ce didacticiel..

2. Une nouvelle classe de message de réglage

Tout d’abord, introduisons un Paramètres_Message classe. Cela représente tout type de message de paramètres avec lequel nous allons écrire. Autrement dit, il gérera les messages de réussite, les messages d'erreur et les messages d'avertissement.

Pour ce faire, nous allons définir la classe, introduire une seule propriété, puis l'instancier dans le constructeur. Découvrez ce code, et je vais expliquer un peu plus ci-dessous:

messages = array ('success' => array (), 'error' => array (), 'warning' => array (),); 

Notez que nous avons créé un attribut privé, $ messages. Lorsque la classe est instanciée, nous créons un tableau multidimensionnel. Chaque index, identifié soit par Succès, Erreur, ou Attention, se réfère à son propre tableau dans lequel nous allons stocker les messages correspondants.

Ensuite, nous devons pouvoir ajouter un message, obtenir un message et obtenir tous les messages. Je vais discuter de chacun d'eux plus en détail momentanément.

Ajout de messages

Voyons d’abord comment nous ajoutons des messages:

messages [$ type])) return;  array_push ($ this-> messages [$ type], $ message); 

Ce message prend d'abord la chaîne entrante et nettoie les données. Ensuite, il vérifie s'il existe déjà dans les messages de réussite. Si c'est le cas, cela revient simplement. Après tout, nous ne voulons pas de messages en double.

Sinon, il ajoute le message à la collection..

Obtenir des messages

La récupération des messages se présente sous deux formes:

  1. rendre des messages individuels par type
  2. afficher les messages dans l'affichage de la page d'administration (avec la désinfection HTML, etc.)

Rappelez-vous, il y a des moments où nous ne souhaitons afficher que des messages d'avertissement. D'autres fois, nous voudrons peut-être afficher tous les messages. Puisqu'il y a deux façons de le faire, on peut en tirer parti et en tirer parti dans une autre fonction..

Cela vous semble déroutant? Accrochez-vous à moi et je vais tout expliquer. La première partie sur laquelle nous allons nous concentrer est comment rendre les messages en type (pensez succès, erreur ou avertissement). Voici le code pour le faire (et cela devrait vous paraître familier):

messages [$ type])) return;  $ html = "
"; $ html. = '
    '; foreach ($ this-> messages [$ type] en tant que $ message) $ html. = "
  • $ message
  • "; $ html. = '
'; $ html. = '
'; $ allowed_html = array ('div' => array ('class' => array (),), 'ul' => array (), 'li' => array (),); echo wp_kses ($ html, $ allowed_html);

Notez ici que nous utilisons une grande partie du même code que celui du tutoriel précédent. Cependant, nous avons généralisé pour qu'il regarde la nouvelle $ type et l'applique dynamiquement à la balise. 

Cela nous permet d’avoir une seule fonction pour rendre nos messages. Ce n'est pas tout, cependant. Qu'en est-il des temps que nous voulons obtenir tout messages? Cela pourrait être de rendre sur une page ou de les saisir par programme pour un autre traitement.

Pour ce faire, nous pouvons introduire une autre fonction:

des messages comme $ type => $ message) $ this-> get_messages ($ type); 

Ce message devrait être assez facile à comprendre. Il passe tout simplement en revue tous les messages de notre collection et appelle le get_messages fonction nous avons décrit ci-dessus.

Il les restitue tous tous ensemble (nous verrons une utilisation momentanée de ceux-ci dans notre implémentation d'un crochet personnalisé). Si vous souhaitez les utiliser à d'autres fins, vous pouvez ajouter le résultat dans une chaîne et le renvoyer à l'appelant, ou effectuer une autre fonction de programmation..

Ceci n'est qu'une implémentation.

3. Les paramètres Messenger

Cela le fait pour le réel Paramètres_Message classe. Mais comment communiquons-nous avec cela? Bien sûr, nous pouvons en parler directement, mais s'il y a une classe intermédiaire, nous avons un certain contrôle sur ce qui nous est retourné sans ajouter plus de responsabilité à la Paramètres_Message classe, droit?

Entrer le Settings_Messenger. Cette classe est responsable de nous permet de lire et d’écrire des messages de paramètres. Je pense que l'on pourrait argumenter que vous pourriez diviser cela en deux classes par sa responsabilité car il lit et écrit à la fois mais, comme un messager qui envoie et reçoit, c'est le but de ce cours..

La configuration initiale de la classe est simple.

  • Le constructeur crée une instance du Paramètres_Message classe que nous pouvons utiliser pour envoyer et recevoir des messages.
  • Il associe une méthode à notre coutume tutsplus_settings_messages crochet nous avons défini dans un tutoriel précédent.

Jetez un coup d'œil aux deux premières méthodes:

message = new Settings_Message ();  public function init () add_action ('tutsplus_settings_messages', array ($ this, 'get_all_messages')); 

Rappelez-vous que, plus haut dans ce tutoriel, nous avons le crochet défini dans notre vue qui peut être trouvé dans settings.php. Par souci d'exhaustivité, il est répertorié ici:

Nous n'allons pas réellement afficher les options sur cette page. Au lieu de cela, nous allons utiliser cette page pour montrer comment se connecter à notre messagerie personnalisée..

Notez, cependant, que ce crochet particulier profite de la get_all_messages méthode, nous allons examiner dans un instant. Il n'est pas nécessaire d'utiliser cette méthode. Au lieu de cela, il pourrait être utilisé pour simplement afficher les messages de réussite ou toute autre méthode que vous souhaitez utiliser.

Ajout de messages

La création de fonctions pour ajouter des messages est simple car ces fonctions nécessitent un type et le message lui-même. Se souvenir du Paramètres_Message prend soin de désinfecter les informations afin que nous puissions simplement passer les messages entrants.

Voir ci-dessous les messages de succès, d'avertissement et d'erreur que nous ajoutons:

add_message ('success', $ message);  fonction publique add_warning_message ($ message) $ this-> add_message ('warning', $ message);  fonction publique add_error_message ($ message) $ this-> add_message ('error', $ message); 

C'est facile, n'est-ce pas?

Obtenir des messages

La récupération des messages n’est pas très différente, sauf que nous devons simplement fournir le type de messages que nous voulons récupérer:

get_messages ('success');  fonction publique get_warning_messages () echo $ this-> get_messages ('warning');  fonction publique get_error_messages () echo $ this-> get_messages ('error'); 

Fait et fait, à droite?

Mais avez-vous attrapé que?

Notez que les messages ci-dessus font tous référence à deux autres méthodes que nous n'avons pas encore abordées. Ce sont des messages privés qui nous aident à simplifier les appels ci-dessus. 

Découvrez les méthodes privées suivantes, chargées à la fois d’ajouter et de récupérer des messages directement à partir du Paramètres_Message instance maintenue sur l'objet messenger:

message-> add_message ($ type, $ message);  fonction privée get_messages ($ type) return $ this-> message-> get_messages ($ type); 

Et cette termine le nouveau Settings_Messenger classe. Tout cela est beaucoup plus simple, n'est-ce pas?

Démarrer le plugin

Cela pose cependant la question suivante: comment lancer le plug-in maintenant que tous ces changements ont eu lieu?

Voir la fonction entière ci-dessous:

init (); $ messenger = new Settings_Messenger (); $ messenger-> init (); $ messenger-> add_success_message ('Beau tireur, c'était un sur un million!'); $ messenger-> add_warning_message ('N'entrez pas doucement dans cette bonne nuit.'); $ messenger-> add_error_message ('Danger Will Robinson.'); 

Et c'est tout.

Quelques points à noter:

  • Si vous n'appelez pas init sur le Settings_Messenger, alors vous n'avez pas à vous soucier d'afficher des messages sur votre page de paramètres.
  • Le code ajoute messages au Settings_Messenger, mais il ne récupère pas réellement parce que je un m en utilisant la méthode init.
  • Si vous souhaitez récupérer les messages, vous pouvez utiliser les méthodes décrites ci-dessus..

C'est tout pour le refactoring. Ça ne marchera pas exactement out of the box car il reste encore du code nécessaire pour charger tous les fichiers PHP nécessaires au bon fonctionnement du plugin; Cependant, le code ci-dessus se concentre sur la refactorisation qui est le but de tout ce tutoriel..

Conclusion

Pour une version de travail complète de ce tutoriel et un code source complet Est-ce que Si vous travaillez hors de la boîte, veuillez télécharger le code source joint à cet article dans la barre latérale droite..

J'espère qu'au fil de ce document, vous aurez découvert de nouvelles compétences et de nouvelles façons d'aborder le développement de WordPress. En parcourant la série, nous avons beaucoup couvert:

  • menus personnalisés
  • introduction de pages d'administration
  • les différents types de message
  • définition et utilisation de crochets personnalisés
  • et refactoring du code orienté objet

Comme d'habitude, je suis également toujours heureux de répondre aux questions via les commentaires. Vous pouvez également consulter mon blog et me suivre sur Twitter. Je parle habituellement de développement de logiciels dans WordPress et de sujets tangentiels. Si vous êtes intéressé par davantage de développement WordPress, n'oubliez pas de consulter mes précédentes séries et tutoriels, ainsi que les autres documents WordPress que nous avons ici sur Envato Tuts+.

Ressources

  • Création de pages d'administration personnalisées avec WordPress
  • L'API Paramètres WordPress
  • Comment se lancer dans WordPress
  • add_action
  • do_action
  • wp_kses
  • sanitize_text_field