WP_ENQUEUE_SCRIPT添加条件语句无效

时间:2011-06-23 作者:Scott

这是我在函数文件中使用的代码:

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://ajax.googleapis.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\'); 根据我可以在线找到的文档,将条件语句添加到此脚本中,但它不起作用。未显示条件代码,但显示js文件。

为什么这不起作用?

7 个回复
最合适的回答,由SO网友:Rarst 整理而成

通过快速查看代码,似乎只针对样式而不是脚本处理此条件。

SO网友:Chip Bennett

这很难做到,但您可以尝试注册脚本,然后添加条件,然后将脚本排入队列:

// 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\' );
不过,我不知道它会不会起作用

EDIT

根据相关的Trac记录单,显示$wp_scripts 不支持此方法。

您可能只需要将脚本从wp_enqueue_script() ,并在连接到wp_print_scriptswp_head. 这当然不理想,但如果这是一个单次使用的客户端主题,那么您就不必担心其他人需要注销脚本。

SO网友:Scott

这是我必须做的工作,因为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://ajax.googleapis.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]-->

SO网友:esmi

刚刚找到此via的部分解决方案$is_IE wp中包括/变量。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\');
这似乎加载了库/焦点。js on anif IE 但核心中并没有为脚本提供任何IE版本条件。看起来像Trac ticket 关于这个问题的讨论暂时搁置了。

SO网友:cbaigorri

看起来您正在将其放在页脚中。您是否查看了页面末尾的JS文件?

SO网友:kaiser

这也适用于脚本。但只有一种情况:如果剧本registered 第一你不能直接去enqueue. 您必须执行以下操作:register -> add_data -> enqueue. 这对于脚本和样式都是相同的规则。

SO网友:Ari

下面是Wordpress 4.2及以上版本的工作示例。

This first example was previously answered here.

    wp_register_script("ie_jshandle",
                 get_template_directory_uri() . "/js/jsSpecificIE.js",
                 array(),
                 \'1.0\',
                 false );
    wp_enqueue_script("ie_jshandle");
    wp_script_add_data("ie_jshandle", "conditional", "lt IE 9");    

You can also use $wp_scripts variable like this:

function wpse_20873_enq_scripts() {
global $wp_scripts;
        wp_register_script("ie_jshandle",
                     get_template_directory_uri() . "/js/jsSpecificIE.js",
                     array(),
                     \'1.0\',
                     false );
        wp_enqueue_script("ie_jshandle");

        $wp_scripts->add_data("ie_jshandle", "conditional", "lt IE 9"); 
}
add_action("wp_enqueue_scripts", "wpse_20873_enq_scripts");

wp_script_add_data reference

结束

相关推荐