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

8

Penafian: Saya baru sekali memukul WP.

Saya menggunakan tema kerangka Starkers HTML5 . Dalam functions.phpsaya 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 footer.phpsaya melihat kode ini:

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

Saya tidak mengerti bagaimana get_sidebar()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 untuk name, iddan descriptionproperti. Tetapi akan terasa aneh bagi saya yang 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.

jessegavin
sumber

Jawaban:

9

Anda cukup menelepon get_sidebar()dari index.phpdan itu memuat file tema sidebar.php.

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

Dalam kasus Anda, apakah ada file yang dipanggil sidebar-footer.phpdi direktori tema Anda?

john010117
sumber
9

Saya tidak pernah peduli dengan itu get_sidebar(). Sebaliknya 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.

John P Bloch
sumber
Dalam kasus Starkers, secara sidebar-footer.phpkondisional panggilan dynamic_sidebar()untuk semua area widget yang sesuai.
Annika Backstrom
Itu mungkin benar, tetapi jika Anda tahu versi yang Anda jalankan, tidak perlu untuk memanggilnya secara kondisional, dan mengapa menjalankan menyertakan jika Anda bisa memanggil fungsi secara langsung?
John P Bloch
5

get_sidebar('name')mendapat templat sidebar nama sidebar-name.php .

Di dalam sidebar-name.php, ada HTML untuk sidebar, dan panggilan ke dynamic_sidebar('some-name-hopefully-the-same'), di mana widget akan pergi.

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

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

Gerard ONeill
sumber
3

get_sidebar('footer')mencoba memuat sidebar-footer.phpdari tema aktif. Starkers memang menyediakan file ini. Periksa starkers/sidebar-footer.phpdan segala sesuatunya menjadi jelas.

Annika Backstrom
sumber