Виджеты не отображаются в настройщике темы
Я разрабатываю новую тему и использую несколько боковых панелей в этой теме. Все работает нормально, но виджеты не отображаются в разделе настройщика темы. Все виджеты прекрасно работают в разделе "Внешний вид → Виджеты", но не в "Внешний вид → Настроить". Я использую WordPress 3.9.1.
Вот как я объявил их в functions.php
if(function_exists('register_sidebar'))
{
// Регистрация первой области виджетов
register_sidebar ( array (
'name' => 'Область виджетов 1',
'id' => 'widget-1',
'description' => 'Область виджетов 1.',
'before_widget' => '<div id="%2$s" class="widget %2$s">',
'after_widget' => '</div>',
'before_title' => '<h3>',
'after_title' => '</h3>' ,
) );
// Регистрация второй области виджетов
register_sidebar ( array (
'name' => 'Область виджетов 2',
'id' => 'widget-2',
'description' => 'Область виджетов 2.',
'before_widget' => '<div id="%2$s" class="widget %2$s">',
'after_widget' => '</div>',
'before_title' => '<h3>',
'after_title' => '</h3>' ,
) );
// Регистрация третьей области виджетов
register_sidebar ( array (
'name' => 'Область виджетов 3',
'id' => 'widget-3',
'description' => 'Область виджетов 3.',
'before_widget' => '<div id="%2$s" class="widget %2$s">',
'after_widget' => '</div>',
'before_title' => '<h3>',
'after_title' => '</h3>' ,
) );
// Регистрация четвертой области виджетов
register_sidebar ( array (
'name' => 'Область виджетов 4',
'id' => 'widget-4',
'description' => 'Область виджетов 4.',
'before_widget' => '<div id="%2$s" class="widget %2$s">',
'after_widget' => '</div>',
'before_title' => '<h3>',
'after_title' => '</h3>' ,
) );
}
А вот как я их вызываю.
<?php
if (! function_exists ( 'dynamic_sidebar' ) || ! dynamic_sidebar ( 'Область виджетов 1' )) :
endif;?>
Все отображается нормально, когда у меня есть одна область виджетов, но как только я добавляю несколько, они исчезают из настройщика.

Виджеты ОТОБРАЖАЮТСЯ в Настройщике, но только если вы находитесь на странице, где они используются.
Например, у меня есть сайдбар для страницы Архива. Когда я нахожусь в Настройщике и на главной странице, этот сайдбар не отображается. Но если перейти на страницу архива, оставаясь в Настройщике, он появляется в области виджетов.

Это настоящее решение вашей проблемы:
Всё, что нужно сделать — это убедиться, что вы добавили эту функцию в подвал (футер) перед закрывающим тегом </body>
:
<?php wp_footer();?>
Также убедитесь, что у вас есть <?php wp_head();?>
перед тегом </head>
. Надеюсь, это поможет......

Я знаю, что вы задавали этот вопрос давно, но у меня возникла такая же проблема, и я наконец разобрался в чем дело. В моем файле functions.php
я отменил регистрацию jQuery (wp_deregister_script('jquery')
). Оказалось, что это приводит к неработоспособности виджетов в настройщике, несмотря на то, что jQuery по-прежнему загружалась на страницу (через wp_enqueue_script
).
Чтобы решить проблему (если у вас такая же ситуация), нужно повторно зарегистрировать jQuery, вызвав wp_register_script('jquery', ('url_to_jquery'), false, '1.11.1'[или ваша версия jQuery])
.

Виджет никогда не будет отображаться, если вызывать его по имени вместо ID.
Проверьте sidebar.php или footer.php, где вы хотите отобразить виджет — совпадает ли ID сайдбара, зарегистрированный в functions.php, с тем, который вы используете.
Если вы используете ID виджета 'something' в functions.php, а 'something-else' там, где хотите отобразить виджет, то ничего не сработает!
Пример:
Если вы регистрируете виджет в functions.php с использованием "page-sidebar", то вы должны вызывать виджет с помощью <?php dynamic_sidebar( 'page-sidebar' ); ?>
в вашем файле sidebar.php или footer.php.

Я думаю, проблема не в этом. Все работает нормально, единственная проблема - эти виджеты не отображаются в разделе "Внешний вид" -> "Настроить".

Прочитайте про dynamic_sidebar
. "index
(integer/string) (optional) Имя или ID динамической боковой панели."
