Виджеты не отображаются в настройщике темы

11 июн. 2014 г., 10:13:55
Просмотры: 16.4K
Голосов: 4

Я разрабатываю новую тему и использую несколько боковых панелей в этой теме. Все работает нормально, но виджеты не отображаются в разделе настройщика темы. Все виджеты прекрасно работают в разделе "Внешний вид → Виджеты", но не в "Внешний вид → Настроить". Я использую 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;?>

Все отображается нормально, когда у меня есть одна область виджетов, но как только я добавляю несколько, они исчезают из настройщика.

3
Комментарии

Вы пробовали переключиться на одну из встроенных тем, чтобы проверить, сохраняется ли ошибка? Также можно попробовать отключать плагины по одному. Кстати, вам не нужно проверять существование функции (if(function_exists('register_sidebar'))) при регистрации сайдбара.

Pieter Goosen Pieter Goosen
11 июн. 2014 г. 10:37:41

Ошибка появляется только с моей темой, но что странно — я использую тот же код, что и в теме 2014 года.

AKR AKR
11 июн. 2014 г. 10:41:48

Если вы разрабатываете новую тему на основе twenty fourteen, убедитесь, что у вас нет конфликтов идентификаторов. Убедитесь, что вы не регистрируете сайдбар с одинаковым ID дважды.

Pieter Goosen Pieter Goosen
11 июн. 2014 г. 10:48:16
Все ответы на вопрос 6
2

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

Например, у меня есть сайдбар для страницы Архива. Когда я нахожусь в Настройщике и на главной странице, этот сайдбар не отображается. Но если перейти на страницу архива, оставаясь в Настройщике, он появляется в области виджетов.

16 дек. 2014 г. 09:39:51
Комментарии

Сэр, вы джентльмен и учёный... и вы спасли несколько волосков на моей голове :) Спасибо!

sleeper sleeper
27 июл. 2015 г. 07:35:38

так много времени потрачено впустую, почему я не нашёл этот ответ раньше.

TarranJones TarranJones
25 февр. 2016 г. 11:19:18
0

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

<?php wp_footer();?>

Также убедитесь, что у вас есть <?php wp_head();?> перед тегом </head>. Надеюсь, это поможет......

30 июл. 2017 г. 08:27:18
0

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

Чтобы решить проблему (если у вас такая же ситуация), нужно повторно зарегистрировать jQuery, вызвав wp_register_script('jquery', ('url_to_jquery'), false, '1.11.1'[или ваша версия jQuery]).

23 янв. 2015 г. 00:24:13
2

Виджет никогда не будет отображаться, если вызывать его по имени вместо 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.

11 июн. 2014 г. 10:38:20
Комментарии

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

AKR AKR
11 июн. 2014 г. 10:46:26

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

Pieter Goosen Pieter Goosen
11 июн. 2014 г. 10:46:29
0

@PieterGoosen прав, в dynamic_sidebar ( 'Widget Area 1' )) вы вызываете имя, а не ID, который widget-1.

Попробуйте использовать ID вместо этого.

10 февр. 2015 г. 20:24:45
0
-2

Я столкнулся с этой проблемой и решил её. Пожалуйста, откройте консоль в вашем браузере - там явно видна ошибка JavaScript. Я исправил ошибку, и теперь виджеты отображаются.

8 апр. 2016 г. 19:32:05