[WordPress] wp_enqueue_script で出力している script タグを自由に加工する

WordPress で Javascript ファイルを読み込む際に function.php などで wp_enqueue_script() を使用し、JSファイルを読み込んでいる場合が多いと思います。プラグイン側で wp_enqueue_script() にてJSファイルを自動的に読み込んでいる場合もあります。

wp_enqueue_script() で script タグを出力している場合、デフォルトでは以下のようなコードがフッター又はヘッダーへ出力されます。

<script type="text/javascript" src="https://memocarilog.info/wp-content/memocarilog/js/scripts.js?ver=5.0.3"></script>

この script タグへ defer 属性や async 属性を付与したい、idを追加したいなど script タグの内容を変更したい時には、script_loader_tag フォルターフックで自由に内容を加工することが可能です。

script_loader_tag フォルターフックの使い方

以下のように add_filter() を使ってフィルターフックと加工処理をする関数を登録します。

add_filter( 'script_loader_tag', '処理を行う関数名', 10, 3 );
function 処理を行う関数名( $tag, $handle, $src ){
	加工する処理;
	return 加工された script タグ;
}

script_loader_tag フィルターを使用すると、 wp_enqueue_script で呼び出されてる script タグに対して個々に $tag, $handle, $src の3つの値が渡されてきます。その渡される値を使って実際に出力される script タグを加工します。

関数内で var_dump( $tag, $handle, $src ); してみると以下のように値がとれるのが分かります。

第1引数でデフォルトで表示される script タグ、第2引数で wp_enqueue_script で設定したハンドル名、第3引数で挿入される src 属性値(JSファイルまでのパス)が取得できます。

script_loader_tag フォルターフックの使用例

例)テーマの JS ファイルを読み込んでいる script タグへ async 属性を付与する

属性を script タグへ追加したい場合は、function.php へ以下のように記述します。
3行目の ‘memocarilog’ === $handle の部分で変更を加えたい script のハンドル名を指定し、処理するスクリプトタグを選択します。

add_filter( 'script_loader_tag', 'add_async_to_script', 10, 3 );
function add_async_to_script( $tag, $handle, $src ) {
  if ( 'memocarilog' === $handle ) {
    $tag = '<script async type="text/javascript" src="' . esc_url( $src ) . '"></script>';
  }
  return $tag;
}

これで以下のように script タグへ async 属性が追加されました。

プラグイン側で自動的に読み込まれていて諦めていた、script タグへの adefer / async 属性の付与や、type属性の削除など、このフィルターフックを使うことで自由に簡単に加工できるようになります。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です