Làm thế nào để register_sidebar () và get_sidebar () hoạt động cùng nhau?


8

Tuyên bố miễn trừ trách nhiệm: Tôi là một thương hiệu mới đối với WP.

Tôi đang sử dụng chủ đề khung Starkers HTML5 . Trong phần functions.phptôi thấy mã này:

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

Và trong footer.phptôi thấy mã này:

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

Tôi không hiểu làm thế nào để get_sidebar()biết cách lấy đối số chuỗi đó và tìm các widget thích hợp được xác định bởi register_sidebar(). Trong đoạn chức năng.php tôi đã đăng ở trên. Không có bất kỳ đề cập đến "chân" ngoại trừ name, iddescriptiontài sản. Nhưng nó có vẻ kỳ lạ đối với tôi rằng get_sidebar()sẽ tìm kiếm "chân trang" bên trong các thuộc tính đó.

Điều này có ý nghĩa những gì tôi đang hỏi? Có một số phần còn thiếu?

Những lý do tôi hỏi là vì - tôi muốn biết thêm về kiến ​​trúc WP - tôi muốn có thể xác định một khu vực widget tùy chỉnh và biết cách hiển thị nó trên một trang cụ thể.

Cảm ơn rất nhiều.

Câu trả lời:


9

Bạn chỉ cần gọi get_sidebar()từ index.phpvà nó tải tập tin chủ đề sidebar.php.

register_sidebar()mặt khác, được sử dụng cho các tiện ích trong đó các plugin và như vậy muốn tự động thêm nội dung trong sidebar.phptệp của bạn nếu chủ đề của bạn hỗ trợ nó.

Trong trường hợp của bạn, có một tệp được gọi sidebar-footer.phptrong thư mục chủ đề của bạn không?


9

Tôi chưa bao giờ bận tâm get_sidebar(). Thay vào đó tôi chỉ sử dụng dynamic_sidebar(). Bạn sẽ gọi nó như thế này:

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

Và điều đó chăm sóc toàn bộ thanh bên. Không bao gồm tập tin bao gồm, không có thư mục chủ đề lộn xộn. Nếu tôi muốn có 5 thanh bên khác nhau, nó không thêm bất kỳ tệp nào, chỉ có các chức năng bổ sung functions.php.


Trong trường hợp của Starkers, có sidebar-footer.phpđiều kiện gọi dynamic_sidebar()cho tất cả các khu vực phụ tùng thích hợp.
Annika Backstrom

Điều đó có thể đúng, nhưng nếu bạn biết phiên bản bạn đang chạy, không cần phải gọi nó một cách có điều kiện, và tại sao chạy một bao gồm nếu bạn chỉ có thể gọi trực tiếp chức năng?
John P Bloch

5

get_sidebar('name')được một mẫu sidebar của tên sidebar-name.php .

Trong sidebar-name.php, có HTML cho thanh bên và một cuộc gọi đến dynamic_sidebar('some-name-hopefully-the-same'), đó là nơi các widget sẽ đi.

register_sidebar(array(name=>'some-name-hopefully-the-same', ...)) là những gì cho phép Dynamic_sidebar hoạt động.

Như bạn có thể thấy, get_sidebar(templatename)được sử dụng với các mẫu thanh bên. Nếu bạn không có nhu cầu với họ, bạn chỉ có thể gọi dynamic_sidebar(sidebarname)trực tiếp từ chủ đề của bạn.


3

get_sidebar('footer')cố gắng tải sidebar-footer.phptừ chủ đề đang hoạt động. Starkers không cung cấp tập tin này. Kiểm tra starkers/sidebar-footer.phpvà mọi thứ sẽ trở nên rõ ràng.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.