我正在寻找在特定页面上检查is_active_widget的解决方案
我得到了这个https://wordpress.stackexchange.com/questions/2302/loading-scripts-only-if-a-particular-shortcode-or-widget-is-present
然而,sorich87的第二种方式仍然在每个页面上加载小部件的脚本,其中在运行/活动页面上没有特定的活动小部件。即使每页的侧边栏都有不同的id&名。
例如:
我有页面'A'(侧边栏'A1'),其中包含'X'活动小部件和x_scripts。
然后,当我检查页面'B'(带有侧边栏'B1')并不构成'X'小部件时,它仍会加载'X'小部件的x_scripts。似乎这个is_active_widget函数只检查一般激活的小部件,而不是在正在运行的页面上。
这是我的代码:
class X extends WP_Widget
{
function X(){
$widget_ops = array('description' => 'X widget');
$control_ops = array('width' => 200, 'height' => 500);
parent::WP_Widget(false,$name='X-widget',$widget_ops,$control_ops);
if ( is_active_widget(false, false, $this->id_base, true) ){
add_action('wp_head', 'x_styles',0);
add_action( 'wp_footer', 'x_scripts' );
}
}
//rest of functions here
}
如何防止这种情况?
答案 0 :(得分:0)
是的,is_active_widget()
从数据库中保存的选项中获取值。因此,对于任何活动的小部件,它将返回true。 is_active_sidebar()
的行为相同,即使侧栏没有加载到特定页面中,只要边栏已注册,返回的值将始终为true。
这两个函数都会检查全局$wp_registered_widgets
,$_wp_sidebars_widgets
,$sidebars_widgets
从register_sidebar()
生成哪些值以及已添加到侧边栏的小部件。
不幸的是,没有解决方法。由于在dynamic_sidebar()
之后加载wp_head()
,因此无法将脚本或样式表有条件地挂钩到它。除非窗口小部件处于非活动状态,否则连接到wp_head
的脚本或样式或任何内容将始终存在,即使是侧边栏也已加载。
也许,从逻辑上讲,在wp_footer()
上为窗口小部件添加脚本的可能性不同,在这种情况下,您可以在窗口小部件函数中设置全局变量或定义常量。因此,仅当窗口小部件处于活动状态时才会加载脚本。
嗯,这是我的两分钱
答案 1 :(得分:0)
我认为解决这个问题的最简单方法就是简单地编辑侧边栏小部件。只需使用wp_enqueue_script()
&插件文件中的wp_enqueue_style()
,它只会在显示单独小部件的页面上加载它们。
答案 2 :(得分:0)
感谢AriePutranto,他将我推向正确的方向。判断wcfconfigversionid
函数中是否有活动的窗口小部件的方法相同,即如何决定是否包括js / css文件。
如果您满意包含在页脚中的内容,那么这可行!
widget($instance)