WordPress : Création de plusieurs crochets pour le thème

Publié par Jean-Michel le

Je travaille actuellement sur un thème et je suis arrivé au point où je souhaite également ajouter des crochets personnalisés à certains emplacements, pour permettre plus de flexibilité.

Je veux ajouter plusieurs crochets au thème. J’ai différentes sections (en-tête, contenu, barre latérale, pied de page, etc.) et à tous ces emplacements, je souhaite ajouter un beforecrochet insideet un aftercrochet.

Donc, au début, j’utilisais un bloc de code comme celui-ci pour créer plusieurs crochets pour mon thème :

/* Teaser hooks */
function _s_before_teaser() { do_action('_s_before_teaser', 'teaser'); }
function _s_inside_teaser() { do_action('_s_inside_teaser', 'teaser'); }
function _s_after_teaser() { do_action('_s_after_teaser', 'teaser'); }

/* Header hooks */
function _s_before_header() { do_action('_s_before_header', 'header'); }
function _s_inside_header() { do_action('_s_inside_header', 'header'); }
function _s_after_header() { do_action('_s_after_header','header'); }

......

/* Sidebar hooks */
function _s_before_sidebar() { do_action('_s_before_sidebar', 'sidebar'); }
function _s_inside_sidebar() { do_action('_s_inside_sidebar', 'sidebar'); }
function _s_after_sidebar() { do_action('_s_after_sidebar', 'sidebar'); }

/* Footer hooks */
function _s_before_footer() { do_action('_s_before_footer', 'footer'); }
function _s_inside_footer() { do_action('_s_inside_footer', 'footer'); }
function _s_after_footer() { do_action('_s_after_footer', 'footer'); }

Avec ce code, je peux utiliser <?php _s_before_header(); ?>dans un fichier de modèle.

Avec cette configuration, tout fonctionne comme il se doit.

Mais je trouve le code, ou du moins le gros bloc de code moche et je ne veux pas non plus utiliser de code en double (un peu).

Donc, au lieu de ce bloc de code, j’ai réécrit ce code comme suit :

function _s_create_all_hooks() {
    $sections = array(
        'header',
        'branding',
        'navigation',
        'content',
        'single',
        'sidebar',
        'footer'
    );

    foreach ($sections as $section) {
        do_action('_s_before_'.$section, $section);
        do_action('_s_inside_'.$section, $section);
        do_action('_s_after_'.$section, $section);
    }
}
add_action('wp_loaded', '_s_create_all_hooks', 10, 1 );

Cela fonctionne aussi, mais…

Avec cette méthode, je ne peux <?php _s_before_header(); ?>plus l’utiliser, car je n’ai plus aucune fonction.

Au lieu de cela, je dois maintenant l’utiliser dans les modèles<?php do_action('_s_before_header', 'header'); ?>

Mais je ne suis pas ravi de cette méthode et je trouve également les do_actionextraits de mon modèle laids.

J’ai déjà cherché sur le Web, trouvé plusieurs tutoriels de hook, mais dans tous les tutoriels et articles, un seul exemple de hook est créé. Il n’y avait pas d’article couvrant la création de plusieurs crochets à la fois.

Ma question est la suivante : quelle est la meilleure pratique pour créer plusieurs crochets à la fois ?

Solution n°1 trouvée

Ce que vous avez fait, c’est do_actionavec un seul paramètre.

File: wp-includes/plugin.php
417:  * @param string $tag     The name of the action to be executed.
418:  * @param mixed  $arg,... Optional. Additional arguments which are passed on to the
419:  *                        functions hooked to the action. Default empty.
420:  */
421: function do_action($tag, $arg = '') {

Étant donné que PHP est un langage libéral, vous pouvez également ajouter plusieurs paramètres au do_actionet utiliser ultérieurement le nombre de paramètres dans le add_action4ème argument.

function _hookgenerator( $name ) { do_action($name); }

N’hésitez pas à tester car c’est ainsi que vous pouvez le faire fonctionner. Dans cet exemple, je n’ai pas du tout utilisé d’arguments de hook. Peut-être qu’après réflexion, vous n’en aurez pas besoin non plus.

Catégories : Wordpress

Jean-Michel

Jean-Michel est en charge de la partie blog du site. Il met en place la stratégie de contenu et répond aux questions fréquentes sur Wordpress.

0 commentaire

Laisser un commentaire

Avatar placeholder

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *