Sur la structure d'un objet Plugin Wordpress
Vendredi 24 avril 2009 Si nous comptons sur la hellodolly.php exemple simple propulsé par Wordpress, ou même la documentation officielle de même que nous arriverons jamais à la rédaction d'un plug bonne et efficace-in. Ici, nous analysons une structure possible, et un squelette qui peut être utilisée plusieurs fois.
The Basics
Nous devons d'abord comprendre comment et quand un plugin Wordpress est chargé dans le système. Lorsque vous activez un plugin de l'administration, le fichier qui contient le code principal, reconnu par les lignes classiques de commentaire:
- / *
- Nom du plugin: mon plugin
- Plugin URI: http://wordpress.org/extend/plugins/mioplugin/
- Description: description de mon plugin
- Version: 1.0.0
- Auteur: Giovambattista Fazioli
- Author URI: http://labs.saidmade.com
- * /
est chargé ou si il ya dans le front-end où nous en sommes dans l'administration (back-end):

Ce problème est en soi correct, et probablement dans de nombreux cas ne sont pas prises en compte par le développeur. En outre, certains plugins ont une structure (par exemple, n'ont pas imposé et ne nécessitent donc pas une administration) qui rendrait inutile d'insister sur ce point.
Toutefois, il convient de considérer que certains plugins disposer d'une administration cohérente, à savoir, amener avec eux une grande quantité de code utilisé que dans le backend de WordPress. Dans ces cas, si vous ne prenez pas les précautions, vous risquez de charger la partie avant, la partie visible pour les navigateurs, le code qui n'est pas complètement inutile de chargement trop lourd le blog.
Conflits possibles: namespace
De ce qui précède il découle un autre fait important: tous les plugins Wordpress sont chargés dans la même zone d'opération, ce qui entraîne la conséquence malheureuse que si deux plugins différents ont une fonction (une variable ou constante) a le même nom, ces entreront en conflit les uns avec les autres!
L'idéal, donc, serait en mesure de:
- Séparer le code de chargement pour le front-end et back-end
- Protéger l'espace de noms "" pour éviter d'éventuels conflits avec d'autres plugins sont chargés
Front-end ou back-end?
La meilleure façon de déterminer si elle est dans l'administration (back-end) est d'appeler la is_admin() fonction is_admin()
- is_admin ( ) ) // includi il codice lato back-end if (is_admin ()) / / inclure le code back-end
- else / / include front-end code côté
Dans la pratique, schématique, nous pouvons réaliser:

Signification:
- is_admin ( ) ) { if (is_admin ()) (
- 'admin.php' ) ; require_once ( 'admin.php');
- { ) Else (
- 'client.php' ) ; require_once ( 'client.php');
- )
Utilisation des classes pour protéger l'espace des noms
Pour éviter les chevauchements façon dont un produit est désagréable pour "emballer" notre fonction et nos variables dans des récipients appropriés: objets. Définition d'une classe n'ont plus la possibilité de protéger les noms de nos fonctions que l'obtention d'avantages supplémentaires, nous pouvons réutiliser le code dans le plugin avenir. Cette technique permet d'avoir deux plugins différents, de sorte que deux objets différents, avec la même méthode (fonction). Le conflit est éliminé grâce à la nomenclature des différentes classes et leurs instances.
Sketch Plugin
Ayant dit tout cela, nous verrons comment faire un croquis (que vous pouvez trouver jusqu'à ce jour dans le référentiel de code de Google Saidmade), un squelette, vous pouvez réutiliser chaque fois que nous avons besoin d'écrire un plugin. Tout d'abord, l'objet d'organisation de nouveaux Prenons conscience que, s'il est vrai qu'il ya un compte distinct «nette» entre le back-end et front-end qui est également vrai que certaines «fonctions» sont et seront partagés! Cela, en termes de programmation orientée objet, nous montre le chemin percorrerre dans un Code de l'organisation possible. Par exemple, l'intuition suggère que la création d'une classe "mère", c'est à dire une classe à partir desquels on peut déduire de notre classe «client» (front-end) et "admin" (back-end), serait une bonne chose!
Cette classe "mère" contiendra toutes les propriétés (variables) et méthodes (fonctions) ont partagé des environnements front-end et back-end:

Nous allons donc notre classe "mère" et deux classes spécifiques pour le front-end et back-end:
- wp-sketch_class. php / / classe parente
- wp-sketch_admin. php / / classe pour le back-end
- wp-sketch_client. php / / classe pour l'avant-end
Le fichier principal wp-sketch.php inclura seulement en tant que besoin, et instancier ces classes ainsi:
- 'wp-sketch_class.php' ) ; // load the core class require_once ( 'wp-sketch_class.php'); / / charge la classe de base
- is_admin ( ) ) { // check admin if (is_admin ()) (/ / check admin
- 'wp-sketch_admin.php' ) ; // load admin class require_once ( 'wp-sketch_admin.php'), / / classe de charge admin
- / /
- new WPSKETCH_ADMIN ( ) ; // create object $ Wp_sketch_admin = WPSKETCH_ADMIN new () / / créer l'objet
- { ) Else (
- 'wp-sketch_client.php' ) ; // load client front-end class require_once ( 'wp-sketch_client.php'), / / front client load-End Class
- new WPSKETCH_CLIENT ( ) ; // create object $ Wp_sketch_client = WPSKETCH_CLIENT new () / / créer l'objet
- )
Dans ce contexte, "" vous avez juste à prendre soin de définir des variables uniques qui contiennent des instances de classes $wp_sketch_admin et $wp_sketch_client et les noms des classes elles-mêmes WPSKETCH_ADMIN et WPSKETCH_CLIENT mais les méthodes et les propriétés qu'ils présentent .
Les deux classes WPSKETCH_ADMIN et WPSKETCH_CLIENT sont «sous-classes" (les enfants) de WPSKETCH_CLASS défini dans la wp-sketch_class.php Ceci, comme mentionné ci-dessus, ne devrait contenir que les éléments partagés (variables et fonctions), car il est toujours chargé indépendamment du fait que nous sommes dans l'arrière-end ou front-end.
Conclusion ...
Vous pouvez télécharger l'ensemble du squelette du référentiel de code de Google Saidmade. Cela permettra également de trouver une wp-sketch_functions.php utilisé pour empêcher les appels aux fonctions dans le front-end sont la traduction d'un oggetto->metodo() En fait c'est un fichier optionnel n'est pas toujours nécessaire.
Les évolutions possibles de cette approche sont toujours de mieux identifier la section dans laquelle nous évoluons et Wordpress, et en ce sens, il propose des mesures d'optimisation nombreuses pour être prises en vue pour ne charger que le code nécessaire et quand c'est vraiment nécessaire. Ulteiori exemples de ce côté-nous les verrons bientôt.













