WordPressにおいて、scriptタグは wp_enqueue_script
で追加するのがお作法だが、defer
とか async
を付加したい時があるので、その方法。
これをやりたい
<script defer src="https://use.fontawesome.com/releases/v5.0.9/js/all.js"></script>
この↑、 defer
を付加したい。でも、普通に wp_enqueue_script
してもダメなので、対応策。
とりあえず普通にscriptをキューに入れる
フックの記述は省略。最初の引数の fontawesome5
の部分は任意。今回はFontAwesome 5のスクリプトなのでこのようにつけました。
<?php
wp_enqueue_script('fontawesome5', 'https://use.fontawesome.com/releases/v5.0.9/js/all.js', array(), '5.0.9', true);
deferを付加するフィルターフック
お次は、上記で出力されるスクリプトに defer
を付加するためのフック。単に置換してるだけです。script_loader_tag
に引っかけます。
handle !==
のところに、defer
を入れたいスクリプトの名前(今回は fontawesome5
)を入れます。
<?php
add_filter('script_loader_tag', 'add_defer', 10, 2);
function add_defer($tag, $handle) {
if($handle !== 'fontawesome5') {
return $tag;
}
return str_replace(' src=', ' defer src=', $tag);
}
asyncを付加するフィルターフック
やり方は同じ。
<?php
add_filter('script_loader_tag', 'add_async', 10, 2);
function add_async($tag, $handle) {
if($handle !== 'fontawesome5') {
return $tag;
}
return str_replace(' src=', ' async src=', $tag);
}