我正在寻找一种解决方案来检查特定页面上的 is_active_widget 。
我得到了这个https://wordpress.stackexchange.com/questions/2302/loading-scripts-only-if-a-pspecial-shortcode-or-widget-is-present
但是 sorich87 的第二种方式仍然加载脚本每个页面上的小部件,其中运行/活动页面上没有特定的活动小部件。即使每个页面的侧边栏有不同的 ID 和名称。
例如:
我有页面“A”(带有侧边栏“A1”),其中包含“X”活动小部件和 x_scripts。然后,当我检查不包含“X”小部件的页面“B”(带有侧边栏“B1”)时,它仍然加载“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
}
Run Code Online (Sandbox Code Playgroud)
如何防止这种情况发生?
是的,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(),在这种情况下,您可以设置全局变量或在小部件函数中定义常量。因此,仅当小部件处于活动状态时才会加载脚本。
好吧,这是我的两分钱
| 归档时间: |
|
| 查看次数: |
3136 次 |
| 最近记录: |