wordpress - 如何在事件/运行页面上获取 is_active_widget ? - WordPress功能

标签 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。 然后,当我检查不包含“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() 生成的 code> 和已添加到侧边栏的小部件。

不幸的是,这个问题没有解决方法。由于 dynamic_sidebar()wp_head() 之后加载,因此不可能有条件地将脚本或样式表 Hook 到它。无论侧边栏是否加载,脚本或样式或您 Hook 到 wp_head 的任何内容都将始终存在,除非小部件处于非事件状态。

也许,从逻辑上讲,在 wp_footer() 上为小部件添加脚本有不同的可能性,在这种情况下,您可以在小部件函数中设置全局变量或定义常量。因此,只有当小部件处于事件状态时才会加载脚本。

好吧,这是我的两分钱

关于wordpress - 如何在事件/运行页面上获取 is_active_widget ? - WordPress功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7737709/

相关文章:

java - 使用原始类中的自定义 Android AnalogClock 设置时间

Qt Widget 暂时全屏

javascript - "AJAX"包括时间选择的日历小部件

javascript - 使用用户输入更改或更新复选框值

php - WordPress上传媒体问题 fatal error : Maximum function nesting level of '256' reached

wordpress - 如何使用多个角色参数获取 WP_User_Query

PHP 警告 : stream_socket_enable_crypto(): SSL operation failed with code 1

javascript - DevExtreme 和 Angular - 菜单小部件

qt4 - 如何像在 Qt Designer 中一样创建(或查找)Qwidget "Property Editor"的示例代码?

php - imagecreatefromstring() [function.imagecreatefromstring] 此 PHP 版本中不支持 JPEG