Cum funcționează împreună register_sidebar() și get_sidebar()?

18 aug. 2010, 22:07:46
Vizualizări: 47.4K
Voturi: 9

Notă: Sunt complet nou în WordPress.

Folosesc tema framework Starkers HTML5. În fișierul functions.php văd acest cod:

function starkers_widgets_init() {

  // Zona 1, localizată în partea de sus a sidebar-ului
  register_sidebar( array(
    'name' => __( 'Zonă Widget Principală', 'starkers' ),
    'id' => 'primary-widget-area',
    'description' => __( 'Zona widget principală', 'starkers' ),
    'before_widget' => '<li>',
    'after_widget' => '</li>',
    'before_title' => '<h3>',
    'after_title' => '</h3>',
  ) );

  // Zona 3, localizată în footer. Goală implicit.
  register_sidebar( array(
    'name' => __( 'Prima Zonă Widget Footer', 'starkers' ),
    'id' => 'first-footer-widget-area',
    'description' => __( 'Prima zonă widget din footer', 'starkers' ),
    'before_widget' => '<li>',
    'after_widget' => '</li>',
    'before_title' => '<h3>',
    'after_title' => '</h3>',
  ) );

  // ... mai multe apeluri către register_sidebar() ... 
}

Iar în footer.php văd acest cod:

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

Nu înțeleg cum știe get_sidebar() să folosească acel argument string pentru a găsi widget-urile potrivite care au fost definite prin register_sidebar(). În fragmentul din functions.php pe care l-am postat mai sus, nu există nicio mențiune despre "footer" cu excepția proprietăților name, id și description. Dar mi s-ar părea ciudat ca get_sidebar() să caute 'footer' în interiorul acelor proprietăți.

Are sens ce întreb? Există vreo piesă lipsă?

Motivele pentru care întreb sunt: - Aș dori să știu mai multe despre arhitectura WordPress - Aș dori să pot defini o zonă de widget personalizată și să știu cum să o redau pe o pagină specifică.

Mulțumesc mult.

0
Toate răspunsurile la întrebare 4
2
11

Niciodată nu am folosit get_sidebar(). În schimb, folosesc direct dynamic_sidebar(). Ai putea să-l apelezi astfel:

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

Și asta se ocupă de întreaga zonă de widgets. Fără fișiere incluse, fără foldere de teme aglomerate. Dacă vreau să am 5 zone de widget-uri diferite, nu se adaugă fișiere suplimentare, doar funcții în plus în functions.php.

18 aug. 2010 22:25:06
Comentarii

În cazul temei Starkers, sidebar-footer.php apelează condițional dynamic_sidebar() pentru toate zonele de widget-uri corespunzătoare.

User User
18 aug. 2010 22:27:41

Poate fi adevărat, dar dacă știi versiunea pe care o folosești, nu este nevoie să o apelezi condițional, și de ce să rulezi un include dacă poți apela funcția direct?

John P Bloch John P Bloch
18 aug. 2010 22:30:43
0
10

Pur și simplu apelezi get_sidebar() din index.php și acesta încarcă fișierul temei sidebar.php.

register_sidebar(), pe de altă parte, este utilizat pentru widget-uri, unde plugin-urile și altele asemenea doresc să adauge conținut dinamic în fișierul tău sidebar.php, dacă tema ta suportă acest lucru.

În cazul tău, există un fișier numit sidebar-footer.php în directorul temei tale?

18 aug. 2010 22:16:44
0

get_sidebar('name') obține un șablon de sidebar cu numele sidebar-name.php.

În interiorul fișierului sidebar-name.php, se găsește HTML-ul pentru sidebar și un apel către dynamic_sidebar('some-name-hopefully-the-same'), care este locul unde vor fi afișate widget-urile.

register_sidebar(array(name=>'some-name-hopefully-the-same', ...)) este funcția care permite ca dynamic_sidebar să funcționeze.

După cum puteți vedea, get_sidebar(templatename) este destinat utilizării cu șabloane de sidebar. Dacă nu aveți nevoie de acestea, puteți apela direct dynamic_sidebar(sidebarname) din tema dumneavoastră.

10 sept. 2015 21:23:52
0

get_sidebar('footer') încearcă să încarce sidebar-footer.php din tema activă. Starkers oferă acest fișier. Verifică starkers/sidebar-footer.php și lucrurile ar trebui să devină clare.

18 aug. 2010 22:20:52