如何在插件Java脚本中添加defer=“defer”标签?

时间:2012-01-09 作者:PrivateUser

我无法在插件javascripts中添加延迟标记。Google开发者pagespeed测试建议我在contact form 7 javascripts。

这就是联系人表单7在标题中包含javascript的方式。

add_action( \'wp_enqueue_scripts\', \'wpcf7_enqueue_scripts\' );

function wpcf7_enqueue_scripts() {
    // jquery.form.js originally bundled with WordPress is out of date and deprecated
    // so we need to deregister it and re-register the latest one
    wp_deregister_script( \'jquery-form\' );
    wp_register_script( \'jquery-form\', wpcf7_plugin_url( \'jquery.form.js\' ),
        array( \'jquery\' ), \'2.52\', true );

    $in_footer = true;
    if ( \'header\' === WPCF7_LOAD_JS )
        $in_footer = false;

    wp_enqueue_script( \'contact-form-7\', wpcf7_plugin_url( \'scripts.js\' ),
        array( \'jquery\', \'jquery-form\' ), WPCF7_VERSION, $in_footer );

    do_action( \'wpcf7_enqueue_scripts\' );
}
现在如何添加defer="defer" 是否在上述代码中标记?

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

从WordPress 4.1开始,有一个过滤器:script_loader_tag. 您可以使用它来查找正确的脚本:

add_filter( \'script_loader_tag\', function ( $tag, $handle ) {

    if ( \'contact-form-7\' !== $handle )
        return $tag;

    return str_replace( \' src\', \' defer="defer" src\', $tag );
}, 10, 2 );
<小时/>

Old answer

没有可用的专用过滤器……至少我看不到。但是…

  • wp_print_scripts() 呼叫WP_Scripts->do_items()WP_Scripts->do_item()esc_url()
  • 哪个提供过滤器:\'clean_url\'.

    function add_defer_to_cf7( $url )
    {
        if ( FALSE === strpos( $url, \'contact-form-7\' )
          or FALSE === strpos( $url, \'.js\' )
        )
        { // not our file
            return $url;
        }
        // Must be a \', not "!
        return "$url\' defer=\'defer";
    }
    add_filter( \'clean_url\', \'add_defer_to_cf7\', 11, 1 );
    
    警告:没有测试,只是一个想法。:)

    更新我已经编写并测试了a plugin with this code.

结束