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.

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?


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.


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.


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.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.