Plugin Templating dans WordPress

Quand il s’agit de créer un type de message personnalisé dans un plugin WordPress, le problème est toujours le même: vous devez créer un single- [cpt_slug] .php fichier dans votre dossier de thème si vous ne voulez pas utiliser la valeur par défaut single.php fichier de votre thème.

Dans cet article, j'aimerais aborder deux aspects de l'utilisation de modèles personnalisés. La première étape consiste à montrer que nous pouvons utiliser un fichier personnalisé contenu directement dans le plugin au lieu de charger le fichier par défaut. single.php, et le second est de savoir comment créer votre propre fichier personnalisé dans votre dossier de thèmes.

De nombreux plugins, comme Easy Digital Downloads ou Shopp, utilisent cette méthode: le plugin vérifie si vous définissez un modèle personnalisé dans votre dossier de thèmes. Si c'est le cas, le fichier est chargé, sinon le fichier de modèle de plug-in par défaut est chargé. Dans les deux cas, le thème par défaut single.php le fichier n'est pas chargé.


Définir le plugin et sa structure

La toute première étape consiste à créer un plugin, appelons-le "Sélecteur de modèles". Créer un "modèle-sélecteur"dossier sous / wp-content / plugins /, avec la structure suivante:

La structure du plugin

Puis ouvrez le fichier principal template-choice.php et placez le code d'en-tête de plugin suivant:

/ * Nom du plugin: CPT template Chooser Plugin URL: http://wp.tutsplus.com/ Description: Charge un fichier de modèle personnalisé à la place du fichier single.php par défaut. Version: 0.1 Auteur: Remi Corson URI de l'auteur: http: // wp .tutsplus.com / * /

Définir les constantes de plugin

Plus tard dans le plugin, nous devrons récupérer facilement l'URL du plugin et son chemin. C'est pourquoi nous devons définir quelques constantes:

 / * | --------------------------------------------------- --------------------------- | CONSTANTES | ---------------------------------------------------- -------------------------- * / if (! defini ('RC_TC_BASE_FILE')) define ('RC_TC_BASE_FILE', __FILE__); if (! defini ('RC_TC_BASE_DIR')) define ('RC_TC_BASE_DIR', nom de répertoire (RC_TC_BASE_FILE)); if (!fined ('RC_TC_PLUGIN_URL')) define ('RC_TC_PLUGIN_URL', plugin_dir_url (__FILE__));

Enregistrer un type de message personnalisé

Pour aller plus loin, nous devons créer un nouveau type de message personnalisé, créons un "Témoignage"CPT, avec quelques supports et fonctionnalités très basiques. Le but de ce message n'étant pas d'apprendre à créer un type de message personnalisé, je vais utiliser un code assez simple divisé en 3 parties: les étiquettes de type de message personnalisé, les supports et les arguments de type post personnalisés. Tout ce qui est intégré dans une seule fonction:

 / * | --------------------------------------------------- --------------------------- | DÉFINIR LE TYPE DE POSTE PERSONNALISÉ | ---------------------------------------------------- ------------------------------ * / / ** * Configuration du témoignage Type de message personnalisé * * @since 1.0 * / function rc_tc_setup_post_types () // Libellés de types de messages personnalisés $ labels = array ('name' => esc_html __ ('Témoignages', 'rc_tc'), 'nom_s singulier' => esc_html __ ('Testimonial', 'rc_tc'), 'nom_s singulier' => esc_html __ ('Témoignage', 'rc_tc'), 'add_new' = > esc_html __ ('Add New', 'rc_tc'), 'add_new_item' => esc_html __ ('Add New Testimonial', 'rc_tc'), 'edit_item' => esc_html __ ('Éditer le témoignage', 'rc_tc'), 'new_item '=> esc_html __ (' Nouveau témoignage ',' rc_tc '),' view_item '=> esc_html __ (' Voir le témoignage ',' rc_tc '),' search_items '=> esc_html __ (' Recherche Témoignage ',' rc_tc '),' not_found '=> esc_html __ (' Aucun témoignage trouvé ',' rc_tc '),' not_found_in_trash '=> esc_html __ (' Aucun témoignage trouvé dans la corbeille ',' rc_tc '),' parent_item_colon '=> "); // Supports $ prend en charge = array ('title', 'editor'); // Type de publication personnalisé Prend en charge $ args = array ('labels' => $ labels, 'public' => true, 'public_queryable' => true, 'show_ui' => true, 'query_var' => true, 'can_export' => true, 'rewrite' => array ('slug' => 'témoignages', 'with_front' => true ), 'skill_type' => 'post', 'hierarchical' => false, 'menu_position' => 25, 'supports' => $ supports, 'menu_icon' => RC_TC_PLUGIN_URL. '/includes/images/testimonials_icon.png', // vous pouvez définir votre propre icône ici); // Enfin, enregistrez le type de message personnalisé "testimonial" register_post_type ('testimonial', $ args);  add_action ('init', 'rc_tc_setup_post_types');

