Intereting Posts
Доступ к WordPress допускал меньше страниц до тех пор, пока пользователь не войдет в систему Чистый способ использования ob_start () и ob_end_clean () в wordpress Пользовательский код для динамического меню WordPress Почему я получаю `вызов функции-члена has_posts () для не-объекта`? API-интерфейс Customizer JS: добавление элемента управления «выпадающих страниц» Вызов динамической боковой панели по имени не ID Как остановить повторное заполнение формы на странице обновления WordPress | Переключение поддоменов Как отрегулировать код, чтобы обновить раскрывающийся список с тегами, которые активны в отфильтрованном списке категорий Использование плагина перенаправления для передачи URL-адресов как строчные в wordpress Масштабирование сайта электронной коммерции WP Автоматическое создание страниц в сообщении по количеству слов Учетные записи, имеющие несколько полей после метаданных Самый эффективный способ добавления файла javascript в определенные сообщения и / или страницы? Переключатель языка WordPress

Контекстно-ориентированные виджеты. Моя работа продолжается

Я работаю над простым дополнением к параметрам виджета, чтобы позволить пользователю установить «контекст», в котором отображаются виджеты.

Вот что у меня есть до сих пор, с моими вопросами в комментариях …

1) Добавить форму виджета ко всем виджетам …

add_filter('in_widget_form', 'wse_widget_context_form'); function wse_widget_context_form($widget){ //echo 'the widget id is: '.$widget->id; //do we need to reference the widget->id to avoid variable overwrites on multiple widgets? ?> <div class="wse_context"> <ul> <li>Hide this widget on: </li> <li id='home'><label><input value="on" type="checkbox" name="noHome" id="noHome"<?php if(isset($noHome)) echo $noHome ?> /> home</label></li> <li id='posts'><label><input value="on" type="checkbox" name="noPosts" id="noPosts"<?php if(isset($noPosts)) echo $noPosts ?> /> posts</label></li> <li id='pages'><label><input value="on" type="checkbox" name="noPages" id="noPages"<?php if(isset($noPages)) echo $noPages ?> /> pages</label></li> <li id='cats'><label><input value="on" type="checkbox" name="noCats" id="noCats"<?php if(isset($noCats)) echo $noCats ?> /> categories</label></li> </ul> </div> 

2) Создайте функцию обратного вызова для обработки, когда виджеты будут сохранены … (пока это та часть, на которую я застрял)

 <?php add_filter('widget_update_callback', 'wse_widget_context_callback'); add_filter('widget_update_callback', 'wse_widget_context_callback'); function wse_widget_context_callback($instance, $new_instance, $old_instance){ echo 'instance: '.$instance.'<br/>'; // returns array echo 'new_instance: '.$new_instance.'<br/>'; //returns '' echo 'old_instance: '.$old_instance.'<br/>'; //returns '' } 

3) Показать / скрыть виджет на основе настроек виджета

 add_filter('widget_display_callback', 'wse_widget_display_callback'); function wse_widget_display_callback() { //how do I read the values and unset widgets as appopriate? } 

Solutions Collecting From Web of "Контекстно-ориентированные виджеты. Моя работа продолжается"

Так же, как и с помощью метода widget ():

 function wse_widget_display_callback($instance) { $show_it = true; if(isset($instance['noHome']) && $instance['noHome'] && is_home()) $show_it = false; if(isset($instance['noPages']) && $instance['noPages'] && is_page()) $show_it = false; ... if($show_it) return $instance; else return false; } 

Я разместил здесь функции, которые я использую для выполнения этого, это может быть полезно. Здесь есть крючки формы, но они являются частью класса …