问题描述
这是在我的函数文件中使用的代码 im:
add_action('init', 'sort_out_jquery_pngfix_frontend');
function sort_out_jquery_pngfix_frontend() {
global $wp_scripts;
if(!is_admin()) {
wp_deregister_script('jquery');
wp_register_script('jquery', 'https://googleajax.admincdn.com/ajax/libs/jquery/1/jquery.min.js', array(), NULL, true);
wp_register_script('dd_belatedpng', get_stylesheet_directory_uri() . '/js/dd_belatedpng.js', array(), NULL, true);
$wp_scripts->add_data('dd_belatedpng', 'conditional', 'lt IE 7');
}
}
add_action('wp_print_scripts', 'register_theme_scripts');
function register_theme_scripts() {
if(!is_admin()) {
wp_enqueue_script('modernizr', get_stylesheet_directory_uri() . '/js/modernizr-1.7.min.js', array(), NULL, false);
wp_enqueue_script('googlemaps', 'http://maps.google.com/maps/api/js?sensor=false', array(), NULL, true);
wp_enqueue_script('jquery');
wp_enqueue_script('dd_belatedpng');
wp_enqueue_script('sc_wc_js', get_stylesheet_directory_uri() . '/js/function.js', array('jquery', 'dd_belatedpng'), '1.0', true);
}
}
我使用 $wp_scripts->add_data('dd_belatedpng', 'conditional', 'lt IE 7');
根据文档我可以找到 on-line 但它不工作的脚本添加一个条件语句。条件代码未显示,但 js 文件是。
为什么这不工作?
最佳解决方案
从快速查看代码,这个条件只是似乎被处理为样式而不是脚本。
次佳解决方案
这是一个漫长的镜头,但你可以尝试注册脚本,然后添加条件,然后排队脚本:
// Register the script
wp_register_script( 'dd_belatedpng', get_stylesheet_directory_uri() . '/js/dd_belatedpng.js', array(), NULL, true );
// Attempt to add in the IE conditional tags
$wp_scripts->add_data('dd_belatedpng', 'conditional', 'lt IE 7');
// Enqueue the script
wp_enqueue_script( 'dd_belatedpng' );
我不知道它会奏效
编辑
根据相关的 Trac 门票,$wp_scripts
不支持此方法。
您可能只需将脚本从 wp_enqueue_script()
系统中拉出,并将 IE conditional-enclosed 脚本调用回调到插入 wp_print_scripts
或 wp_head
的可插拔功能中。这肯定不是很理想,但是如果这是一个 single-use 客户端主题,那么你不用担心需要注销脚本的人。
第三种解决方案
这是我不得不放下的工作,因为 WP 不支持我想要做的事情
的 functions.php
add_action('init', 'sort_out_jquery_pngfix_frontend');
function sort_out_jquery_pngfix_frontend() {
if(!is_admin()) {
wp_deregister_script('jquery');
wp_register_script('jquery', 'https://googleajax.admincdn.com/ajax/libs/jquery/1/jquery.min.js', array(), NULL, true);
wp_register_script('dd_belatedpng', get_stylesheet_directory_uri() . '/js/dd_belatedpng.js', array(), NULL, true);
}
}
add_action('wp_print_scripts', 'register_theme_scripts');
function register_theme_scripts() {
if(!is_admin()) {
wp_enqueue_script('modernizr', get_stylesheet_directory_uri() . '/js/modernizr-1.7.min.js', array(), NULL, false);
wp_enqueue_script('googlemaps', 'http://maps.google.com/maps/api/js?sensor=false', array(), NULL, true);
wp_enqueue_script('jquery');
wp_enqueue_script('sc_wc_js', get_stylesheet_directory_uri() . '/js/function.js', array('jquery'), '1.0', true);
}
}
footer.php
<?php wp_footer(); ?>
<!--[if lt IE 7]>
<?php wp_print_scripts(array('dd_belatedpng')); ?>
<script>DD_belatedPNG.fix("img, .png_bg");</script>
<![endif]-->
第四种方案
通过 $is_IE
在 wp-includes /vars.php 中找到了一个部分解决方案!
function emporium_enqueue_scripts() {
global $is_IE;
if( $is_IE ) {
wp_register_script( 'emporium-focus' , get_template_directory_uri() . '/library/focus.js', '', '', true );
wp_enqueue_script( 'emporium-focus' );
}
}
add_action('init', 'emporium_enqueue_scripts');
这似乎在 if IE
基础上加载 library /focus.js,但是对于脚本来说,任何 IE 版本的条件都没有内核。关于这个问题的 Trac ticket 似乎暂时搁置了。
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。