Отказ от ответственности: я новичок в 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 — я хотел бы иметь возможность определять пользовательскую область виджетов и знать, как отображать ее на определенной странице.
Благодаря тонну.
Вы просто звоните
get_sidebar()
изindex.php
, и он загружает файл темыsidebar.php
.register_sidebar()
, с другой стороны, используется для виджетов, где плагины и тому подобное хотят динамически добавлять контент в вашsidebar.php
файл, если ваша тема поддерживает это.В вашем случае есть ли файл с именем
sidebar-footer.php
в каталоге вашей темы?В случае Starkers
sidebar-footer.php
условно вызываетdynamic_sidebar()
все соответствующие области виджетов.Это может быть правдой, но если вы знаете версию, которую используете, нет необходимости вызывать ее условно, и зачем запускать включение, если вы можете просто вызвать функцию напрямую?
Я никогда не заморачивался
get_sidebar()
. Вместо этого я просто используюdynamic_sidebar()
. Вы бы назвали это так:И это заботится обо всей боковой панели. Больше никаких включений файлов, никаких загроможденных папок тем. Если я хочу иметь 5 разных боковых панелей, он не добавляет никаких файлов, только дополнительные функции в формате
functions.php
.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)
прямо из своей темы.get_sidebar('footer')
попытки загрузкиsidebar-footer.php
из активной темы. Старкерс предоставляет этот файл. Проверьтеstarkers/sidebar-footer.php
, и все должно стать ясно.