WordPress : Comment register_sidebar() et get_sidebar() fonctionnent ensemble ?

Publié par Jean-Michel le

Avis de non-responsabilité : Je suis tout nouveau sur WP.

J’utilise le thème du framework Starkers HTML5. Dans le functions.phpje vois ce code:

function starkers_widgets_init() {

  // Area 1, located at the top of the sidebar.
  register_sidebar( array(
    'name' => __( 'Primary Widget Area', 'starkers' ),
    'id' => 'primary-widget-area',
    'description' => __( 'The primary widget area', 'starkers' ),
    'before_widget' => '<li>',
    'after_widget' => '</li>',
    'before_title' => '<h3>',
    'after_title' => '</h3>',
  ) );

  // Area 3, located in the footer. Empty by default.
  register_sidebar( array(
    'name' => __( 'First Footer Widget Area', 'starkers' ),
    'id' => 'first-footer-widget-area',
    'description' => __( 'The first footer widget area', 'starkers' ),
    'before_widget' => '<li>',
    'after_widget' => '</li>',
    'before_title' => '<h3>',
    'after_title' => '</h3>',
  ) );

  // ... more calls to register_sidebar() ... 
}

Et dans footer.phpje vois ce code:

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

Je ne comprends pas comment get_sidebar()savoir comment prendre cet argument de chaîne et trouver les widgets appropriés qui ont été définis par register_sidebar(). Dans l’extrait de functions.php que j’ai posté ci-dessus. Il n’y a aucune mention de « pied de page » à l’exception des propriétés name, idet description. Mais il me semblerait étrange que get_sidebar()l’on recherche ‘footer’ dans ces propriétés.

Est-ce logique ce que je demande? Y a-t-il une pièce manquante?

Les raisons pour lesquelles je pose la question sont que – j’aimerais en savoir plus sur l’architecture WP – j’aimerais pouvoir définir une zone de widget personnalisée et savoir comment la rendre sur une page spécifique.

Merci beaucoup.

Solution n°1 trouvée

Vous venez d’appeler get_sidebar()depuis index.phpet il charge le fichier de thème sidebar.php.

register_sidebar(), d’autre part, est utilisé pour les widgets où les plugins et autres veulent ajouter dynamiquement du contenu dans votre sidebar.phpfichier si votre thème le prend en charge.

Dans votre cas, y a-t-il un fichier nommé sidebar-footer.phpdans le répertoire de votre thème ?

Solution n°2 trouvée

Je n’ai jamais pris la peine de get_sidebar(). Au lieu de cela, j’utilise simplement dynamic_sidebar(). Vous l’appelleriez ainsi :

dynamic_sidebar('first-footer-widget-area');

Et cela prend soin de toute la barre latérale. Plus d’inclusions de fichiers, plus de dossiers thématiques encombrés. Si je veux avoir 5 barres latérales différentes, cela n’ajoute aucun fichier, seulement des fonctions supplémentaires dans functions.php.

Solution n°3 trouvée

get_sidebar('name')obtient un modèle de barre latérale du nom sidebar-name.php
.

Dans sidebar-name.php, il y a le code HTML pour la barre latérale et un appel à dynamic_sidebar('some-name-hopefully-the-same'), où iront les widgets.

register_sidebar(array(name=>'some-name-hopefully-the-same', ...))est ce qui permet à dynamic_sidebar de fonctionner.

Comme vous pouvez le voir, get_sidebar(templatename)est à utiliser avec les modèles de barre latérale. Si vous n’en avez pas besoin, vous pouvez simplement appeler dynamic_sidebar(sidebarname)directement depuis votre thème.

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 *