问题描述

我创建了一个使用 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 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。