Programmation orientée objet dans WordPress Construire le plugin II

Dans le précédent article de cette série, nous avons finalement commencé à préparer les bases du plugin que nous allons écrire.

Plus précisément, nous avons examiné l'organisation des fichiers, les composants et les détails de ce que le plugin va faire. Nous avons également stubé le code que nous allons remplir dans ce tutoriel.

En plus de faire en sorte que notre plug-in fasse réellement quelque chose, nous allons parler d'un certain nombre de principes, techniques et idées orientés objet différents à mesure que nous travaillons à travers le plug-in.. 

Notez que dans ce tutoriel, nous allons faire très peu de documentation. Nous avons couvert les détails à ce sujet dans l'article précédent; Cependant, nous parlerons plus à ce sujet dans l'article qui suit celui-ci.

Comme pour le reste des articles de cette série, assurez-vous de revenir sur tout ce que nous avons couvert jusqu'à présent dans la série, car tout ce que nous faisons s'appuie sur les sujets précédents..

Pour référence, nous avons couvert:

  1. Une introduction
  2. Des classes
  3. Les types
  4. Structures de contrôle: instructions conditionnelles
  5. Structures de contrôle: boucles
  6. Fonctions et attributs
  7. Portée
  8. Construire le plugin I

Cela dit, reprenons là où nous nous sommes arrêtés.

Où allons-nous commencer?

Quel que soit le paradigme utilisé, l’écriture de logiciels n’est pas linéaire. C'est-à-dire que nous n'écrivons pas nécessairement au point de départ du programme. Souvent, mais pas toujours, cela pourrait être l’une des dernières parties que nous avons raison.

Cela dit, nous allons commencer à travailler sur chaque fichier qui constitue le plug-in d'une manière qui a du sens lorsque nous travaillons à travers le plug-in. J'entends par là que, au fil de cet article, les choses peuvent sembler éparpillées au début, mais devraient devenir un peu plus claires, nous, en examinant chaque fichier..

Le chargeur

La première classe que nous allons terminer se situe dans includes / class-single-post-meta-manager-loader.php. Si vous vous souvenez de l'article précédent, cette classe est responsable de la coordination des actions et des filtres entre le plugin principal et la classe d'administration..

En un sens, il fournit un wrapper autour des API de hooks natives de WordPress; Cependant, cela nous permet de découpler (et donc d'imposer une séparation des préoccupations) nos classes afin que chacune puisse se spécialiser dans un but spécifique..

Tout d’abord, regardons la classe:

actions = array (); $ this-> filters = array ();  fonction publique add_action ($ hook, $ composant, $ callback) $ this-> actions = $ this-> add ($ this-> actions, $ hook, $ composant, $ callback);  fonction publique add_filter ($ hook, $ composant, $ callback) $ this-> filters = $ this-> add ($ this-> filtres, $ hook, $ composant, $ callback);  fonction privée add ($ hooks, $ hook, $ composant, $ callback) $ hooks [] = array ('crochet' => $ hook, 'composant' => composant $, 'rappel' => $ rappel); retourne $ hooks;  fonction publique run () foreach ($ this-> filtre en tant que $ hook) add_filter ($ hook ['hook'], tableau ($ hook ['composant'], $ hook ['callback'])));  foreach ($ this-> actions en tant que $ hook) add_action ($ hook ['hook']], array ($ hook ['composant'], $ hook ['callback'])); 

À ce stade de la série, vous devriez remarquer plusieurs éléments clés concernant le cours en vous basant sur les discussions que nous avons eues jusqu'à présent dans la série..

  • Il y en a deux protégé attributions dont chacune se réfère tableaux tel que défini dans le constructeur. L'un est destiné aux actions, l'autre aux filtres.
  • Il y en a deux Publique les fonctions. L'un est conçu pour ajouter facilement des actions, l'autre est conçu pour ajouter facilement des filtres. Notez que chacun accepte trois composants: le nom du hook, l'objet principal qui a la fonction à appeler et la fonction à appeler lors de l'exécution réelle du hook. Pour plus d'informations sur les actions et les filtres, voir cette référence..
  • Ensuite, nous avons un privé fonction utilisée pour simplifier les deux précédentes Publique des fonctions telles que nous avons un seul endroit pour ajouter le crochet au bon tableau.
  • Enfin, nous avons un courir fonction est celle utilisée pour câbler tous les crochets définis. C’est ce qui permettra d’enregistrer toutes nos fonctions personnalisées avec WordPress..

Comme nous continuons à construire le reste du plugin, nous verrons cette classe en cours d'utilisation.

