Проблема с добавлением боковой панели в тему Underscores

Вопрос или проблема

Я уже несколько часов борюсь с этой проблемой, буду признателен за любую помощь. Я использую тему Underscores с одной боковой панелью (sidebar-1, слева) и плагином Custom Sidebars, чтобы иметь разное боковое содержимое на каждой странице. Проблема заключается в том, что когда я добавляю новую боковую панель (sidebar-2), она должна отображаться прямо над нижним колонтитулом и содержать одно и то же содержимое на всех страницах.

functions.php:

function myunderscores3_widgets_init() {
    register_sidebar( array(
        'name'          => esc_html__( 'Боковая панель', 'myunderscores3' ),
        'id'            => 'sidebar-1',
        'description'   => esc_html__( 'Добавьте виджеты сюда.', 'myunderscores3' ),
        'before_widget' => '<section id="%1$s" class="widget %2$s">',
        'after_widget'  => '</section>',
        'before_title'  => '<h2 class="widget-title">',
        'after_title'   => '</h2>',
        //'before_title' => '<!--', 
        //'after_title' => '-->',       
    ) );
    register_sidebar( array(
        'name'          => esc_html__( 'Нижняя боковая панель', 'myunderscores3' ),
        'id'            => 'sidebar-2',
        'description'   => esc_html__( 'Добавьте виджеты сюда.', 'myunderscores3' ),
        'before_widget' => '<section id="%1$s" class="widget %2$s">',
        'after_widget'  => '</section>',
        'before_title'  => '<h2 class="widget-title">',
        'after_title'   => '</h2>',
        //'before_title' => '<!--', 
        //'after_title' => '-->',       
    ) );
}
add_action( 'widgets_init', 'myunderscores3_widgets_init' );

sidebar.php (для содержимого sidebar-1):

if ( ! is_active_sidebar( 'sidebar-1' ) ) {
    return;
}
?>

<aside id="secondary" class="widget-area">
    <?php dynamic_sidebar( 'sidebar-1' ); ?>
</aside><!-- #secondary -->

page.php (для подключения sidebar-1):

<?php
get_sidebar();
?>
</div><!-- wrapper -->    

footer.php (для подключения sidebar-2):

if (is_active_sidebar( 'sidebar-2' )) {
      dynamic_sidebar( 'sidebar-2' );
  }
?>
    </div><!-- #content -->

После добавления виджетов в sidebar-2 все работает нормально на каждой странице, кроме одной, на которой нет содержимого sidebar-1. На этой странице содержимое sidebar-2 появляется дважды – внизу, как и ожидалось, и также в области содержимого sidebar-1! Более того, класс ‘no-sidebar’ отсутствует в теле. В админке виджеты sidebar-1 расположены по каждой отдельной странице, тогда как содержимое sidebar-2 находится через виджет (‘Как боковая панель для выбранных типов записей’ – Страницы). На фактической странице, где содержимое sidebar-2 появляется дважды, я не указывал никаких боковых панелей в самой странице, так как это делаю через настройки виджетов. Есть идеи? Спасибо

Шаблонные файлы включены, а не вызываются как функция. Хотя вы и вызвали get_sidebar(), за кулисами это в конечном итоге вызывает include. Другими словами, ваши шаблонные страницы (например, footer.php, page.php и sidebar.php) не находятся непосредственно внутри функции, поэтому вы не можете ‘возвращать’ из них, как вы пытаетесь сделать в sidebar.php.

Таким образом, WordPress проходит мимо этого момента и затем выполняет dynamic_sidebar( 'sidebar-1' );. Теперь здесь кто-то другой должен будет вмешаться и сказать вам, почему загружаются неправильные виджеты. Я не думал, что он будет использовать активную боковую панель, но, судя по вашему коду, похоже, что да. WordPress определенно делает это с меню, если вы не скажете ему иначе.

Но в любом случае, я думаю, если вы просто измените ваш код, вы избежите этого поведения совершенно:

if ( is_active_sidebar( 'sidebar-1' ) ) :
?>

<aside id="secondary" class="widget-area">
    <?php dynamic_sidebar( 'sidebar-1' ); ?>
</aside><!-- #secondary -->

<?php endif; ?>

Таким образом, все, что я сделал, это изменил проверку (убрав !) и затем обернул всю секцию dynamic_sidebar с ней (используя альтернативный PHP формат с : и endif;)

Не имею понятия, в чем была проблема, но после удаления всего моего кода и создания новой боковой панели все заработало. Возможно, опечатка где-то или проблема кэширования?

Ответ или решение

Проблема с добавлением второго сайдбара (sidebar-2) в тему Underscores, судя по вашему описанию, может быть связана с тем, что код для проверки активности сайдбара был реализован неправильно. Как вы указали, в вашем случае контент sidebar-2 отображается дважды, а класс ‘no-sidebar’ отсутствует у тега body. Это может произойти, если WordPress не правильно обрабатывает логику проверки наличия сайдбара.

Давайте рассмотрим изменения, которые помогут вам решить эту проблему.

  1. Использование правильной проверки для сайдбара: Вам нужно убедиться, что контент sidebar-1 отображается только если он активен. Измените ваш код в sidebar.php, чтобы он выглядел следующим образом:
<?php if ( is_active_sidebar( 'sidebar-1' ) ) : ?>
    <aside id="secondary" class="widget-area">
        <?php dynamic_sidebar( 'sidebar-1' ); ?>
    </aside><!-- #secondary -->
<?php endif; ?>

Так вы предотвратите вывод контента sidebar-1, если он неактивен.

  1. Убедитесь в отсутствии конфликта с кэшированием: Иногда, если на сайте включено кэширование, изменения могут не отображаться сразу. Попробуйте очистить кэш вашего сайта (если вы используете какой-либо плагин кэширования), а также кэш браузера.

  2. Проверьте настройки виджетов: В панели управления WordPress зайдите в раздел «Виджеты» и посмотрите, какие виджеты находятся в sidebar-1 и sidebar-2. Убедитесь, что в sidebar-1 не добавлены те же виджеты, которые вы хотите видеть в sidebar-2.

  3. Проверка в коде: Убедитесь также, что нигде в вашем шаблоне (например, в footer.php или в других файлах) не происходит вызов dynamic_sidebar( ‘sidebar-1’ ); вне его основного контейнера. Это может привести к нежелательному поведению.

  4. Проверка структуры HTML: Убедитесь, что даже если sidebar-1 не активен, остальная часть разметки страницы корректно формируется и не нарушается из-за отсутствия этого сайдбара. Иногда ошибки могут быть связаны со структурой HTML.

Следуя этим рекомендациям, вы сможете устранить проблему вывода контента sidebar-2 дважды. Если проблема все еще сохраняется, попробуйте временно отключить все плагины, чтобы выяснить, нет ли конфликта между ними.

Удачи в решении вашей проблемы! Если возникнут дополнительные вопросы, не стесняйтесь задавать их.

Оцените материал
Добавить комментарий

Капча загружается...