仅在包含我的小部件的页面上运行JS

时间:2011-12-07 20:41:43

标签: php wordpress

我正在尝试将小部件仅加载到存在小部件的页面上的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 */
}

2 个答案:

答案 0 :(得分:1)

似乎新版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 */
}

答案 1 :(得分:0)

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

<?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 */
}