Разные виджеты в разных разделах сайта
Подскажите как можно реализовать такое.
я использую тему gambit, так вот у неё есть с права и лева виджеты по переходе по разделам сайта она повторяет все то что на главной.нужно сделать так что по переходе в другой раздел виджеты отображали тематику раздела,к примеру( раздел боевик в виджетах отображаются все с раздела а в разделе мультики все о мультиках)
Или это не возможно? или можно как то с помощью functions.php организовать?
Добрый вечер. Как раз реализовывал нечто подобное. У меня задача была следующая: мне нужно было на разных страницах и постах в сайдбарах выводить нужные мне виджеты. Я нашёл два способа.
1 способ. плагин JP Widget Visibility. Добавялет к виджету кнопку "Visibility", при нажатии на которую даётся выбор где показывать/или не показывать данный виджет. Т.е. есть у тебя левый сайдбар (он отображается допустим на страницах и постах), ты в него запихиваешь кучу виджетов (меню, ещё меню, ещё меню, календари там всякие и прочее), а дальше у каждого виджета выставляешь где он должен быть показан/или скрыт.
2 способ муторный, но именно тот который я хотел осуществить. Этот способ даёт возможность создавать сколько угодно сайдбаров, добавлять в них виджеты, а при создании/редактировании страницы/поста даётся выбор какой сайдбар отображать.
1 шаг. Создаём 4 файла: theme-options.php, theme-options.css, sidebar-init.php и theme-function.php.
В functions.php подрубаем:
Далее создаём первый файл theme-options.php(за основу был взят файл темы TwentyEleven) и сразу же вместе с ним theme-options.css.
Код файла theme-options.php:
Если в двух словах, файл theme-options.php добавляет в админку во внешний вид филд "Настройка сайдбаров", где мы теперь можем добавлять и удалять сайдбары и сохранять изменения.
Код файла theme-options.css:
2 шаг. Теперь надо чтобы эти добавленные/удалённые сайдбары были зарегистрированы и отображались в администрировании виджетов. С этим нам поможет файл sidebar-init.php:
Здесь мы получаем настройки темы, проверяем, есть ли хотя бы один собственный сайдбар и регистрируем его. Используем быструю функцию для генерации метки из названия сайдбара, который будет использоваться как ID сайдбара.
Теперь во вкладке "Внешний вид" -> "Виджеты" мы можем увидеть созданные сайдбары.
3 шаг. Теперь нужно добавить мета блоки на страницы редактирования страниц/постов, где мы и будем выбирать какие сайдбары отображать. Файл theme-function.php:
Тут мы сначала добавялем наши мета блоки. Далее создаём функции обратного вызова, которые выводят разметку мета блоков, а также получают все зарегистрированные сайдбары (включая стандартный сайдбар темы) через глобальную переменную $wp_registered_sidebars; получают meta записи; создают временную защиту; добавляют выбранный элемент со всеми сайдбарами плюс стандартный, который определен напрямую в файле шаблона. И затем функция save_sidebar_postdata сохраняет meta описание нашей записи в несколько шагов (проверка наличия автосохранения WordPress; проверка защиты и авторизации; сохранение post_meta).
4 шаг. Осталось лишь подправить файлы шаблонов, где у нас выводятся сайдбары (допустим page.php и single.php). Для этого создаём два файла sidebar-left.php и sidebar-custom-left.php и тоже самое для правого сайдбара.
Файл sidebar-custom-left.php
Файл sidebar-left.php
А в файлах page.php и single.php выводим сайдбары через
Стандартный sidebar.php(который будет отображаться по дефолту) можно настроить заранее, или вообще сделать пустым.
Вот и всё. Теперь мы можем выводить на страницах/в постах нужные нам сайдбары с нужными нам виджетами слева, или справа, или сразу оба.
В принципе всё это можно запихнуть сразу в functions.php, но мне не нравится когда он захламлён.