Le tableau de bord d'administration

Cette partie du plugin contient tous les fichiers situés dans le répertoire. admin annuaire. Si vous vous souvenez de l'article précédent, nous avons une classe primaire, une feuille de style et un seul fichier utilisé pour rendre la vue du contenu..

Nous allons examiner chacun de ces fichiers pour qu'ils soient utilisés en commençant par la classe admin principale.

Poste unique Meta Manager Admin

Il s'agit de la classe principale chargée de l'enregistrement des feuilles de style, de la boîte méta et du fichier qui rendra le contenu de la boîte méta..

Jetons un coup d'oeil au code complet et ensuite nous passerons en revue ce qu'il fait.

version = $ version;  public function enqueue_styles () wp_enqueue_style ('single-post-meta-manager-admin', plugin_dir_url (__FILE__). 'css / unique-post-meta-manager-admin.css', array (), $ this-> version, FALSE);  fonction publique add_meta_box () add_meta_box ('single-post-meta-manager-admin', 'Single Post Meta Manager', tableau ($ this, 'render_meta_box'), 'post', 'normal', 'core') ;  fonction publique render_meta_box () require_once plugin_dir_path (__FILE__). 'partiels / single-post-meta-manager.php'; 

Ceci est une classe relativement simple qui suppose que vous êtes familier avec wp_enqueue_style et add_meta_box. Sinon, passez en revue les articles liés, puis revenez à cet article..

Ensuite, examinons ce que fait le reste de la classe:

  • Notez qu'il y a un privé attribut utilisé pour suivre la version du plugin. Cette valeur est transmise au constructeur de la classe et est principalement utilisée pour s'assurer que nous incluons la version la plus récente du plug-in lors de la mise en file d'attente de nos feuilles de style afin de nous assurer de supprimer tous les fichiers susceptibles d'être mis en cache lors de l'exécution. ce plugin.
  • Ensuite, nous avons un Publique fonction utilisée pour enregistrer la feuille de style associée au tableau de bord, et nous avons une fonction publique qui permet d’ajouter une méta-boîte à la poster type tableau de bord.
  • Enfin, nous avons une autre fonction publique (appelée techniquement de dans cette classe) pour rendre le contenu de la méta-boîte. Le contenu de ce fichier se trouve dans un fichier externe que nous examinerons dans un instant..

Bien que nous verrions tout plus en détail plus tard, vous remarquerez peut-être que la fonction qui met en file d'attente les feuilles de style n'est référencée nulle part ailleurs. C'est là que le Chargeur la classe finira par jouer.

Poste unique Meta Manager partiel

Certains développeurs aiment écrire le balisage pour les vues de boîte à méta dans PHP et les stocker dans des chaînes très longues.. 

Je ne suis pas partisan de cette approche, car les vues (ou les partiels, les modèles ou tout ce que vous souhaitez appeler) sont généralement utilisées pour afficher des données et consister ainsi en davantage de balises. À cette fin, je pense qu'ils devraient être leur propre dossier.

Dans ce cas, nous voulons avoir un fichier qui rend toutes les métadonnées associées à la publication en cours dans un fichier. table élément qui est contenu dans la boîte à méta.

Le balisage pour ce fichier ressemble à ceci:

$ post_meta_value) ?>

Bien que le balisage et le minimum PHP contenu dans ce fichier soient relativement explicites, il Est-ce que dépend de votre connaissance du get_post_meta et get_the_ID les fonctions.

