如何在活动/运行页面上获取is_active_widget? - wordpress功能

时间:2011-10-12 09:10:42

标签: wordpress widget

我正在寻找在特定页面上检查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
}

如何防止这种情况?

3 个答案:

答案 0 :(得分:0)

是的,is_active_widget()从数据库中保存的选项中获取值。因此,对于任何活动的小部件,它将返回true。 is_active_sidebar()的行为相同,即使侧栏没有加载到特定页面中,只要边栏已注册,返回的值将始终为true。

这两个函数都会检查全局$wp_registered_widgets$_wp_sidebars_widgets$sidebars_widgetsregister_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)