您应该在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
}
}
}
...