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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在活动/运行页面上获取is_active_widget? -WordPress功能相关的知识,希望对你有一定的参考价值。

我正在寻找一种解决方案来检查特定页面上的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。然后,当我检查不包含“ 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
}

如何防止这种情况?

答案

是,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()上为小部件添加脚本的可能性不同,在这种情况下,您可以在小部件函数中设置全局变量或定义常量。因此,仅在小部件处于活动状态时才加载脚本。

嗯,有我的两分钱

另一答案

我认为解决此问题的最简单方法是直接编辑侧边栏小部件本身。只需在插件文件中使用wp_enqueue_script()wp_enqueue_style(),它将仅在显示单独的小部件的页面上加载它们。

另一答案

感谢AriePutranto,他将我推向正确的方向。判断widget($instance)函数中是否有活动的窗口小部件的方法相同,即如何决定是否包括js / css文件。

如果您满意包含在页脚中的内容,则可以使用!

// Create the widget output.
    public function widget($args, $instance)
    {
        if (! empty($instance)) {
            add_action('wp_footer', array(&$this, 'enqueueWidgetIncludes'));
            $this->printWidget();           
        }
    }

    private function enqueueWidgetIncludes() {
        //css:

        wp_enqueue_style(/*[code removed]*/);

        wp_enqueue_script(/*[code removed]*/);
    }

以上是关于如何在活动/运行页面上获取is_active_widget? -WordPress功能的主要内容,如果未能解决你的问题,请参考以下文章

如何根据 Spark 中的 GMT lanuchTime 获取活动任务的运行时间?

如何从 Facebook 获取活动页面,而不仅仅是数据

返回时如何在活动上运行函数?

在运行时获取服务器上的 Corba 客户端活动

如何在 Next.js 的活动页面上设置链接组件的样式

如何在php中设置当前页面“活动”