Utiliser les espaces de noms et le chargement automatique dans les plugins WordPress, 1ère partie

Les espaces de noms et l'autoloading ne sont pas des sujets abordés lorsqu'il s'agit de travailler avec des plugins WordPress.

Cela est en partie lié à la communauté qui l'entoure, aux versions de PHP prises en charge par WordPress, et au fait que peu de gens en parlent..

Et ça va, dans une certaine mesure.

Ni les espaces de noms ni le chargement automatique ne sont des sujets que vous devez absolument utiliser pour créer des plugins. Ils peuvent toutefois offrir un meilleur moyen d’organiser et de structurer votre code, ainsi que de réduire le nombre de exiger, Demandez une fois, comprendre, ou include_once les déclarations que vos plugins utilisent.

Dans cette série, nous allons examiner exactement ce que sont les espaces de noms PHP, pourquoi ils sont bénéfiques et comment les utiliser. Ensuite, nous allons examiner comment utiliser des autochargeurs automatiques pour charger automatiquement les fichiers dont nous avons besoin sans avoir à les charger manuellement dans notre code..

Avant que nous commencions

Pour commencer, vous aurez besoin des outils suivants:

  • Un environnement de développement local incluant PHP 5.6.20, le serveur Web Apache et un serveur de base de données MySQL.
  • Un répertoire à partir duquel WordPress 4.6 est hébergé.
  • Un éditeur de texte ou un EDI de votre choix que vous maîtrisez bien pour écrire un plugin.
  • Une connaissance pratique de l'API du plugin WordPress.

Une fois que tout est en place, commençons par créer un plugin. Notez que si l’une de ces réponses vous semble nouvelle, n'hésitez pas à Consultez l'un de mes tutoriels précédents sur la page de mon profil.. 

De plus, vous pouvez me suivre sur mon blog et / ou Twitter à @tommcfarlin où je parle de développement logiciel dans le contexte de WordPress.

Cela dit, commençons.

Ce que nous allons construire

Dans cette série, nous allons créer un plugin simple principalement pour montrer comment fonctionnent les espaces de noms et le chargement automatique en PHP. Mais pour ce faire, il est toujours utile d'appliquer les concepts de manière pratique..

À cette fin, nous allons créer un plug-in facilitant le chargement de feuilles de style et de styles JavaScript dans notre plug-in, et affichant une méta-boîte invitant l'utilisateur à poser une question afin de l'aider à réfléchir à un sujet sur lequel bloguer..

Non, ce n'est pas quelque chose que vous voudriez soumettre au référentiel de plugins WordPress, ni quelque chose que vous utiliserez probablement en dehors de cette démo particulière. Mais rappelez-vous, le but de cette série est de montrer le fonctionnement des espaces de noms et du chargement automatique..

Et c'est à travers cet exemple que nous allons faire exactement cela.

Construire le plugin

Si vous avez suivi l'un de mes tutoriels précédents, vous savez que l'une des choses que j'aime faire est de planifier ce que nous allons construire avant de commencer à écrire du code. Donc, pour la première itération de ce plugin, voici ce que nous savons devoir faire:

  1. Définir un fichier d'amorçage pour démarrer le plugin.
  2. Configurez un répertoire pour tous les fichiers qui rendront la méta-boîte.
  3. Créer un répertoire pour héberger la classe qui chargera nos dépendances.
  4. Préparer les feuilles de style et JavaScript pour notre plugin.

Cela semble simple, non? Si non, pas de soucis. Je vais vous guider tout au long du processus avec code, commentaires, captures d'écran et explications.. 

Commençons.

Créer le répertoire du plugin

Dès le départ, nous savons que nous aurons besoin d’un fichier qui servira de boot pour le plugin. Nous savons aussi que nous aurons besoin d’un répertoire pour la fonctionnalité administrative..

Allons de l'avant et créons cela maintenant:

