Как показывать и прятать виджет в сайдбаре при помощи кода

AvantGarde

Well-Known Member
Регистрация
19.11.2009
Сообщения
95
Подскажите, пожалуйста, как можно программно настроить отображение виджета так, чтобы он не отображался в режиме просмотра не опубликованного поста (страницы). Задавал этот вопрос на форуме вордпресс, но там все умные и никто не хочет подсказать, хотя знают.

Я не особо разбираюсь в php, но немного знаю другие языки программирования. Правильно ли понимаю, что нужно из массива $widgets удалять и добавлять элемент массива, например нужно прятать и показывать элемент массива (виджет):

$widgets[sidebar-1][2]

Как можно это сделать? Может есть какой-то метод у элементов массива?
 

BaNru

Пацифизжу
Команда форума
Регистрация
13.11.2010
Сообщения
4 138
Это делается непосредственно в теме. Соответственно, если смените тему, надо будет повторить.

Вам надо открывать шаблоны отвечающий за эту страницу (index.php,post.php и т.д., в шаблонах WP большая иерархия страниц и многое зависит от самой темы). Если виджет в сайдбаре или футоре, то соответственно надо править там.
Там найти где выводятся виджеты.
Дальше обычное условие (if) на статус поста через get_post_status()
И отключаете не нужные виджеты
PHP:
function remove_calendar_widget() {
    unregister_widget('WP_Widget_Calendar');
}
if(get_post_status(get_post()) != 'publish'){
  add_action( 'widgets_init', 'remove_calendar_widget' );
}

Ровно тоже самое можно повторить через functions.php, тогда не надо будет искать где подключаются виджеты. Как-то так
PHP:
function remove_calendar_widget() {
  if(get_post_status(get_post()) != 'publish'){
    unregister_widget('WP_Widget_Calendar');
  }
}
add_action( 'widgets_init', 'remove_calendar_widget' );
Тот же смысл через плагин, тогда не надо будет в новых темах это применять. Код примерно такой же, только надо обернуть в конструктор плагинов. Как пишутся плагины - Гугл знает. Подсмотрите там.

Весь код написан тут "на коленке", работоспособность не проверял.
 
Последнее редактирование:

AvantGarde

Well-Known Member
Регистрация
19.11.2009
Сообщения
95
Как отключать уже понятно, а как включать виджет? Просто это нужно будет делать каждый раз, и что каждый раз новый виджет регистрировать? А можно как-то между ассоциативными массивами виджетов "перекидывать" элемент?

Например, видежт "calendar" перемещать в $widgets[wp_inactive_widgets] , а потом если нужно в $widgets[sidebar-1] , точно так же как это можно делать визуально в консоли вордпресса, только программно. Вообще, когда такие действия пользователь проводит в консоли, то как это выглядит для движка на уровне кода?
 

BaNru

Пацифизжу
Команда форума
Регистрация
13.11.2010
Сообщения
4 138
Мне кажется очень подробный ответ есть здесь:
 
Последнее редактирование:
Верх Низ