wp_localize_script无法使用jquery句柄

时间:2015-04-18 23:00:04

标签: javascript jquery wordpress

我正在尝试欺骗jquery句柄,因为我在WP项目中使用grunt / bower来创建我所有插件和脚本的连接缩小版本。我想在其中包含jQuery 2.1.3,并将带有wordpress的旧版jquery出列,但是为了确保其他插件工作,我想(可能有点像hacky方式)使用jquery处理我的脚本。

不幸的是,似乎本地化脚本不会解雇。我正在做的是:

    wp_deregister_script('jquery'); 

    wp_register_script( 'jquery', get_template_directory_uri().'/public/js/all.min.js', array(), false, true );

    wp_enqueue_script( 'jquery' );

    $localize_data = array(
    ....all the stuff I need in my scripts....
    );
    wp_localize_script( 'jquery', 'nona', $localize_data );

这显然包含在一个调用适当的钩子的函数中,它适用于自定义句柄,但是有兼容性问题,除了创建一个数组并手动将其转换为javascript对象之外的任何想法? / p>

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

函数wp_localize_script调用wp_scripts()->localizethat function顶部有:

if ( $handle === 'jquery' )
    $handle = 'jquery-core';

它将句柄更改为jquery-core,因此要查看default scripts are registered我们发现jquery不会直接引用javascript文件的位置依赖项jquery-corejquery-migrate

// jQuery
$scripts->add( 'jquery', false, array( 'jquery-core', 'jquery-migrate' ), '1.11.2' );
$scripts->add( 'jquery-core', '/wp-includes/js/jquery/jquery.js', array(), '1.11.2' );
$scripts->add( 'jquery-migrate', "/wp-includes/js/jquery/jquery-migrate$suffix.js", array(), '1.2.1' );

我会尝试将句柄更改为jquery-core,如下所示:

add_action('wp_enqueue_scripts', 'jquery_localized', 1);

function jquery_localized() {
    wp_deregister_script('jquery');
    wp_deregister_script('jquery-core');

    wp_enqueue_script( 'jquery-core', get_template_directory_uri().'/public/js/all.min.js', array(), false, true );

    $localize_data = array(
    // ....all the stuff I need in my scripts....
    );
    wp_localize_script( 'jquery-core', 'nona', $localize_data );

    // this for compatibility purpose
    wp_register_script( 'jquery', false, array( 'jquery-core' ), false, true );
}

请注意,我添加1作为优先级,以便在同一个钩子上的其他人之前执行此功能。