我无法在插件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" 是否在上述代码中标记?
最合适的回答,由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 );
警告:没有测试,只是一个想法。:)