如何在活动/运行页面上获取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功能的主要内容,如果未能解决你的问题,请参考以下文章