De toute évidence, nous avons un seul fichier vide et un répertoire d’administrateur. Continuons et configurons ce plugin pour qu'il apparaisse dans le contexte de l'écran d'activation du plugin WordPress.

Pour ce faire, nous devons ajouter le bloc de code suivant en haut du fichier du plugin:

Ensuite, lorsque vous accédez à la page Plugin WordPress dans la zone d’administration, vous devriez le voir apparaître dans votre liste de plugins. Si vous choisissez de l'activer, rien ne se passera car nous n'avons écrit aucun code.

À ce stade, nous pouvons commencer et définir la classe qui affichera notre méta-boîte sur le Ajouter un nouveau message page.

Ajout d'une méta-boîte

Cette partie du didacticiel supposera que vous êtes un peu versé dans la création de méta-boîtes. Sinon, n'hésitez pas à revoir les concepts de cette série, puis à revenir à cette partie une fois que vous avez terminé. 

Commençons par créer un fichier appelé classe-meta-box-display.php dans le admin répertoire de notre plugin. Le code devrait inclure ce qui suit. Assurez-vous de revoir les commentaires pour vous assurer de bien comprendre tout ce que ce cours est responsable de faire..

A partir du code ci-dessus, vous devriez pouvoir vous assurer que cette classe sera responsable de l'affichage du contenu à l'intérieur de la boîte méta. Pour l'instant, cependant, nous l'avons simplement en écho à une déclaration pour la vue. 

Nous allons changer cela plus tard dans le tutoriel.

Ensuite, nous devons introduire une classe qui représente la méta-boîte elle-même. Alors créez un classe-meta-box.php déposer dans le admin répertoire de notre plugin. Voici le code pour faire exactement cela. Encore une fois, relisez le code puis je vous expliquerai ce qui se passe sous la classe:

