web-dev-qa-db-fra.com

Afficher un widget barre latérale dynamique spécifique sur une page spécifique

Un site wordpress m'a été remis à mi-parcours. Cela fait au moins un an que je n'ai pas utilisé Wordpress pour la dernière fois et je trouve beaucoup de choses différentes. La façon dont je suis habitué à afficher différents contenus sur différentes pages consiste à créer des modèles de page pour chaque page nécessitant un contenu unique.

J'essaie d'afficher une barre latérale différente sur une page particulière que sur le reste du site. Ce que j'aurais fait il y a un an est de créer un modèle de page pour cette page et de créer un nouveau fichier de barre latérale, puis d'inclure le fichier de barre latérale dans le modèle de page. J'ai trouvé que ça ne marche pas. Les principaux coupables que je peux voir sont loop.php & loop-page.php, qui n'existaient pas dans le thème simplifié que j'utilisais généralement lors de la création d'un site il y a longtemps. Cependant, il semble que quiconque a mis la main sur cette chose avant moi a copié le thème "vingt-dix" et l'a modifié sous un nouveau nom.

J'ai enregistré une nouvelle barre latérale dynamique dans le functions.php du thème et je peux le voir dans la section Widgets du tableau de bord et y ajouter des widgets.

Pour l'amour de Dieu, je ne parviens pas à l'afficher sur la page que je souhaite. J'ai essayé ce qui suit:

1.) A partir de la page un modèle personnalisé template_news.php et placez le texte suivant où la barre latérale devrait être appelée:

include ('sidebar-news.php');

Le fichier sidebar-news.php contenant le code que j'ai copié à partir de sidebar.php avec l'identifiant de la barre latérale "Actualités" que j'ai énuméré dans functions.php:

<?php if ( is_active_sidebar( 'sidebar-news' ) ) : ?>

<div id="secondary" class="widget-area" role="complementary">
    <ul class="xoxo">
        <?php dynamic_sidebar( 'sidebar-news' ); ?>
    </ul>
</div>

<?php endif; ?>

Le modèle de page est appliqué à la page correcte.

2.) Entré dans page.php et changé:

<?php get_sidebar(); ?>

à:

<?php 

if(is_page('18')) {
   include ('sidebar-news.php');
}
else {              
   get_sidebar(); 
} ?>

J'ai également vérifié à plusieurs reprises que l'ID de la page est correct et essayé d'utiliser le nom du slug à la place, mais en vain.

3.) Essayé le précédent dans loop-page.php

4.) Placez l'instruction conditionnelle suivante dans sidebar.php:

<?php
if ( is_active_sidebar( 'sidebar-news' ) && is_page('18') ) : ?>
    <div id="sidebarnews" class="widget-area" role="complementary">
    <ul class="xoxo">
    <?php dynamic_sidebar( 'sidebar-news' ); ?>
    </ul>
    </div>
<?php endif; ?>

Aussi, après avoir fait des recherches et découvert que la bonne façon d'étendre ou de modifier les fonctionnalités d'un thème est de créer un thème pour enfants, j'ai essayé de le faire, mais certaines choses se sont cassées et je n'ai pas le temps de le faire. essayez de réparer.

J'ai constaté que le nom par défaut 'sidebar.php` est appelé et affiché sur la page. Cependant, même si mon instruction conditionnelle avec l'ID de la page est présente, elle n'affiche pas les widgets de la barre latérale personnalisée.

Je n'arrive pas non plus à trouver comment la barre latérale par défaut est appelée sur la page, car la suppression de get_sidebar(); sur mon modèle personnalisé template_news.php, page.php ou loop-page.php ne semble rien faire.

S'il vous plaît quelqu'un peut me laisser sur la façon d'ajouter cette barre latérale à la page.

1
biggles

Je pense que ce dont vous pourriez avoir besoin est simplement d’exécuter register_sidebar() dans un hook 'widgets_init'. Le thème TwentyTen contient des exemples pour register_sidebar() dans son fichier functions.php, mais voici à quoi il pourrait ressembler:

add_action( 'widgets_init', 'twentyten_widgets_init' );
function twentyten_widgets_init() {
  register_sidebar( array(
    'name' => __( 'News Sidebar', 'yoursite' ),
    'id' => 'sidebar-news',
    'description' => __( 'The News Sidebar Area', 'yoursite' ),
    'before_widget' => '<li id="%1$s" class="widget-container %2$s">',
    'after_widget' => '</li>',
    'before_title' => '<h3 class="widget-title">',
    'after_title' => '</h3>',
  ));

  /*
   * THE REST OF THE SIDEBAR REGISTRATION CODE FROM twentyten_widgets_init() GOES HERE
   */
}

De plus, dans votre modèle de page template_news.php, utilisez le code suivant pour appeler votre barre latérale, ce qui chargera le fichier sidebar-news.php que vous avez créé ci-dessus:

<?php get_sidebar( 'news' ); ?> 

Vous ne devriez avoir besoin d'aucune des choses que vous avez essayées, et certainement pas de déclarations include.

2
MikeSchinkel

Pour afficher un widget uniquement sur des pages spécifiques où toutes vos pages ont la même barre latérale, vous pouvez utiliser l'un de ces plugins:

Afficher les widgets

Il suffit de masquer les widgets sur des pages spécifiques. Ajoute des cases à cocher à chaque widget pour les afficher ou les masquer sur chaque page du site.

Logique du widget

Widget Logic vous permet de contrôler sur quelles pages les widgets apparaissent à l'aide des balises conditionnelles de WP. Il ajoute également un filtre 'widget_content'.

1
Sébastien Méric