作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
当我在我的 WP 项目中使用 grunt/bower 来创建我所有插件和脚本的串联缩小版本时,我试图欺骗 jquery 句柄。我想在其中包含 jQuery 2.1.3,并使 wordpress 附带的旧版本的 jquery 出列,但为了确保其他插件工作,我想(可能有点老套)使用 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 );
这显然包含在一个在适当的钩子(Hook)上调用的函数中,它使用自定义句柄,但存在兼容性问题,除了创建数组并将其手动转换为 javascript 对象之外还有什么想法吗?
如有任何帮助,我们将不胜感激。
最佳答案
函数 wp_localize_script
调用 wp_scripts()->localize
,并在 that function 的顶部有这个:
if ( $handle === 'jquery' )
$handle = 'jquery-core';
它将handle 更改为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' );
我会尝试将 handle 更改为 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
作为优先级,以便在同一 Hook 上的其他函数之前执行此函数。
关于javascript - wp_localize_script 不适用于 jquery 句柄,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29723872/
我是一名优秀的程序员,十分优秀!