最合适的回答,由SO网友:Paul G. 整理而成
这是你问题的答案。这并没有考虑您是否应该添加async
或defer
对于某些资产,它只是给了你自己做或不做的工具。
注意事项:
这只适用于Javascript包含(显然),由于采用了替换标记文本的方法,因此它不是100%准确,但对于99.9%的Javascript包含,它可以很好地完成工作可以选择指定哪些包含应具有async
和defer
标记,只需添加要将其应用到的资产的句柄。我为初学者提供了JQuery此代码将两者相加defer="defer"
和async
. 只需删除适当的if
如果这不是你想要的
function add_async_to_js( $includeTag, $handle ) {
$handlesToChange = [
\'jquery\'
];
if ( in_array( $handle, $handlesToChange ) ) {
if ( strpos( $includeTag, \' defer=\' ) === false ) {
$includeTag = str_replace( \' src=\', \' defer="defer" src=\', $includeTag );
}
if ( strpos( $includeTag, \' async\' ) === false ) {
$includeTag = str_replace( \' src=\', \' async src=\', $includeTag );
}
}
return $includeTag;
}
add_filter( \'script_loader_tag\', \'add_async_to_js\', 10, 2 );