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

18 авг. 2010 г., 22:07:46
Просмотры: 47.4K
Голосов: 9

Дисклеймер: Я совершенно новичок в WP.

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

function starkers_widgets_init() {

  // Область 1, расположенная в верхней части сайдбара
  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>',
  ) );

  // Область 3, расположенная в футере. По умолчанию пустая.
  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>',
  ) );

  // ... дополнительные вызовы register_sidebar() ... 
}

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

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

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

Понятен ли мой вопрос? Может быть, я что-то упускаю?

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

Заранее большое спасибо.

0
Все ответы на вопрос 4
2
11

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

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

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

18 авг. 2010 г. 22:25:06
Комментарии

В случае с Starkers, sidebar-footer.php условно вызывает dynamic_sidebar() для всех соответствующих областей виджетов.

User User
18 авг. 2010 г. 22:27:41

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

John P Bloch John P Bloch
18 авг. 2010 г. 22:30:43
0
10

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

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

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

18 авг. 2010 г. 22:16:44
0

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) из вашей темы.

10 сент. 2015 г. 21:23:52
0

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

18 авг. 2010 г. 22:20:52