Dans le dernier tutoriel, nous avons passé en revue l'état initial de notre chargeur automatique, puis avons suivi un processus d'analyse et de conception orientée objet. Le but est de rassembler tout ce que nous avons couvert dans cette série et dans la série introductive..
Deuxièmement, l'objectif de cette opération dans son propre didacticiel est de nous permettre de passer le reste de notre temps à parcourir notre classe, en examinant le lien entre chaque partie, en l'implémentant dans notre plug-in, puis en expliquant comment appliquer la programmation orientée objet et la principe de responsabilité unique peut conduire à une solution plus ciblée et maintenable.
À ce stade, je suppose que vous avez suivi cette série. Si ce n'est pas le cas, passez en revue les première et deuxième parties. Celui-ci suppose que vous avez suivi jusqu'ici.
Si vous êtes débutant, je vous recommande de lire également la série initiale dans son intégralité. Une fois que vous êtes pris au dépourvu, vous devriez être en mesure de terminer la série. Nous concluons avec le reste du code source traité dans ce tutoriel..
Pour fournir un résumé rapide et nous assurer que nous sommes tous sur la même page, nous avons abordé les sujets suivants dans cette série:
À ce stade, nous sommes prêts à échanger notre autochargeur existant avec le code orienté objet. Notez cependant que ce ne sera pas une simple question de changer de fichier.
Au lieu de cela, nous allons devoir créer les fichiers, s’assurer qu’ils respectent les normes de codage WordPress, les implémenter, tester leur implémentation pour s’assurer que le plug-in fonctionne toujours, puis supprimer l’autochargeur existant..
Cela ressemble à beaucoup de travail, mais si notre analyse et la conception du didacticiel précédent ont été effectuées correctement et s’avèrent exactes, nous ne devrions avoir aucun problème à faire tout ce qui est indiqué ci-dessus..
Avant de passer à la mise en œuvre, je souhaite fournir un bref aperçu de l’environnement de développement que vous devriez avoir sur votre système. Techniquement, c'est quelque chose que vous devriez déjà avoir en cours d'exécution conformément aux instructions des tutoriels précédents, mais je veux être aussi complet que possible..
Cela dit, commençons.
Dans cette section, nous allons revoir tout le code que nous avons examiné dans le didacticiel précédent; cependant, nous allons examiner chaque fichier individuel avec une documentation complète.
De plus, nous allons l'inclure dans notre projet afin que, à la fin du tutoriel, nous puissions utiliser ce code à la place du code unique, basé sur les procédures, que nous avons utilisé précédemment..
Notez que chacun des fichiers suivants doit être nommé comme indiqué et doit être inclus dans le inc
annuaire. De plus, tout cela est disponible au téléchargement en utilisant le bouton bleu dans la barre latérale de ce message..
namespace_validator = new NamespaceValidator (); $ this-> file_registry = new FileRegistry (); / ** * Tente de charger le nom de fichier spécifié. * * @param string $ filename Le chemin du fichier que nous essayons de charger. * / fonction publique load ($ filename) if ($ this-> namespace_validator-> is_valid ($ filename)) $ this-> file_registry-> load ($ filename);
class-file-investigator.php
get_file_name ($ file_parts, $ current, $ i); if (count ($ file_parts) - 1! == $ i) $ filepath = trailingslashit ($ filepath); return $ filepath; / ** * Récupère l'emplacement d'une partie du nom de fichier sur le disque en fonction de l'index actuel du tableau * examiné. * * @access private * @param array $ file_parts Le tableau de toutes les parties du nom de fichier. * @param string $ current La partie actuelle du fichier à examiner. * @param int $ i Index actuel du tableau de $ file_parts à examiner. * @return string Le nom du fichier sur le disque. * / private function get_file_name ($ pièces_fichiers, $ actuel, $ i) $ fichier = "; if (nombre ($ pièces_fichiers) - 1 === $ i) si ($ ceci-> is_interface ($ fichiers_fichiers)) $ filename = $ this-> get_interface_name ($ file_parts); else $ filename = $ this-> get_class_name ($ current); else $ filename = $ this-> get_nomspace_name ($ current); return $ filename ; / ** * Détermine si le fichier spécifié en cours d'examen est une interface. * * @Access private * @param array $ file_parts Parties du chemin de fichier à examiner. * @Return bool True si l'interface est contenue dans le nom du fichier; sinon , false. * / private function is_interface ($ file_parts) return strpos (strtolower ($ file_parts [count ($ file_parts) - 1]), 'interface'); / ** * Récupère le nom du fichier de l'interface en fonction du des parties spécifiées du fichier passées * dans l'autochargeur. * * @access private * @param array $ file_parts nction get_interface_name ($ file_parts) $ interface_name = explode ('_', $ file_parts [count ($ file_parts) - 1]); $ nom_interface = $ nom_interface [0]; return "interface- $ nom_interface.php"; / ** * Génère le nom de la classe filename sur le disque. * * @access private * @param string $ current Elément actuel du nom de fichier à examiner. * @return string Le nom de fichier de la classe sur le disque. * / private function get_class_name ($ current) return "class- $ current.php"; / ** * Crée un mappage de l'espace de noms sur la structure de répertoires. * * @access private * @param string $ current La partie actuelle du fichier à examiner. * @return string Le chemin d'accès de l'espace de noms mappé à la structure de répertoires. * / private function get_namespace_name ($ current) return '/'. $ actuel;class-file-registry.php
investigateur = nouveau FileInvestigator (); / ** * Utilise l'investigateur de fichier pour récupérer l'emplacement du fichier sur le disque. Si trouvé, alors il sera inclus dans le projet; sinon, un message d'erreur WordPress sera généré. * * @param string $ filepath Le chemin du fichier sur le disque à inclure dans le plugin. * / public function load ($ chemin du fichier) $ chemin du fichier = $ this-> investigator-> get_filetype ($ chemin du fichier); $ filepath = rtrim (plugin_dir_path (nomrépertoire (__FILE__)), '/'). $ filepath; if (file_exists ($ filepath)) include_once ($ filepath); else wp_die (esc_html ('Le fichier spécifié n'existe pas.'));Inclusion des fichiers, démarrage de l'autochargeur
Maintenant que nos fichiers sont créés, nous devons apporter deux autres modifications mineures:
- Nous devons inclure toutes les classes dans le répertoire inc..
- Nous devons nous débarrasser de l'ancien code de l'autoloader.
- Et nous devons utiliser notre nouvel autochargeur avec le
spl_autoload_register
une fonction.En fin de compte, la version finale de autoload.php devrait ressembler à ceci:
Et cela accomplira exactement ce que nous avons décrit ci-dessus.
Mais attendez, je reçois une erreur!
À ce stade, vous avez effectué beaucoup de travail. Vous avez restructuré l'intégralité de votre autochargeur pour utiliser la programmation orientée objet. Vous avez documenté vos classes et fonctions. Vous avez créé de nouveaux fichiers, supprimé du code d'anciens fichiers et vous êtes prêt à vous assurer que tout fonctionne comme prévu..
Ainsi, comme le ferait tout développeur, vous lancez la fenêtre du navigateur pour actualiser la page. Un message d'erreur s'affiche:
Heureusement, c'est une solution facile. Le problème est que nous essayons d’ajouter notre méta-boîte trop tôt. Pour résoudre ce problème, nous mettrons à jour le
init
méthode dans notreMeta_Box
classe à inclure ceci:Et ensuite, nous introduirons une fonction qui sera liée au travail que nous venons de faire:
display, 'render'), 'post', 'side', 'high');À ce stade, vous devriez pouvoir exécuter le nouveau code sans aucun problème, aucun avertissement, aucune notification et aucune erreur..
Conclusion
Travailler à travers tout cela aurait pu sembler beaucoup, et ce l'était! Mais la bonne chose est qu'il a couvert beaucoup de terrain dans trois tutoriels, et il a construit sur le travail d'une série précédente. À cet égard, de nombreux nouveaux sujets ont été abordés et de nouvelles techniques ont été apprises..
Notez que j'écris régulièrement pour Envato Tuts + et que vous pouvez retrouver tous mes tutoriels précédents sur la page de mon profil. De plus, je discute souvent du développement de logiciels dans le contexte de WordPress sur mon blog et sur Twitter, alors n'hésitez pas à me suivre, peu importe l'endroit..
Cela dit, étudiez le code que nous avons abordé tout au long de cette série (et peut-être même avant) et voyez si vous ne pouvez pas utiliser certaines de ces techniques dans vos travaux actuels ou futurs..
Ressources