Come funzionano insieme register_sidebar() e get_sidebar()?

18 ago 2010, 22:07:46
Visualizzazioni: 47.4K
Voti: 9

Premessa: Sono completamente nuovo in WP.

Sto utilizzando il framework tema Starkers HTML5. Nel file functions.php vedo questo codice:

function starkers_widgets_init() {

  // Area 1, posizionata nella parte superiore della sidebar
  register_sidebar( array(
    'name' => __( 'Area Widget Primaria', 'starkers' ),
    'id' => 'primary-widget-area',
    'description' => __( 'L\'area widget primaria', 'starkers' ),
    'before_widget' => '<li>',
    'after_widget' => '</li>',
    'before_title' => '<h3>',
    'after_title' => '</h3>',
  ) );

  // Area 3, posizionata nel footer. Vuota di default.
  register_sidebar( array(
    'name' => __( 'Prima Area Widget Footer', 'starkers' ),
    'id' => 'first-footer-widget-area',
    'description' => __( 'La prima area widget del footer', 'starkers' ),
    'before_widget' => '<li>',
    'after_widget' => '</li>',
    'before_title' => '<h3>',
    'after_title' => '</h3>',
  ) );

  // ... altre chiamate a register_sidebar() ...
}

E nel file footer.php vedo questo codice:

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

Non capisco come get_sidebar() sappia come prendere quell'argomento stringa e trovare i widget appropriati che sono stati definiti da register_sidebar(). Nel frammento di functions.php che ho pubblicato sopra, non c'è alcuna menzione di "footer" eccetto nelle proprietà name, id e description. Ma mi sembrerebbe strano che get_sidebar() cercasse 'footer' all'interno di queste proprietà.

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

I motivi per cui lo chiedo sono: - Vorrei saperne di più sull'architettura di WP - Vorrei essere in grado di definire un'area widget personalizzata e sapere come renderizzarla su una pagina specifica.

Grazie mille.

0
Tutte le risposte alla domanda 4
2
11

Non mi sono mai preoccupato di get_sidebar(). Invece uso semplicemente dynamic_sidebar(). Lo chiameresti così:

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

E questo si occupa dell'intera sidebar. Niente più inclusioni di file, niente più cartelle del tema ingombre. Se voglio avere 5 sidebar diverse, non aggiunge alcun file, solo funzioni extra in functions.php.

18 ago 2010 22:25:06
Commenti

Nel caso di Starkers, sidebar-footer.php chiama condizionalmente dynamic_sidebar() per tutte le aree widget appropriate.

User User
18 ago 2010 22:27:41

Questo può essere vero, ma se conosci la versione che stai utilizzando, non c'è bisogno di chiamarla condizionalmente, e perché eseguire un include se puoi chiamare direttamente la funzione?

John P Bloch John P Bloch
18 ago 2010 22:30:43
0
10

Basta chiamare get_sidebar() dal file index.php e verrà caricato il file del tema sidebar.php.

register_sidebar(), invece, viene utilizzato per i widget, permettendo a plugin e altri componenti di aggiungere dinamicamente contenuti nel tuo file sidebar.php, a condizione che il tuo tema lo supporti.

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

18 ago 2010 22:16:44
0

get_sidebar('nome') ottiene un template di sidebar con il nome sidebar-nome.php.

All'interno di sidebar-nome.php, c'è l'HTML per la sidebar e una chiamata a dynamic_sidebar('qualche-nome-speriamo-lo-stesso'), che è dove andranno i widget.

register_sidebar(array(name=>'qualche-nome-speriamo-lo-stesso', ...)) è ciò che permette a dynamic_sidebar di funzionare.

Come puoi vedere, get_sidebar(nometemplate) è da usare con i template di sidebar. Se non ne hai bisogno, puoi chiamare direttamente dynamic_sidebar(nomesidebar) dal tuo tema.

10 set 2015 21:23:52
0

get_sidebar('footer') tenta di caricare il file sidebar-footer.php dal tema attivo. Starkers fornisce effettivamente questo file. Controlla starkers/sidebar-footer.php e tutto dovrebbe diventare chiaro.

18 ago 2010 22:20:52