display = $ display;  / ** * Enregistre cette méta-boîte avec WordPress. * * Définit une méta-boîte qui générera des questions inspirantes en haut * de la barre latérale de la page "Ajouter un nouveau message" afin d'aider les * blogueurs à écrire quelque chose à propos de la rédaction d'un article. * / public function init () add_meta_box ('tutsplus-post-questions', 'Questions d'inspiration', tableau ($ this-> display, 'render'), 'post', 'side', 'high');  

Cette classe conserve un seul attribut qui fait référence à son affichage. Cela signifie que cette classe est responsable de la définition de la boîte méta (qui à son tour appelle l'objet d'affichage pour restituer le message)..

L'affichage est maintenu en tant que propriété privée définie dans le constructeur. La méta-boîte n'est pas définie tant que le init La méthode est appelée (ce que nous verrons dans l'amorçage du plugin plus tard dans le tutoriel).

À ce stade, nous avons tout ce dont nous avons besoin pour afficher une méta-boîte rudimentaire sur le Ajouter une nouvelle page de message. Mais d'abord, nous devons configurer le bootstrap de notre plugin.

Dans les tutoriels précédents, je l'ai souvent fait et je vais donc inclure juste le code requis (depuis que j'ai défini l'en-tête ci-dessus). J'ai ajouté des commentaires, mais je m'assurerai également d'expliquer ce qui se passe après le code. 

Ceci est particulièrement pertinent car notre chargeur automatique finira par éliminer le besoin d'une partie de ce que vous allez voir..

init ();  

Tout d'abord, nous veillons à ce que ce fichier ne soit pas directement accessible et qu'il ne puisse être géré que par WordPress.

Ensuite nous include_once les classes que nous avons créées jusqu'à présent. Ensuite, nous instancions le Meta_Box et passez une instance de la Meta_Box_Display dans son constructeur.

Enfin, nous appelons le init méthode qui réside dans le Meta_Box classe.

En supposant que tout se passe bien, nous devrions pouvoir activer le plugin et voir la méta-boîte sur un Ajouter un nouveau message page (ou, vraiment, un Mettre à jour le message page aussi).

À ce stade, nous avons un plugin fonctionnel, mais il ne fait rien d'autre que créer une méta-boîte et afficher une chaîne de texte..

Let's au moins l'obtenir pour afficher des citations inspirantes et en afficher une au hasard à chaque chargement de la page.

Afficher des citations d'inspiration

Premièrement, nous devons trouver un fichier texte de citations d’inspiration. Heureusement, Internet fournit une pléthore de ceux-ci que nous pouvons utiliser dans notre projet (et ils sont disponibles gratuitement). À cette fin, j'ai créé un Les données sous-répertoire dans admin que j'utilise pour loger mon questions.txt fichier.

Ensuite, nous allons devoir créer une classe qui:

  1. Ouvrir le fichier.
  2. Lire une ligne aléatoire dans une chaîne.
  3. Fermer le fichier.
  4. Renvoyer la chaîne à l'appelant.

Allons de l'avant et créons cette classe maintenant. Parce que c’est un utilitaire et qu’il va être utilisé dans la partie administrative du plugin, créons un util sous-répertoire dans admin. Ensuite, créons un fichier appelé class-question-reader.php.

Nous allons spécifier le code de cette classe dans un instant, mais revenons au fichier d'amorçage du plugin et n'oubliez pas d'inclure le fichier. Le code résultant devrait ressembler à ceci:

Comme vous pouvez le constater, le nombre de fichiers à inclure manuellement s’allonge. Imaginez si nous travaillions sur un gros plugin! Néanmoins, nous y reviendrons plus tard dans la série.

Pour l'instant, reportons notre attention sur le lecteur de questions. Le code de la classe devrait ressembler à ceci:

open ($ filename); $ question = $ this-> get_random_question ($ file_handle, $ filename); $ this-> close ($ file_handle); return $ question;  / ** * Ouvre le fichier en lecture et renvoie la ressource dans le fichier. * * @access private * @param string $ filename Le chemin du fichier contenant la question. * @return resource Une ressource dans le fichier. * / fonction privée open ($ filename) return fopen ($ filename, 'r');  / ** * Ferme le fichier qui a été lu. * * @access private * @param string $ file_handle La ressource du fichier qui a été lu. * / fonction privée close ($ file_handle) fclose ($ file_handle);  / ** * Ouvre le fichier en lecture et renvoie la ressource dans le fichier. * * @access private * @param string $ file_handle La ressource du fichier qui a été lu. * @param string $ filename Le chemin d'accès au fichier contenant la question. * @return string $ question La question à afficher dans la boîte méta. * / private function get_random_question ($ file_handle, $ filename) $ questions = fread ($ file_handle, filesize ($ filename)); $ questions = exploser ("\ n", $ questions); // Cherche une question jusqu'à ce qu'une chaîne vide ne soit plus renvoyée. $ question = $ questions [rand (0, 75)]; while (vide ($ question)) $ question = $ questions [rand (0, 75)];  return $ question;  

Notez que le code pour cela est relativement simple, mais si vous n'êtes pas familiarisé avec certaines opérations de base sur les fichiers en PHP, voici ce que nous faisons:

  1. Nous ouvrons le fichier en utilisant fopen, qui nous accordera une ressource pour lire le fichier.
  2. Ensuite, nous lisons le contenu du fichier, puis prenons chaque ligne du fichier et l’écrivons dans l’index d’un tableau..
  3. Ensuite, nous choisissons un nombre aléatoire dans l’ensemble des questions et nous le renvoyons à la méthode qui l’appelle. S'il renvoie une chaîne vide, nous regardons à nouveau jusqu'à ce qu'une question soit localisée.
  4. Ensuite, on ferme la ressource au fichier.

En fin de compte, pour utiliser cette classe, il vous suffit de l’instancier, de connaître le chemin d’un fichier rempli de questions, puis d’appeler le get_question_from_file méthode.

Remarque: Cette classe fait ne pas faire n'importe quelle gestion d'erreur. C'est une pratique courante lorsque vous travaillez avec des fichiers. Par exemple, que devrions-nous faire si le fichier n'existe pas? Que devons-nous faire si la mise en forme n'est pas correcte ou si nous ne parvenons pas à fermer la ressource?

Toutes ces questions sont bonnes, mais elles sortent du cadre de ce didacticiel. Toutes ces informations peuvent être trouvées dans le manuel PHP (et peut-être quelques autres tutoriels sur le réseau Envato Tuts +).

Pour le moment, cependant, nous sommes préoccupés par la lecture d'un fichier dont nous savons qu'il existe, et par l'affichage des résultats dans une boîte méta..

Ce que nous avons si loin

À ce stade, nous pouvons commencer à tout mettre en place. En supposant que nous ayons tout fait correctement, nous devrions pouvoir passer une instance du Question_Reader au Meta_Box_Display, poser une question, puis l'afficher dans la boîte méta.

Commençons par mettre à jour le fichier d'amorçage:

init (); 

Dans le code ci-dessus, notez que le Meta_Box_Display accepte maintenant une instance du lecteur de questions dans son constructeur. Cela implique que nous devrons introduire une nouvelle propriété, ce que nous ferons maintenant:

question_reader = $ question_reader;  / ** * Rend une seule chaîne dans le contexte de la méta-boîte à laquelle cet * affichage appartient. * / fonction publique render () $ file = dirname (__FILE__). '/data/questions.txt'; $ question = $ this-> question_reader-> get_question_from_file ($ file); echo wp_kses ($ question);  

Notez que ce fichier utilise le chemin d'accès aux questions que le fichier a ajouté au sous-répertoire de données. Mis à part le chemin codé en dur, cette classe dépend également d’une instance de Question_Reader.

Pour les besoins de la démonstration à laquelle nous travaillons (notamment les espaces de noms et le chargement automatique), ce n'est pas grave. Dans un projet futur, nous souhaitons que les projets aient moins de couplage entre eux. Peut-être que ce sera un sujet pour un futur tutoriel.

La principale conclusion du code ci-dessus, cependant, est que le Meta_Box_Display la classe peut maintenant afficher une question à l'utilisateur.

En outre, notez l’utilisation de wp_kses par souci de désinfection des données avant de les présenter à l'utilisateur.

Rafraîchissant le Ajouter un nouveau message page devrait vous présenter une image comme celle-ci:

Et si vous actualisez la page, vous pouvez voir de nouvelles questions en cours de chargement..

Où allons-nous à partir d'ici?

De toute évidence, nous n’avons pas encore abordé les thèmes des espaces de noms et du chargement automatique, mais ce n’est pas grave! Il est important que nous posions les bases d'un plugin qui ne les utilise pas. De cette façon, quand nous faire les mettre en œuvre, nous pouvons voir les avantages qu'ils portent.

En outre, nous avons encore du travail supplémentaire à faire: nous devons introduire JavaScript et CSS et un chargeur d’actifs. Cela nous permettra d’obtenir une image encore plus large de la façon dont l’emballage de nos fichiers dans des espaces de noms est bénéfique..

N'oubliez pas que vous pouvez retrouver tous mes tutoriels précédents sur ma page de profil et vous pouvez me suivre sur mon blog ou sur Twitter..

Comme toujours, si vous recherchez d'autres utilitaires pour vous aider à développer votre ensemble croissant d'outils pour WordPress ou, par exemple, du code pour étudier et mieux connaître WordPress, n'oubliez pas de voir ce que nous avons disponible dans Envato. Marché.

Cela dit, nous aurons une version de travail du plugin prête à être téléchargée à partir du prochain tutoriel de cette série. Si vous souhaitez utiliser le code du tutoriel ci-dessus, n'hésitez pas à essayer. En outre, n'hésitez pas à poser des questions dans les commentaires. 

Ressources

  • add_meta_box
  • add_action
  • plugins_loaded
  • fopen
  • fread
  • fermer
  • wp_kses