In che modo register_sidebar () e get_sidebar () lavorano insieme?


8

Dichiarazione di non responsabilità: sono una novità assoluta per WP.

Sto usando il tema del framework HTML5 di Starkers . Nel functions.phpvedo questo codice:

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() ... 
}

E footer.phpvedo questo codice:

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

Non capisco come get_sidebar()sappia prendere quell'argomento stringa e trovare i widget appropriati che sono stati definiti da register_sidebar(). Nel frammento Functions.php che ho pubblicato sopra. Non vi è alcuna menzione di "piè di pagina" ad eccezione di name, ide descriptionproprietà. Ma mi sembrerebbe strano get_sidebar()cercare un "piè di pagina" all'interno di quelle proprietà.

Ha senso quello che sto chiedendo? C'è qualche pezzo mancante?

Le ragioni che sto chiedendo sono perché - vorrei saperne di più sull'architettura WP - vorrei essere in grado di definire un'area del widget personalizzata e sapere come renderizzarla su una pagina specifica.

Grazie mille.

Risposte:


9

Basta chiamare get_sidebar()da index.phpe carica il file del tema sidebar.php.

register_sidebar(), d'altra parte, viene utilizzato per i widget in cui plug-in e tali desiderano aggiungere dinamicamente contenuto nel sidebar.phpfile se il tema lo supporta.

Nel tuo caso, c'è un file chiamato sidebar-footer.phpnella directory del tuo tema?


9

Non mi sono mai preso il disturbo get_sidebar(). Invece lo uso e basta dynamic_sidebar(). Lo chiameresti così:

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

E questo si occupa dell'intera barra laterale. Niente più inclusioni di file, niente più cartelle di temi ingombra. Se voglio avere 5 barre laterali diverse, non aggiunge alcun file, ma solo funzioni extra functions.php.


Nel caso di Starker, sidebar-footer.phprichiede condizionalmente dynamic_sidebar()tutte le aree widget appropriate.
Annika Backstrom,

Questo può essere vero, ma se conosci la versione in esecuzione, non è necessario chiamarla in modo condizionale e perché eseguire un'inclusione se puoi semplicemente chiamare direttamente la funzione?
John P Bloch,

5

get_sidebar('name')ottiene un modello della barra laterale del nome sidebar-name.php .

All'interno di sidebar-name.php, c'è l'HTML per la barra laterale e una chiamata a dynamic_sidebar('some-name-hopefully-the-same'), che è dove andranno i widget.

register_sidebar(array(name=>'some-name-hopefully-the-same', ...)) è ciò che consente a dynamic_sidebar di funzionare.

Come puoi vedere, get_sidebar(templatename)è da utilizzare con i modelli della barra laterale. Se non ne hai bisogno, puoi semplicemente chiamare dynamic_sidebar(sidebarname)direttamente dal tuo tema.


3

get_sidebar('footer')tenta di caricare sidebar-footer.phpdal tema attivo. Starkers fornisce questo file. Controlla starkers/sidebar-footer.phpe le cose dovrebbero diventare chiare.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.