Intereting Posts
Добавьте пользовательскую вкладку рядом с параметрами экрана и справкой как отображать дочерние термины с родительскими терминами в пользовательской таксономии? Как создать и ссылку на страницу администрирования для плагина? Почему WordPress меняет права доступа к файлу? put_contents не удается, но fopen в скрипте оболочки отлично работает Наши теги плагинов не отображаются в репозитории плагинов WordPress Не удается заставить слайд-шоу перейти на мою домашнюю страницу. Он сказал, что преимущество переместилось Обнаруживать изменения метаданных при обновлении сообщения (post_updated) Изменить размер виджета облака Проверка пользовательских тем / плагинов Как изменить метаописание домашней страницы? Не удается получить доступ к свойствам класса из ajax-вызова в wpordrpess Сайт WordPress в пользовательском приложении для Android Таблица wp_posts: безопасное удаление неиспользуемых столбцов для сохранения хранилища баз данных Добавить контент до / после admin post wp-list-table

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

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

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

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; } 

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