情景感知小部件。我的工作正在进行中

时间:2011-07-04 作者:N2Mystic

我正在为小部件选项添加一个简单的选项,允许用户设置小部件显示的“上下文”。

这是我到目前为止得到的,我的问题在评论中。。。

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?

}

1 个回复
最合适的回答,由SO网友:onetrickpony 整理而成

就像从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;

}
我已经发布了here 我用来实现这一点的函数可能会有所帮助。模板挂钩为here, 但他们是一个班级的一部分。。。

结束

相关推荐

Why use widgets?

我对使用WordPress很陌生,我想知道使用小部件的好处是什么?看here 这听起来像是为那些不是程序员的人准备的,他们想在他们的网站上添加插件。对吗?或者小部件是否在某种程度上使站点更加健壮?