Ezzel a kóddal az async és defer attribútumokat lehet hozzáadni a WP által behívott JS fájlokhoz tartozó <script> tag-ekhez. A kód megnézi, hogy az src attribútumban, ami a JS fájl URL-jét tartalmazza, szerepel-e valamelyik megadott kulcsszó.
Az $async tömbbe írjuk azokat a kulcsszavakat, amikhez az async attribútumot akarjuk megadni, a $defer-be pedig értelemszerűen azokat, amelyekhez a defer-t akarjuk hozzáadni.
Az attribútumok előnyeiről, használatáról itt található több információ: Async és defer attribútum hozzáadása a scriptekhez
function ph_recaptcha_script_loader_async_defer( $tag, $handle, $src ) {
$async = array(
'recaptcha',
'adsense',
);
$defer = array(
'facebook',
);
if ( ! ph_tag_has_attribute( $tag, 'async' ) ) {
foreach ( $async as $partial ) {
if ( strpos( $src, $partial ) !== false ) {
$tag = str_replace( '<script ', '<script async ', $tag );
}
}
}
if ( ! ph_tag_has_attribute( $tag, 'defer' ) ) {
foreach ( $defer as $partial ) {
if ( strpos( $src, $partial ) !== false ) {
$tag = str_replace( '<script ', '<script defer ', $tag );
}
}
}
return $tag;
}
function ph_tag_has_attribute( $tag, $attr ) {
return strpos( $tag, " $attr " ) !== false || strpos( $tag, " $attr>" ) !== false || strpos( $tag, " $attr=" ) !== false;
}
add_filter('script_loader_tag', 'ph_recaptcha_script_loader_async_defer', 15, 3);