Ne pas utiliser la valeur par défaut single.php Fichier

Maintenant que notre type de message personnalisé est enregistré, nous devons créer une fonction qui indiquera à WordPress ne pas utiliser la valeur par défaut single.php du thème.

Parce que oui par défaut lors de l’affichage d’un type de publication personnalisé sur le frontal, WordPress vérifie si un fichier appelé single-testimonial.php existe et va le charger. Sinon, il cherchera le single.php. Mais nous ne voulons en utiliser aucun.

Nous voulons que WordPress charge un fichier personnalisé à partir du plugin. Pour ce faire, nous devons ajouter une nouvelle fonction au "template_include"filtre. Dans cette fonction, l’objectif est de vérifier le type de message et d’agir en conséquence:

 / * | --------------------------------------------------- --------------------------- | FILTRES | ---------------------------------------------------- -------------------------- * / add_filter ('template_include', 'rc_tc_template_chooser'); / * | --------------------------------------------------- --------------------------- | FONCTIONS PLUGIN | ----------------------------------------------- --------------------------- * / / ** * Retourne le fichier de modèle * * @since 1.0 * / function rc_tc_template_chooser ($ template)  // ID de publication $ post_id = get_the_ID (); // Pour tous les autres CPT if (get_post_type ($ post_id)! = 'Testimonial') return $ template;  // Sinon, utilisez un modèle personnalisé if (is_single ()) return rc_tc_get_template_hierarchy ('single'); 

Charger le bon modèle

Comme vous pouvez le constater, à la ligne 33, nous appelons une nouvelle fonction rc_tc_get_template_hierarchy (). C’est la fonction qui vérifiera si WordPress doit charger le fichier personnalisé à partir du plugin ou le modèle à partir du dossier du thème..

Veuillez noter que lorsque je parle du "modèle du dossier du thème", je parle d’un fichier personnalisé chargé à la place du single.php.

Supposons que vous ne vouliez pas charger le modèle inclus dans le plug-in, mais créer votre propre modèle personnalisé. Tout ce que vous avez à faire est de créer un nouveau dossier dans le dossier du thème, nommez-le "plugin_template"et dans ce dossier créer un single.php fichier. Ce sera votre nouvelle valeur par défaut single.php chargé uniquement pour les témoignages affichés sur l'interface.

es-tu encore avec moi? Ok, alors créons la fonction:

 / ** * Récupère le modèle personnalisé si est défini * * @since 1.0 * / function rc_tc_get_template_hierarchy ($ template) // Récupère le modèle slug $ template_slug = rtrim ($ template, '.php'); $ template = $ template_slug. '.php'; // Vérifie si un modèle personnalisé existe dans le dossier du thème. Sinon, chargez le fichier de modèle de plugin if ($ theme_file = Locate_template (array ('plugin_template /'. $ Template))) $ file = $ theme_file;  else $ file = RC_TC_BASE_DIR. '/ includes / templates /'. $ template;  return apply_filters ('rc_repl_template_'. $ template, $ file);  / * | -------------------------------------------------- ---------------------------- | FILTRES | ---------------------------------------------------- -------------------------- * / add_filter ('template_include', 'rc_tc_template_chooser');

Le modèle par défaut du plugin

Créez maintenant un nouveau témoignage dans l'administration. Puis ouvert includes / templates / single.php puis copiez et collez ce code simple:

  nous sommes dans le fichier personnalisé du plugin 

Si vous visualisez le témoignage sur le front-end, vous devriez voir le "nous sommes dans le fichier personnalisé du plugin". C'est ce que nous voulions. Mais si le fichier de modèle de plug-in ne correspond pas à vos besoins ou si vous souhaitez simplement créer un design plus personnel, vous pouvez créer un fichier dans votre dossier de thèmes..


Le modèle de thème par défaut

Pour créer un modèle personnalisé qui n’utilise pas celui par défaut du plug-in, vous pouvez créer un nouveau dossier appelé "plugin_templates"dans votre dossier de thème. Créez un nouveau fichier appelé single.php et placez ce code:

  nous sommes dans le fichier personnalisé de thème 

Conclusion

Alors qu'avons-nous fait exactement? Nous avons créé un plugin qui enregistre un type de message personnalisé "Témoignage". Nous avons réussi à charger un fichier personnalisé stocké dans le dossier du plugin au lieu du fichier par défaut. single.php ou single-testimonial.php fichiers du dossier de thème. Nous avons également réussi à charger un fichier personnalisé à la place du dossier de thème situé sous "plugin_templates".

Pourquoi est-ce gentil? Parce que lorsque vous créez votre propre plugin, vous pouvez fournir un modèle par défaut pour afficher le type de publication personnalisé afin que vous laissiez le choix à l'utilisateur final d'utiliser ou non leur propre modèle..