这是联系表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 楼
从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 );
旧答案
没有专用的过滤器……至少我看不到。但是…
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 );
注意:未经测试,只是一个想法。 :)
更新
我已经用此代码编写并测试了一个插件。参见https://gist.github.com/1584783
评论
这也是与requirejs中的data-main一起使用的完美选择
– Nicola Peluchetti
2012年6月6日15:07
这是一个不错的技巧,而且非常简单。我认为在必要时添加charset ='utf-8'也很好!
– Webaware
13年1月16日在8:16
很好,但是为什么:必须是',而不是'!?
– henrywright
2014年2月1日在2:09
@henrywright WordPress在返回的字符串的两边加上',将导致无效的HTML。
– fuxia♦
2014年2月1日在10:54
如果有人希望将此功能与其他脚本一起使用,则可能是一个好主意,那就是确保确认仅在字体末端使用它,也许使用if(!is_admin()){}这样的流行插件(例如ACF)可能会给您头痛。
– crissoca
15年4月28日在2:09
评论
相关票证:core.trac.wordpress.org/ticket/12009好问题@Viruthagiri。