如果某个Widget显示在页面上,则有条件地加载脚本

时间:2016-04-07 作者:darrinb

我知道这个问题在past 但公认的答案是错误的。is_active_widget 如果小部件在站点上注册,则返回true。一、 e.在Appearance > Widgets 或通过自定义程序添加。

我要做的是,仅当小部件实际存在于特定页面的侧栏中时,才加载脚本。举个例子:模板A有一个带有最近帖子小部件的侧栏,模板B有一个带有最近评论小部件的不同侧栏。我希望仅当页面上有最近的评论小部件时,才在前端加载脚本。

is_active_widget(\'\',\'\',\'widget_recent_comments\') 在每次页面加载时返回true,无论小部件是否实际加载,因为该小部件是在后端注册的。

我知道您可以从widget() 方法,但会加载到页脚中。我需要它加载到标题中。

1 个回复
SO网友:Caspar

我认为你要求做的是不可能的。至少不干净。为什么?

因为边栏和小部件的实际呈现是在模板文件中进行的。get_sidebar() 从模板文件调用,然后该模板文件调用WP_Widget::widget() 方法,用于将任何小部件分配给讨论中的提要栏。但这发生在wp_head 调用事件(通常从header.php 模板)和排队等待标头的脚本。因此,直到<head> 已发送。

您所知道的最多的是,如果主题模板调用了一个侧栏,其中小部件处于活动状态,它将被打印到页面输出中,这就是is_active_widget() 告诉你。

相关推荐

My widgets do not save

每次我保存我的小部件并离开页面时,我的小部件都会消失。侧边栏已完全清空,不会保存任何更改。控制台或PHP日志中没有任何错误。如果我将小部件直接复制并保存在数据库中widgets_text, 它们将被显示,但我仍然无法在侧边栏中添加或删除任何内容。这只发生在我的右侧边栏上,左侧边栏工作正常,但它们都以相同的方式注册。这是我注册侧边栏的方式:function my_widgets_init() { register_sidebar( array ( \'name\'