[...] Une technique pour écrire rapidement un plugin Wordpress mai à préparer un squelette (croquis) pour commencer. Spécifications Wordpress, en fait, conduisent souvent à avoir des plugins structurellement très similaire, en effet, sont les noms de fonctions et de leur contenu changer. Toutefois, dans la préparation d'un squelette, il faut garder à l'esprit de ne pas dupliquer constantes ou des noms de fonction utilisée par d'autres (dont la nôtre) plugin, recevoir un plugins errore.Tutti sanction part de la zone active même fonctionnement. Ainsi, si un plugin a une fonction appelée abc_normalize () aucun autre plug-in peut avoir une fonction avec un nom identico.Caso à distance? Coïncidence? Bien qu'à première vue cela semble une question tout à fait négligeable, lorsque se passe, c'est très ennuyeux, surtout pour l'utilisateur final qui se trouve incapable d'utiliser un plugin. Également la définition des constantes (TABLE_NAME tel, WP_MAIN_PATH, etc ...) est beaucoup plus courant d'obtenir des doubles. Pour plus de détails: Sur la structure d'un objet Plugin Wordpress [...]
[...] Sur la structure d'un objet WordPress Plugin manière de structurer les classes d'un plugin WordPress pour optimiser le chargement et la réutilisation de code. [...]
[...] Ce tour d'horizon avec le prolongement naturel de l'article par Napolux ou avec des objets de structure dans un blog wordpress plugin [...]
[...] Sur la structure d'un objet Plugin Wordpress [...]
Bonjour, j'ai lu cet excellent article et je voulais vous poser une question: j'ai créé un plugin pour la gestion des catégories de produits classés par WP créé par moi et d'autres d'autres tableaux, les plguin l'arrière-end dur pour que cela marche parfaitement situé dans le front-end que je ne sais pas comment afficher la liste des produits à la fois pour plus de détails ... nn c'est savoir comment le faire fonctionner avec le mod Rewrite permaliens agirait très bien.
let me know
Domenico
@ Serdominik: Bonjour Dominique, vous mieux expliquer en détail ce que vous voulez atteindre?
@ Giovambattista Fazioli:
Bonjour, merci de me donner une réponse.
Ma question est très difficile de comprendre en quelques lignes de texte et il est difficile d'écrire pour vous faire comprendre (désolé si vous ne vous de vous) alors difficile de suivre à travers les commentaires et réponses aux questions pour moi à cause de tant de choses que j'ai oublié d'aller à vérifier si par hasard je vois que vous répondra aujourd'hui après 3 jours. Jugez vous-même et si nn est un trouble ressens à travers MSN ou Skype ou e-mail
Malheureusement, beaucoup préfèrent ne pas se prononcer sur les détails du projet que je vais réaliser