Comment register_sidebar () et get_sidebar () fonctionnent-ils ensemble?

8

Avertissement: 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 footer.phpje vois ce code:

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

Je ne comprends pas comment get_sidebar()sait 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 publié ci-dessus. Il n'y a aucune mention de « pied de page » , sauf pour les name, idet les descriptionpropriétés. Mais il me semblerait étrange de get_sidebar()rechercher un «pied de page» à l'intérieur de ces propriétés.

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

Les raisons que je demande sont parce que - je voudrais en savoir plus sur l'architecture WP - je voudrais pouvoir définir une zone de widget personnalisée et savoir comment la rendre sur une page spécifique.

Merci beaucoup.

jessegavin
la source

Réponses:

9

Vous appelez juste get_sidebar()de index.phpet il charge le fichier thème sidebar.php.

register_sidebar(), d'autre part, est utilisé pour les widgets où les plugins et autres souhaitent 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 appelé sidebar-footer.phpdans le répertoire de votre thème?

john010117
la source
9

Je ne m'en suis jamais soucié get_sidebar(). Au lieu de cela, je l'utilise dynamic_sidebar(). Vous l'appeleriez comme ceci:

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

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

John P Bloch
la source
Dans le cas de Starkers, sidebar-footer.phpappelle conditionnellement dynamic_sidebar()toutes les zones de widget appropriées.
Annika Backstrom
Cela peut être vrai, mais si vous connaissez la version que vous utilisez, il n'est pas nécessaire de l'appeler conditionnellement, et pourquoi exécuter une inclusion si vous pouvez simplement appeler la fonction directement?
John P Bloch du
5

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 de la barre latérale, et un appel à dynamic_sidebar('some-name-hopefully-the-same'), qui est là 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 destiné à être utilisé avec les modèles de barre latérale. Si vous n'en avez pas besoin, vous pouvez simplement appeler dynamic_sidebar(sidebarname)directement à partir de votre thème.

Gerard ONeill
la source
3

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

Annika Backstrom
la source