检查小部件是否在带有PHP的侧边栏中

时间:2015-02-22 作者:Nate

我正在用一些小部件创建一个自定义主题。在这个主题中,为了让我的客户端更容易更新,我使用了SiteOrigin的页面生成器插件,它使用小部件来显示内容。我正在创建一个事件列表小部件,它将与自定义帖子类型一起使用。我希望小部件显示该区域的地图,但前提是它不在我的侧栏中(侧栏是我声明小部件的唯一位置)。如果它在我的侧栏中,它不会加载地图。

在粗略浏览了一下谷歌之后,我似乎找不到任何解决方案。大多数人建议使用CSS隐藏/显示元素。我希望WP 4.1中有什么东西可以检查小部件是否在特定的侧边栏中。有人能帮忙吗?

2 个回复
SO网友:Owais Alam

您应该在widget类中进行检查,除非您别无选择。codex中的示例正是您想要的:

class cbs_map_widget extends WP_Widget{

  function cbs_map_widget(){
    $this->WP_Widget(\'cbsmaps\', __(\'Widget Name\'), array(\'classname\' => \'cbsmaps\', \'description\' => __(\'whatever\')));
    ...   
    add_action(\'wp_enqueue_scripts\', array(&$this, \'js\'));
  }

  function js(){

    if ( is_active_widget(false, false, $this->id_base, true) ) {
       // enqueue your scripts;
    }           

  }


  ...

}
The$widget_id 当您只需要包含特定小部件实例的脚本时,参数很有用。例如,当您有两个cbs_map_widget widget并希望为每个widget包含自定义javascript。

这个$callback 参数在需要在widget类之外进行检查时很有用(就像上面所做的),但如果可以在类内进行检查,请尽量避免使用它。

其他参数几乎是不言自明的(id\\u base基本上是"widget class indentifier", 以及$skip_inactive 是否也要检查不活动的小部件-应该是真的,因为我认为您不想这样做)。。。

同样,除非您特别想检查某个小部件实例是否处于活动状态,否则您不需要这个。我个人使用这种方法是因为我也可以访问实例选项:

...
 function js(){

    // we need to process all instances because this function gets to run only once
    $widget_settings = get_option($this->option_name);

    foreach((array)$widget_settings as $instance => $options){

      // identify instance
      $id = "{$this->id_base}-{$instance}";

      // check if it\'s our instance
      if(!is_active_widget(false, $id, $this->id_base)) continue; // not active

      // instance is active
      // access the widget instance options here, you may need them to do your checks
      if($options[\'yourwidgetoption\']) {
         // do stuff 
      } 
    }

 }
 ... 

SO网友:skribe

WordPress已经有了这方面的功能。is_active_widget 正如codex所指出的,您必须在小部件全部加载后使用该功能。然后用if语句测试条件,如果没有加载map小部件,则可以运行脚本的其余部分在模板中加载map。

http://codex.wordpress.org/Function_Reference/is_active_widget

结束

相关推荐

Not Getting Sidebar

我使用的侧栏使用if-else语句。无论我做什么,它总是显示else默认侧边栏。它们似乎已注册,因为它们显示在管理窗口小部件部分。我可以向它们添加小部件,但它们不会显示在页面中。仅默认侧栏。这是侧边栏模板<aside id=\"sidebar\" role=\"complementary\"> <?php if ( !function_exists(\'dynamic_sidebar\') || !dynamic_sidebar() ) : ?>&#