只在我的小部件页面上运行JS


Run JS only on pages with my widget

我想让一个小部件只在小部件存在的页面上加载javascript。

我试过在'showWidget'中添加add操作,但没有成功。

我做错了什么?

PHP

wp_register_sidebar_widget('MyWidget','MyWidget', 'showWidget');
add_action('wp_enqueue_scripts', 'addScript'); //now the script appears on every page
function addScript()
{
    wp_register_script('MyWidgetJs', plugins_url( '/script.js' , __FILE__), array('jquery'));
    wp_enqueue_script('MyWidgetJs');
}
function showWidget($args)
{
    // add_action('wp_enqueue_scripts', 'addScript'); //I tried this but it doesn't work :(
    wp_enqueue_script('MyWidgetJs');
    extract($args);
    /* do widget stuff */
}

新版本的WordPress似乎支持这个:http://codex.wordpress.org/Version_3.3

注册你的脚本,但不要进入队列。在小部件PHP中,添加wp_enqueue_script('your_script_name');只有当你的小部件被使用时,它才会加载它,并把它放在页脚。

你要升级到3.3,对吗?:)

所以,像这样的东西应该工作得很好:

wp_register_sidebar_widget('MyWidget','MyWidget', 'showWidget');
function showWidget($args) {
    wp_enqueue_script('MyWidgetJs');
    extract($args);
    /* do widget stuff */
}

您希望使用is_active_widget() conditional来执行以下操作:

<?php
if ( is_active_widget('MyWidget') ) {
     add_action('wp_enqueue_scripts', 'addScript'); 
}
?>
使用上述代码,最终的小部件可能看起来像:
<?php
 if ( is_active_widget('MyWidget') ) {
         add_action('wp_enqueue_scripts', 'addScript'); 
    }
function addScript()
{
    wp_register_script('MyWidgetJs', plugins_url( '/script.js' , __FILE__), array('jquery'));
    wp_enqueue_script('MyWidgetJs');
}
function showWidget($args)
{
    wp_enqueue_script('MyWidgetJs');
    extract($args);
    /* do widget stuff */
}