wp_add_inline_script()
はちょっとしたスクリプトを挿入するときに便利ですが、挿入場所の指定が依存するjsの前か後しか選択できません。依存するjsがない場合(ちょっとしたスクリプトを入れたい場合が該当する)には使えないのです。
wp_head
とかwp_footer
フックで挿入すればよいという意見もあると思いますが、色々訳あってそれがダメな場合があり、どうしたものかと探していたら…
同じような問題に困っている人が他にもいらっしゃったようで、依存関係無しで出力できるようにしてほしいというチケットが出ていて、しかもWordPress 5.0から解決済みになっていました。
#44551 (Inline scripts should be printed for sourceless scripts) – WordPress Trac
実装方法とかはここに
javascript – wp_add_inline_script without dependency – WordPress Development Stack Exchange
ここでは上記サイトを参考にその方法を防備録として書いておきます。
依存関係なしでwp_add_inline_script()
を使うコード
wp_add_inline_script()
にパラメータが追加されたわけではなく、ダミーハンドルを登録し、そのダミーハンドルをwp_add_inline_script()
で指定するという方法になります。
wp_register_script( 'dummy-handle', '' );
wp_enqueue_script( 'dummy-handle' );
wp_add_inline_script( 'dummy-handle', $src );
フッターに表示したい場合はダミーハンドルを登録するときにフッターへ出力する設定をします。
wp_register_script( 'dummy-handle', '',[],'',true );
wp_enqueue_script( 'dummy-handle' );
wp_add_inline_script( 'dummy-handle', $src );
もちろんdummy-handle
のスクリプトタグは表示されず、wp_add_inline_script()
で追加スクリプトのみが表示されます。
チケットの対策としてwp_register_script()
でソースを指定していないハンドルに対してもwp_add_inline_script()
が動作するようになったようです。前は動作しなかったのかな?
ちょっと無駄なことをしている感がありますが、これのおかげで私は問題が解決できました。ハンドル名にwp_head
やwp_footer
を指定したらそこに表示してくれるような仕様の方がシンプルな気もしますが、こちらの方がいろいろな状況に対応しやすいのかもしれませんね。
コメント
この記事へのコメントはありません。