与is_widget()标记最接近的是什么?

时间:2012-05-16 作者:mrwweb

我有一个带有WP\\U查询循环的自定义小部件get_template_part() 包括一些我也在主题文件中使用的标准信息。然而,我需要对小部件的输出进行一个小的更改,该更改与我获取的模板文件不同get_template_part(). 我知道我可以复制模板文件并对其进行修改,但我必须维护两组代码。我更喜欢的是is_widget() 检查我是否可以使用:

if( !is_widget() ) {
    // include an extra goody
}
我知道没有is_widget(), 但是我还能找其他的WordPress吗?

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

好吧,如果您坚持使用get\\u template\\u part,我看到的唯一解决方案是在小部件的widget()函数中定义一个全局变量,并将其设置为true或其他值。

在小部件中调用get\\u template\\u part后,将此变量设置为false。在模板中检查该变量,如果为真,则表示您在小部件中。

更好的方法是使用locate_template 然后你自己做。这样,您就可以控制模板中公开的变量,从而可以将普通变量传递给模板:

$_located = locate_template(\'template-name\', false, false);

$in_widget = true; // not global :D      

// load it;
// any variables you have here will also be available in your template 

if($_located)
  require $_located;
在模板中:

if(isset($in_widget)){
  //
}
另一种方式,不使用该上下文变量:

if(isset($this) && ($this instanceof YourWidgetClass)){
  //
}

结束