Как найти id сайдбара и виджета в WordPress

Задача: удалить виджеты из подвала записей сайта на WP, оставив их на главной и других страницах.

Теория: сайдбар (sidebar) — это область на сайте, в которой размещён один или несколько виджетов. Обычно, настраивается через «Внешний вид»-> «Виджеты»

Решение: очевидный вариант: «удалить сайдбар из шаблона записи», мне не подходил. Нужный сайдбар являлся частью подвала сайта и втыкался в footer.php темы.

Значит, нужно найти id сайдбара. Пошарив с часок по сети, не нашёл простого решения.

Тогда, я тупо залез в код страницы админки «Внешний вид»-> «Виджеты» (на сайте стоит тема «Hestia»)

поиск id сайдбара сайта на WordPress
да, я олд и использую Classic Widgets

Получилось что-то вроде этого (надеюсь, ты понимаешь, что конкретный код от темы сайта зависит?):

<div id="footer-one-widgets" class="widgets-sortables ui-droppable ui-sortable">		
  <div class="sidebar-name" data-add-to="Добавить на: Подвал Один">
    <button type="button" class="handlediv hide-if-no-js" aria-expanded="false">
      <span class="screen-reader-text">Подвал Один</span>
        <span class="toggle-indicator" aria-hidden="true"></span>
    </button>
    <h2>Подвал Один <span class="spinner"></span></h2>
  </div>

и, в выделенном <div>-е я нахожу то, что искал!

id виджета я нахожу тем же способом, но смотрю уже код фронтенда сайта.

Теперь, остаётся только отключить нужные виджеты в этих сайдбарах (в functions.php):

add_filter( 'sidebars_widgets', 'disable_widget' );

function disable_widget( $sidebars_widgets ) {

    if ( is_single() && is_array($sidebars_widgets['footer-one-widgets']) ) {
            foreach($sidebars_widgets['footer-one-widgets'] as $i => $widget) {
                if(strpos($widget, 'archives-5') !== false) {
                    unset($sidebars_widgets['footer-one-widgets'][$i]);
                }
            }

    }
    if ( is_single() && is_array($sidebars_widgets['footer-two-widgets']) ) {
            foreach($sidebars_widgets['footer-two-widgets'] as $i => $widget) {
                if(strpos($widget, 'categories-6') !== false) {
                    unset($sidebars_widgets['footer-two-widgets'][$i]);
                }
            }

    }

    return $sidebars_widgets;
}

Вот такое юзерское, но вполне себе, рабочее, решение.

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *