WordPress : Comment register_sidebar() et get_sidebar() fonctionnent ensemble ?
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.
0 commentaire