web-dev-qa-db-fra.com

Commenter register_sidebar () et get_sidebar () ensemble-construit?

Disclaimer: Je suis flambant neuf pour WP.

J'utilise le thème Starkers du framework HTML5 . Dans le functions.php je 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.php je vois ce code:

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

Je ne comprends pas comment get_sidebar() sait comment prendre cet argument de chaîne et trouver les widgets appropriés définis par register_sidebar(). Dans l'extrait 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, id et description. Mais il me semblerait étrange que get_sidebar() cherche le "pied de page" dans ces propriétés.

Est-ce que cela a un sens ce que je demande? Y at-il une pièce manquante?

Les raisons que je pose sont parce que - j'aimerais en savoir plus sur l'architecture WP - j'aimerais pouvoir définir une zone de widget personnalisée et savoir comment l'afficher sur une page spécifique.

Merci beaucoup.

7
jessegavin

Vous appelez simplement get_sidebar() from index.php et le fichier de thème sidebar.php est chargé.

register_sidebar() , d'autre part, est utilisé pour les widgets où les plugins et autres veulent ajouter dynamiquement du contenu dans votre fichier sidebar.php si votre thème le supporte.

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

9
john010117

Je ne me suis jamais embêté avec get_sidebar(). Au lieu de cela, je viens d'utiliser dynamic_sidebar(). Tu l'appellerais comme ça:

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

Et cela prend soin de la barre latérale entière. Plus d'inclusions de fichiers, plus de dossiers de thèmes 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.

7
John P Bloch

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'), qui est l'endroit 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 constater, get_sidebar(templatename) doit être utilisé avec les modèles sidebar. Si vous n'en avez pas besoin, vous pouvez simplement appeler dynamic_sidebar(sidebarname) directement à partir de votre thème.

4
Gerard ONeill

get_sidebar('footer') tente de charger sidebar-footer.php à partir du thème actif. Starkers fournit ce fichier. Vérifiez starkers/sidebar-footer.php et les choses devraient devenir claires.

3
Annika Backstrom