WordPressでJavaScriptファイルを追加する関数のwp_register_script()とwp_enqueue_script()のちがいを説明します。
『registerのあとにenqueue入れればいいや』ぐらいの人は間違っていないけれど意味がないこともあるよ?という話です。
CSSスタイルでも同じです。
まずはサンプルコードから。
よく見るコードです。が、こういうやり方も見ます。
wp_register_script()がありません。でも2つのコードはまったく同じ処理をしています。
コピペして動いていればOKという人は気にしないでしょうが、このコードのちがいにはちゃんと意味があります。
(wp_deregister_script()とwp_dequeue_script()のちがいも同じ。)
WordPress.org公式リファレンス
スクリプトを管理しているのは1つのクラスオブジェクト
スクリプトにはレジスタとキューがありますが、どちらもWP_Scriptsクラスで管理されています。
その情報を取得して見ることもできます。
wp_register_script() | レジスタの登録 |
wp_deregister_script() | レジスタの削除 |
wp_enqueue_script() | キューの登録 |
wp_dequeue_script() | キューの削除 |
wp_add_inline_script() | インラインスクリプトの追加 |
スクリプトを扱う関数の内部はクラスオブジェクトの編集です。オブジェクトの編集のためにラッパーの関数が用意されていると言ったほうがいいのかな?
WordPress.org公式リファレンス
レジスタは登録だけ - wp_register_script()
レジスタはjsファイルの情報を登録するだけです。これだけではHTMLにjsファイルは出力されません。
キューに入ったものが出力される - wp_enqueue_script()
jsファイルはキューに入っているリストから出力します。レジスタに登録してもキューになければ意味がありません。
なぜレジスタとキューで分かれているのか?
レジスタとキューが分かれているのは、特定のページにjsファイルを出力するためです。
キューの登録(エンキュー)処理は1箇所とはかぎりません。もしキューがなかったら、jsファイルの変更のたびにすべての場所で変更が必要です。
でもエンキュー処理にハンドラだけを使っていれば、jsファイルの変更作業はwp_register_script()の1箇所です。
キューとレジスタの同時登録
テーマ全体で使うjsファイルはレジスタ登録をしません。
jsファイルのパラメータにファイルパス($src)を指定すると、エンキュー処理の内部でレジスタの登録も行います。
次のコードは同じですが、wp_register_script()を書く意味がないことが分かるでしょう。
wp_enqueue_script()でまとめてできちゃうので。
キューになくても依存関係で出力される
キューに登録されていないのにHTMLにjsファイルが追加されるパターンがあります。
たとえばjQueryです。jQueryはレジスタにだけ登録されているのにHTMLにはしっかり追加されます。
なぜ出力されるかといえば、jQueryに依存するjsファイルがキューに登録され出力されると、jQueryをレジスタからもってきて自動的に出力してくれるからです。
このへんは、Node.jsのパッケージ管理 npm と似てますね?
キューからjsファイルを出力。
↓
その前に、jsファイルが必要としているものがあるか?
(依存関係はあるか?)
↓
あるならキューになくてもレジスタから情報をもってきて出力。
↓
その後ろに自身のjsファイルを出力。
スタイル(CSS)の管理も原理は同じ
もうひとつ、同じような処理をCSSファイルでもしますが原理は同じです。ちがいは編集するクラスオブジェクトとラッパー関数がスタイル用になっているだけ。
クラス |
---|
WP_Styles |
スタイルオブジェクト取得 |
---|
wp_styles() |
wp_register_style() | レジスタの登録 |
wp_deregister_style() | レジスタの削除 |
wp_enqueue_style() | キューの登録 |
wp_dequeue_style() | キューの削除 |
wp_add_inline_style() | インラインスタイルの追加 |
WordPress.orgリファレンス
データの管理方法は共通
WP_ScriptsとWP_Stylesは同じ親クラスを継承した兄弟クラスです。
レジスタやキューの保存先も親クラスを使っているので参照も同じです。
分かりやすいです。
WordPress.orgリファレンス