问题描述
我创建了一个使用 jquery 插件的窗口小工具,我使用 is_active_widget 来排列脚本,它的工作正常,但即使在不显示此窗口小工具的页面上也包含该脚本。那么如果这个小工具正在显示,那么只有入门脚本的方法呢?
提前致谢。
最佳解决方案
您应该可以调用 wp_enqueue_script()
作为您的 Widget 输出的一部分。
Edit
Quick-and-dirty,使用 bare-bones Widgets API 类示例:
<?php
class wpse48337_Widget extends WP_Widget {
public function __construct() {
// widget actual processes
}
public function form( $instance ) {
// outputs the options form on admin
}
public function update( $new_instance, $old_instance ) {
// processes widget options to be saved
}
public function widget( $args, $instance ) {
// outputs the content of the widget
}
}
register_widget( 'wpse48337_Widget' );
?>
在您的 Widget 的输出内,即在 public function widget()
内部内联添加 wp_enqueue_script()
调用:
<?php
public function widget( $args, $instance ) {
// outputs the content of the widget
// Enqueue a script needed for
// the Widget's output
wp_enqueue_script( 'jquery-pluginname', $path, $deps );
// Rest of widget output goes here...
}
?>
次佳解决方案
如果脚本需要进入<head>
部分:
class Your_Widget extends WP_Widget{
protected static $did_script = false;
function __construct(){
// parent::__construct() ...
add_action('wp_enqueue_scripts', array($this, 'scripts'));
}
function scripts(){
if(!self::$did_script && is_active_widget(false, false, $this->id_base, true)){
wp_enqueue_script('your-script');
self::$did_script = true;
}
}
}
否则,Chip Bennett 的解决方案将用于在页脚中排队。
$did_script
静态变量不是必需的,我使用它只是为了避免进一步不必要的调用 wp_enqueue_script
如果页面上有多个窗口小工具实例…
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。