Une fois que toutes les métadonnées de la publication sont récupérées, nous parcourons ensuite les informations (en utilisant l'une des constructions de boucle que nous avons abordées beaucoup plus tôt), puis nous affichons à la fois la clé méta et la valeur..

Les styles simples Post Meta Admin

La dernière chose que nous devons faire pour le contenu de la boîte méta est de fournir les styles de la feuille de style que nous avons mis en file d'attente dans la classe admin principale..

Pour ce faire, nous allons éditer css / simple-post-meta-manager.css.

# single-post-meta-manager-data width: 100%;  # single-post-meta-manager-data .key font-weight: bold; 

Évidemment, c'est très simple. Il ne fournit rien de plus sophistiqué que de définir la largeur de la table à 100% de son conteneur, et il met en gras les valeurs de la clé méta..

Mais cela suffit pour ce que nous cherchons à faire maintenant.

Le fichier de plugin principal

À ce stade, nous devons définir le fichier de plug-in principal. C'est le fichier qui définit la version du plugin, le slug du plugin (qui est normalement utilisé dans l'internationalisation ainsi que d'autres fonctionnalités), instancie le Loader et enregistre tous les points d'ancrage nécessaires avec WordPress..

Jetons un coup d'oeil au code, puis révisons-le une fois que tout est défini:

plugin_slug = 'single-post-meta-manager-slug'; $ this-> version = '0.2.0'; $ this-> load_dependencies (); $ this-> define_admin_hooks ();  fonction privée load_dependencies () require_once plugin_dir_path (nom_répertoire (__FILE__)). 'admin / class-single-post-meta-manager-admin.php'; require_once plugin_dir_path (__FILE__). 'class-single-post-meta-manager-loader.php'; $ this-> loader = new Single_Post_Meta_Manager_Loader ();  fonction privée define_admin_hooks () $ admin = new Single_Post_Meta_Manager_Admin ($ this-> get_version ()); $ this-> loader-> add_action ('admin_enqueue_scripts', $ admin, 'enqueue_styles'); $ this-> loader-> add_action ('add_meta_boxes', $ admin, 'add_meta_box');  fonction publique run () $ this-> loader-> run ();  fonction publique get_version () return $ this-> version; 

La classe contient les attributs suivants:

  • La version qui est transmise à travers le plugin afin d'aider non seulement à définir la version de travail actuelle, mais également à fournir des fonctionnalités telles que la fonctionnalité de suppression du cache pour nos feuilles de style.
  • Il y a un plugin qui peut être utilisé à des fins d'internationalisation, ainsi que d'autres fois où un identifiant unique est nécessaire.
  • Une référence au chargeur que nous avons défini précédemment dans ce fichier. 

Les attributs ci-dessus sont tous définis dans le constructeur, mais il existe également des appels à plusieurs autres fonctions..

  • load_dependencies est utilisé afin d'importer tous les fichiers utilisés dans ce plugin, tels que le gestionnaire d'administration et le chargeur.
  • define_admin_hooks C’est ainsi que nous tirons parti du chargeur pour coordonner les fonctions définies dans notre classe d’administrateur qui mettent en file d'attente nos styles et notre méta-boîte avec WordPress. C’est ainsi que nous séparons les préoccupations de notre plugin et que nous nous assurons que chaque classe a un but unique..
  • courir est la fonction qui met tout en œuvre pour que toutes les fonctionnalités du plugin soient activées lorsqu'elles sont activées dans WordPress.

Sauf qu'il nous manque encore un dernier élément: comment pouvons-nous instancier réellement la classe de plug-ins et lancer le processus??

Le chargeur de démarrage du plugin

Pour ce faire, nous exploitons un fichier situé à la racine du répertoire du plugin. Certaines personnes appellent cela un fichier de démarrage de plugin, d'autres l'appellent un chargeur de démarrage, et d'autres l'appellent le fichier de plugin principal..

Quoi que vous choisissiez de l’appeler, c’est le fichier qui s’enregistre avec WordPress et qui met tout en oeuvre. Jetons un coup d'oeil au code et ensuite nous verrons ce qu'il fait après:

courir();  run_single_post_meta_manager ();

Le commentaire de code en haut du fichier indique à WordPress que le plugin existe et lui donne suffisamment d'informations sur le plugin pour qu'il puisse l'afficher dans le tableau de bord..

La première condition que vous voyez empêche l'accès direct au fichier de plug-in. Ce n'est rien de plus qu'une simple mesure de sécurité.

Enfin, nous appelons Demandez une fois pour inclure le fichier de plugin principal que nous avons examiné ci-dessus, puis nous définissons une fonction et instancie la Single_Post_Meta_Manager et après quoi nous appelons courir qui est ce qui met tout en mouvement.

Enfin, nous appelons la fonction que nous avons définie à la toute fin du fichier. Cela lance le processus et donne vie au plugin.

Quoi de neuf ensuite?

À ce stade, nous avons terminé les fonctionnalités de notre plugin; Cependant, nous n'avons toujours pas terminé. Il nous reste encore une chose à faire pour nous assurer de suivre toutes les meilleures pratiques d'un plugin et de fournir de la documentation..

Dans le prochain article, nous allons faire une pause dans les articles plus longs qui consistent à écrire du code, passer en revue les normes de documentation WordPress, puis documenter le plug-in de manière à compléter l'ensemble de ses fonctionnalités..

En attendant, téléchargez l'exemple de plug-in, explorez comment tout s'emboîte et assurez-vous de laisser des commentaires ou des questions sur notre travail à ce jour..