POO est la norme pour un excellent code, il est flexible, évolutif et extensible. Les développeurs WordPress ont besoin d’un framework sur lequel fonder leur code, ce qui peut facilement être porté sur d’autres projets pour économiser la roue deux fois par semaine. Il s'agit de travailler plus intelligemment, pas plus fort!
Il n'y a rien de pire que d'activer un plugin pour constater qu'il tue votre site web car deux auteurs de plugins ont une fonction globale appelée initialise () !
Tout code a un objectif, vous ne devriez jamais commencer à écrire quelque chose (Livre, Plugin, Thème ou Tutoriel!) Sans un objectif clair et défini de votre objectif..
Pour ce tutoriel, nous allons utiliser une classe de base de programmation orientée objet pour effectuer les opérations suivantes dans un plugin.
Commençons par créer une classe vide avec uniquement une fonction constructeur et en l'instanciant dans une variable globale (c'est vraiment cool, je l'expliquerai plus tard!)
Ensuite, nous commençons à déléguer les fonctionnalités du constructeur, définissons des chemins de plug-in et créons des fonctions distinctes pour ajouter des actions à connecter à WordPress, le tout appelé automatiquement à partir du constructeur de la classe..
plugin_defines (); $ this-> setup_actions (); / ** * Défini pour être utilisé n'importe où dans WordPress après que le plugin ait été lancé. * / function plugin_defines () define ('MY_PLUGIN_PATH', trailingslashit (WP_PLUGIN_DIR. '/'. str_replace (nom de base (__FILE__), "", plugin_basename (__FILE__))); define ('MY_PLUGIN_URL', trailingslashit (WP_PLUGIN_URL. '/'. str_replace (nom_base (__FILE__), "", plugin_basename (__FILE__)))); / ** * Configurez les actions pour relier le plugin à WordPress aux endroits appropriés * / function setup_actions () // Engage. $ OOP_Class = new OOP_Class (); ?>
Cela a l'air bien jusqu'à présent, tout est configuré, mais ça ne fait pas grand chose pour l'instant. Continuons sur la fonctionnalité requise.
Configurer le plugin mis en file d'attente à partir de template_redirect
// Faire quelque chose sur template_redirect, peut-être mettre en file d'attente des scripts sans être dans admin? if (! is_admin ()) $ this-> plugin_enqueues ();
Et la fonction plugin_enqueues:
/ ** * Utilisé pour mettre en file d'attente les styles et les scripts nécessaires au plug-in. * / function plugin_enqueues () // Mettre en file d'attente jQuery wp_enqueue_script ('jquery'); // Notre script d'initialisation wp_enqueue_script ('plugin_init', MY_PLUGIN_URL. 'Js / init.js', array ('jquery')); // Quelques styles de base: wp_enqueue_style ('plugin_style', MY_PLUGIN_URL. 'Css / pluginstyles.css');
Configurez une variable de classe avant le constructeur (juste pour que tout soit net).
// Les liens vers les pages enfants. Faux par défaut var $ child_page_links = false;
Définir la fonction pour récupérer les liens de page enfants et définir le code HTML dans l'objet.
/ ** * Définit la variable des liens de page enfant de cette classe. * / function set_child_page_links () global $ post; // Récupère les pages enfants de la page en cours $ children = get_pages (array ('child_of' => $ post-> ID)); si (! empty ($ enfants)): $ out = ''; // Parcourt les pages enfants en générant du HTML avec l'image, le lien et le titre de la page enfant. foreach ($ enfants en tant que $ enfant) $ img = get_the_post_thumbnail ($ child-> ID, 'thumbnail'); $ title = $ child-> post_title; $ url = get_permalink ($ child-> ID); $ out. = ''; else: // Nous n'avons pas d'enfants, nous devons être capables de gérer cela. $ out = false; fin si; $ this-> child_page_links = $ out;'; $ out. = ''. $ img. ''. esc_html ($ title). ''; $ out. = ''; $ out. = '
Et lancez-le à partir de la fonction template_redirect
// Seulement sur une page. if (is_page ()) $ this-> set_child_page_links ();
C’est là que ça commence à refroidir, comme notre shortcode n’aura aucune option, nous pouvons utiliser ce que l’on appelle un "getter", qui retourne simplement la variable de classe.
/ ** * Getter pour les liens de page enfant * / / function return_child_pages () return $ this-> child_page_links;
Cette fonction peut être connectée à l'API shortcode de la manière suivante:
add_shortcode ('Child_Pages', tableau ($ this, 'return_child_pages'));
De plus, comme nous avons instancié tout cela sur template_redirect, il n'est pas nécessaire de régénérer les liens, nous pouvons simplement les cracher n'importe où, comme ceci:
child_page_links) echo $ OOP_Class-> child_page_links; ?>
Et l'extrait de code JavaScript. (Cela va dans js / init.js dans notre dossier plugin). Ceci met en évidence le lien en survol et demande à l'utilisateur l'autorisation de continuer vers la page enfant..
jQuery (document) .ready (function ($) $ ('.child_page a') .click (function () if (confirm ("Etes-vous sûr de vouloir aller à la page enfant?")) ) ; else return false;). hover (function () $ (this) .css ('background-color', '#EFEFEF');, function () $ (this) .removeAttr (' style ');););
Enfin, certains styles CSS de base pour notre plugin (/css/pluginstyles.css).
.child_page_wrapper .child_page float: left; width: 33% .child_page_wrapper .child_page a display: block; .child_page_wrapper .child_page span display: block; text-align: center; .child_page_wrapper .child_page img display: block; marge: 0 auto;
Cette classe peut être utilisée dans presque toutes les situations et convient parfaitement (sans toutefois s'y limiter) à une utilisation dans le système WordPress. Il peut être utilisé une fois pour un thème, puis une autre configuration de classe pour certaines fonctionnalités intégrées (ce qui signifie que nous pouvons presque copier / coller facilement les fonctionnalités individuelles d'un projet à l'autre), puis de nouveau pour un plugin personnalisé rapide pour cette fonctionnalité intéressante de votre client besoins qui sont bien exagérés dans les plugins disponibles.
Si elles sont écrites pour être des "sections" indépendantes du site, les classes peuvent facilement être ajoutées à votre prochain projet, ce qui simplifie et accélère les fonctionnalités avancées.!
Bien que nous n’ayons pas encore abordé le potentiel des classes et des objets, c’est un bon début pour comprendre la flexibilité et l’extensibilité de la POO..
Sachez également que stocker des objets en PHP comme celui-ci occupe de la mémoire PHP, aussi utilisez-le intelligemment!!