it-swarm-id.com

Bagaimana cara register_sidebar () dan get_sidebar () bekerja bersama?

Penafian: Saya memukul merek baru ke WP.

Saya menggunakan Starkers HTML5 framework theme . Di functions.php saya melihat kode ini:

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

Dan di footer.php saya melihat kode ini:

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

Saya tidak mengerti bagaimana get_sidebar() tahu cara mengambil argumen string itu dan menemukan widget yang sesuai yang didefinisikan oleh register_sidebar(). Dalam cuplikan functions.php saya diposting di atas. Tidak ada penyebutan "footer" kecuali properti name, id dan description. Tetapi akan terasa aneh bagi saya bahwa get_sidebar() akan mencari 'footer' di dalam properti itu.

Apakah ini masuk akal apa yang saya minta? Apakah ada bagian yang hilang?

Alasan saya bertanya adalah karena - Saya ingin tahu lebih banyak tentang arsitektur WP - Saya ingin dapat mendefinisikan area widget khusus dan tahu bagaimana merendernya di halaman tertentu.

Terima kasih banyak.

7
jessegavin

Anda cukup memanggil get_sidebar() dari index.php dan memuat file tema sidebar.php.

register_sidebar() , di sisi lain, digunakan untuk widget tempat plugin dan semacamnya ingin secara dinamis menambahkan konten dalam file sidebar.php Anda jika tema Anda mendukungnya.

Dalam kasus Anda, apakah ada file bernama sidebar-footer.php di direktori tema Anda?

9
john010117

Saya tidak pernah terganggu dengan get_sidebar(). Sebagai gantinya saya hanya menggunakan dynamic_sidebar(). Anda akan menyebutnya seperti ini:

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

Dan itu menangani seluruh sidebar. Tidak ada lagi inklusi file, tidak ada lagi folder tema yang berantakan. Jika saya ingin memiliki 5 sidebar yang berbeda, itu tidak menambahkan file apa pun, hanya fungsi tambahan di functions.php.

7
John P Bloch

get_sidebar('name') mendapatkan templat sidebar dari nama sidebar-name.php.

Di dalam sidebar-name.php, ada HTML untuk sidebar, dan panggilan ke dynamic_sidebar('some-name-hopefully-the-same'), yang merupakan tujuan widget.

register_sidebar(array(name=>'some-name-hopefully-the-same', ...)) adalah apa yang memungkinkan dynamic_sidebar berfungsi.

Seperti yang Anda lihat, get_sidebar(templatename) digunakan untuk sidebar-templates. Jika Anda tidak membutuhkannya, Anda dapat memanggil dynamic_sidebar(sidebarname) langsung dari tema Anda.

4
Gerard ONeill

get_sidebar('footer') mencoba memuat sidebar-footer.php dari tema aktif. Starkers memang menyediakan file ini. Periksa starkers/sidebar-footer.php dan semuanya akan menjadi jelas.

3
Annika Backstrom