我正在尝试欺骗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>
任何帮助将不胜感激。
答案 0 :(得分:2)
函数wp_localize_script
调用wp_scripts()->localize
,that function顶部有:
if ( $handle === 'jquery' )
$handle = 'jquery-core';
它将句柄更改为jquery-core
,因此要查看default scripts are registered我们发现jquery
不会直接引用javascript文件的位置依赖项jquery-core
和jquery-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
作为优先级,以便在同一个钩子上的其他人之前执行此功能。