Как register_sidebar () и get_sidebar () работают вместе?


8

Отказ от ответственности: я совершенно новый для WP.

Я использую тему фреймворка Starkers HTML5 . В этом functions.phpя вижу этот код:

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

И footer.phpя вижу этот код:

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

Я не понимаю, как get_sidebar()знает, как принять этот строковый аргумент и найти соответствующие виджеты, которые были определены register_sidebar(). Во фрагменте functions.php я разместил выше. Существует нет упоминания о «сноске» за исключением name, idи descriptionсвойств. Но мне показалось бы странным, get_sidebar()что поиск «нижний колонтитул» внутри этих свойств.

Имеет ли это смысл того, что я спрашиваю? Есть какой-то недостающий кусок?

Причины, по которым я спрашиваю, состоят в том, что - я хотел бы узнать больше об архитектуре WP - я хотел бы иметь возможность определить пользовательскую область виджета и знать, как ее отобразить на определенной странице.

Благодаря тонну.

Ответы:


9

Вы просто позвонить get_sidebar()из index.phpи он загружает файл темы sidebar.php.

register_sidebar()с другой стороны, используется для виджетов, где плагины и тому подобное хотят динамически добавлять контент в ваш sidebar.phpфайл, если ваша тема поддерживает его.

В вашем случае, есть ли файл, который называется sidebar-footer.phpв каталоге вашей темы?


9

Я никогда не беспокоился get_sidebar(). Вместо этого я просто использую dynamic_sidebar(). Вы бы назвали это так:

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

И это заботится о всей боковой панели. Нет больше включений файлов, больше не загроможденные папки темы. Если я хочу иметь 5 разных боковых панелей, он не добавляет никаких файлов, только дополнительные функции functions.php.


В случае Starkers, sidebar-footer.phpусловно вызывает dynamic_sidebar()все соответствующие области виджетов.
Анника Бэкстрем

Это может быть правдой, но если вы знаете версию, которую вы используете, нет необходимости вызывать ее условно, и зачем запускать include, если вы можете просто вызвать функцию напрямую?
Джон П Блох

5

get_sidebar('name')получает шаблон боковой панели имени sidebar-name.php .

В sidebar-name.php есть HTML-код для боковой панели и вызов dynamic_sidebar('some-name-hopefully-the-same'), куда будут отправляться виджеты.

register_sidebar(array(name=>'some-name-hopefully-the-same', ...)) это то, что позволяет dynamic_sidebar работать.

Как видите, get_sidebar(templatename)предназначен для использования с боковыми шаблонами. Если они вам не нужны, вы можете просто позвонить dynamic_sidebar(sidebarname)прямо из вашей темы.


3

get_sidebar('footer')пытается загрузить sidebar-footer.phpиз активной темы. Starkers предоставляет этот файл. Проверьте starkers/sidebar-footer.phpи все должно стать ясно.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.