WordPressにはscript_loader_tagというフィルターがある。これはWordPressに登録されたJavaScriptをHTMLのscriptタグとして出力するときに、変更を加えるフィルターになっている。scriptタグにasync属性やdefer属性を追加するのに使われるので知っている人も多いと思うが、このフィルターは注意深く利用しなくてはならない。何かしらの置換をしている時とかは特に。

caution

というのも、wp_add_inline_scriptという登録済みスクリプトの前後にインラインスクリプトを追加する関数があるのだが、これを使うとscript_loader_tagフィルターの一つ目の引数$tagには登録されたスクリプトのscriptタグとセットでインラインスクリプトのscriptタグもついてくる。つまり、script_loader_tagを使う場合、インラインのJavaScriptの存在を意識してscriptタグを変更しなければならない。str_replaceを使って” src”あたりを安易に置換していると、意図せずインラインのJavaScriptにも変更を加えてしまう可能性があるわけだ。

慎重にタグに変更を加えるなら正規表現でインラインスクリプトのscriptタグ以外とマッチする文を書く必要がありそうだが、中々めんどくさそう。せめてインラインスクリプトが登録スクリプトの前にあるのか後ろにあるのか、あるいはその両方なのかが簡単に分かればいいのだけど、調べるのも結構めんどくさい。

結論としては、登録スクリプトとインラインスクリプトを別々にフィルタするフックがほしい。