WordPress : Comment déterminer dans quelle zone de barre latérale enregistrée un widget personnalisé est chargé

Publié par Jean-Michel le

J’ai un widget personnalisé auquel je souhaite appliquer une logique conditionnelle, en fonction de l’ID enregistré de sa barre latérale parent.

Par exemple, mon thème a 6 zones de widgets de barre latérale enregistrées.

J’ai un widget personnalisé qui peut être chargé dans l’une de ces 6 zones de widgets de la barre latérale.

Existe-t-il un moyen de scripter le code du widget ci-dessous afin de déterminer si le widget est chargé dans une ou plusieurs des zones de widget de la barre latérale enregistrées ?

Par exemple, j’enregistre les zones de widget de ma barre latérale comme suit :

register_sidebar(array(
    'name' => 'Footer Area One',
    'id' => 'home-footer-widget',
    'description' => __( 'Appears just above the main footer area. Spans across the entire width of page'),
    'before_widget' => '<div class="footer-pre-home %2$s">',
    'after_widget' => '</div>',
    'before_title' => '<h4>',
    'after_title' => '</h4>',
));

register_sidebar(array(
    'name' => 'Footer Area Two',
    'id' => 'footer-two',
    'description' => __( 'Appears just above the main footer area. Spans across the entire width of page'),
    'before_widget' => '<div class="footer-two %2$s">',
    'after_widget' => '</div>',
    'before_title' => '<h4>',
    'after_title' => '</h4>',
));

Et j’ai un widget personnalisé qui a ce code :

function widget( $args, $instance ) {
    extract($args);
    $title = apply_filters( 'widget_title', empty($instance['title']) ? '' : $instance['title'], $instance );
    $text = apply_filters( 'widget_text', $instance['text'], $instance );
    $hide_title = isset( $instance['hide_title'] ) ? $instance['hide_title'] : false;
    $filter = isset( $instance['filter'] ) ? $instance['filter'] : false;
    echo $before_widget;
    if ( $title && !$hide_title )echo $before_title . $title . $after_title;
    if ( $text ) echo $filter ? wpautop($text) : $text;
    echo $after_widget;
}

Et je veux placer du code dans la fonction widget() qui détermine si le widget se trouve dans l’un des deux widgets de barre latérale enregistrés nommés ci-dessus. S’il se trouve dans l’une de ces deux barres latérales nommées, je ne ferai pas écho au code du widget avant/après dans ce cas.

Solution n°1 trouvée

L’information que vous voulez est dans le $argsparamètre.

var_dump($args); // inside your widget method

Regardez les éléments de tableau ‘name’ et ‘id’.

Votre code devrait ressembler à ceci :

function widget( $args, $instance ) {
    extract($args);
    $title = apply_filters( 'widget_title', empty($instance['title']) ? '' : $instance['title'], $instance );
    $text = apply_filters( 'widget_text', $instance['text'], $instance );
    $hide_title = isset( $instance['hide_title'] ) ? $instance['hide_title'] : false;
    $filter = isset( $instance['filter'] ) ? $instance['filter'] : false;
    if ('home-footer-widget' != $args['id'] && 'footer-two' != $args['id']) echo $before_widget;
    if ( $title && !$hide_title )echo $before_title . $title . $after_title;
    if ( $text ) echo $filter ? wpautop($text) : $text;
    if ('home-footer-widget' != $args['id'] && 'footer-two' != $args['id']) echo $after_widget;
}

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 *