WordPressのCSS・JS読み込み|基本編
この記事でわかること
- テーマのCSS・JSを、WordPressの推奨する方法で読み込める
- CSSを更新したとき、古いキャッシュに邪魔されずにすぐ反映させられる
WordPressでは、CSSやJSはfunctions.phpから読み込むのが推奨の方法です。この記事では、CSSとJSを1つずつ読み込む、基本の書き方を紹介します。
最初は基本の書き方だけ覚えれば大丈夫だよ!慣れてきたら少しずつ応用していこうね
CSS・JSの読み込みで押さえること
やりたいことが決まっている場合は、次の表から使う関数と、解説しているSTEPを探してください。
| やりたいこと | 使う関数・機能 | 解説 |
|---|---|---|
| CSSを読み込む | wp_enqueue_style |
STEP1 |
| テーマのファイルを指定する | get_theme_file_uriなど |
STEP1 |
| キャッシュ対策をする | filemtime |
STEP2 |
| JSを後で読み込む | wp_enqueue_script |
STEP3 |
各STEPのコードは、前のSTEPのコードに書き足していきます。コピーして使いたい場合は、完成形のコードを先に確認できます。
STEPを順番に読んでいくと、最後に完成形のコードが組み上がるよ!
STEP1:CSSを読み込む
wp_enqueue_scriptsフックの中でCSSを読み込む
CSSはwp_enqueue_style、JSはwp_enqueue_scriptで読み込みます。どちらも、wp_enqueue_scriptsというフックの中で呼び出すのが決まりです。フックの外で呼ぶと、予期しない動きになることがあります。
function mytheme_enqueue_assets() { /* ① */
wp_enqueue_style(
'mytheme-style', /* ② */
get_parent_theme_file_uri('css/style.css'), /* ③ */
[], /* ④ */
'1.0.0' /* ⑤ */
);
}
add_action('wp_enqueue_scripts', 'mytheme_enqueue_assets'); /* ⑥ */
| コード解説 | |
|---|---|
| ① | 読み込み処理をまとめる関数を作る(名前は自分で決める) |
| ② | 読み込むCSSを識別するためのハンドル名※1(自分で決める) |
| ③ | 読み込むCSSファイルのURL |
| ④ | 先に読み込んでおきたいCSSのハンドル名を書く場所(この記事では使わないので、空の配列にする) |
| ⑤ | バージョン(URLの末尾に付く。STEP2で解説する) |
| ⑥ | 作った関数を、CSS・JSを読み込むためのフックに登録する(フック名はWordPressが決めた名前をそのまま使う) |
※1:ハンドル名…読み込むCSS・JSを識別するための名前。この記事では「mytheme-style」のように、接頭辞とファイル名を組み合わせて付けています。
同じハンドル名なら二重に読み込まれない
1つ目の引数のハンドル名が同じなら、何度呼び出しても読み込まれるのは1回だけです。ハンドル名を「テーマの接頭辞-ファイル名」に統一しておくと、二重読み込みを防げます。
ただし、同じハンドル名で別のパラメータを渡しても、2回目以降の値は無視されます。別のCSSには、必ず別のハンドル名を付けましょう。
テーマ内のファイルのパスとURLを取得する
テーマ内のファイルを扱うときは、次の関数を使います。名前が_pathで終わる関数はサーバー上の場所を返します。_uriで終わる関数は、ブラウザが読み込むURLを返します。
| 関数 | 取得するもの | 子テーマを使っているとき |
|---|---|---|
get_parent_theme_file_path |
サーバー上のパス | 常に親テーマのファイルを参照する |
get_parent_theme_file_uri |
URL | 常に親テーマのファイルを参照する |
get_theme_file_path |
サーバー上のパス | 子テーマに同名のファイルがあれば、子テーマを優先する |
get_theme_file_uri |
URL | 子テーマに同名のファイルがあれば、子テーマを優先する |
URLは読み込み関数に渡します。パスは、STEP2で使うfile_existsやfilemtimeに渡します。子テーマで上書きさせたい場合は、get_theme_file_で始まる関数を使いましょう。
「path」はサーバーの中の住所、「uri」はブラウザから見た住所、と覚えるといいよ!
これらの関数は、WordPress 4.7で追加されたとされています。古いバージョンのWordPressで使う場合は、公式リファレンスで確認してください。
STEP2:キャッシュ対策をする
バージョンを付けてキャッシュ対策をする
CSSを更新したのに、ブラウザに古いキャッシュが残って反映されないことがあります。これを防ぐのが、4つ目の引数に指定するバージョンです。バージョンは、URLの末尾に?ver=値として付きます。
出力されるHTML(例)
<link
rel="stylesheet"
href="https://example.com/css/style.css?ver=1.0.0"
>
値が変わるとURLも変わるため、ブラウザは新しいファイルを読み込みます。バージョンには、次の値を指定できます。
| 指定する値 | URLに付くもの | 向いている場面 |
|---|---|---|
'1.0.0'などの文字列 |
指定した値 | 更新のたびに、番号を手動で変える場合 |
false |
WordPress本体のバージョン番号 | テーマのCSSには不向き(CSSを更新してもURLが変わらない) |
null |
何も付かない | Google Fontsなどの外部CSS |
filemtimeの結果 |
ファイルの更新日時 | テーマ内のCSS・JS(おすすめ) |
更新日時を自動でバージョンにする
filemtimeは、ファイルの更新日時を取得する関数です。バージョンに使えば、CSSを更新するたびに自動でURLが変わります。STEP1の関数の中身を、次のように書き換えます。
function mytheme_enqueue_assets() {
$path = get_parent_theme_file_path('css/style.css'); /* ① */
if (file_exists($path)) { /* ② */
wp_enqueue_style(
'mytheme-style',
get_parent_theme_file_uri('css/style.css'),
[],
filemtime($path) /* ③ */
);
}
}
add_action('wp_enqueue_scripts', 'mytheme_enqueue_assets');
| コード解説 | |
|---|---|
| ① | CSSファイルのサーバー上のパスを取得する(変数名は自分で決める) |
| ② | ファイルが存在するときだけ読み込む(ファイルがないと、更新日時の取得で警告が出るため) |
| ③ | ファイルの更新日時をバージョンにする |
テーマのCSSやJSは、filemtimeでバージョンを付けると覚えておいてね!キャッシュで悩まなくなるよ
STEP3:JSを読み込む
JSをフッターで読み込む
JSはwp_enqueue_scriptで読み込みます。5つ目の引数に配列を渡すと、出力する場所や実行するタイミングを指定できます。この配列の書き方は、WordPress 6.3以降で使えます。
次のコードを、mytheme_enqueue_assets関数の中の、CSSを読み込む処理の下に書き足します。
$main_js = get_parent_theme_file_path('js/main.js');
if (file_exists($main_js)) {
wp_enqueue_script(
'mytheme-main', /* ① */
get_parent_theme_file_uri('js/main.js'),
[],
filemtime($main_js),
['in_footer' => true] /* ② */
);
}
| コード解説 | |
|---|---|
| ① | 読み込むJSを識別するためのハンドル名(自分で決める) |
| ② | JSをフッターに出力する |
CSSと形はほとんど同じだよ!違うのは、関数の名前と5つ目の引数だけだね
実行するタイミングの指定は、よくある質問で紹介しています。詳しい仕様はWordPress公式リファレンス(wp_enqueue_script)で確認できます。
完成形のコード
STEP1〜3のコードを、1つにまとめました。functions.phpに貼り付けて使えます。
function mytheme_enqueue_assets() { /* ① */
$path = get_parent_theme_file_path('css/style.css');
if (file_exists($path)) { /* ② */
wp_enqueue_style(
'mytheme-style',
get_parent_theme_file_uri('css/style.css'),
[],
filemtime($path)
);
}
$main_js = get_parent_theme_file_path('js/main.js');
if (file_exists($main_js)) { /* ③ */
wp_enqueue_script(
'mytheme-main',
get_parent_theme_file_uri('js/main.js'),
[],
filemtime($main_js),
['in_footer' => true]
);
}
}
add_action('wp_enqueue_scripts', 'mytheme_enqueue_assets');
使うときは、接頭辞(mytheme)と、CSS・JSのファイルの場所を、自分のサイトに合わせて書き換えてください。
さいごに
まとめ
functions.phpでのCSS・JSの読み込みは、フックに登録した関数の中に書くのが基本です。
まず押さえる3つのポイント
wp_enqueue_scriptsフックの中で読み込む- ハンドル名は「テーマの接頭辞-ファイル名」に統一する
- テーマ内のファイルは
filemtimeでバージョンを付ける
CSSやJSが増えてきたら、ページごとの出し分けにも挑戦してみてください。
よくある質問
CSSを更新したのに反映されません
バージョンが変わっていない可能性があります。テーマ内のファイルは、filemtimeで更新日時をバージョンにしましょう。更新するたびにURLが変わり、新しいファイルが読み込まれます。
書き方は「更新日時を自動でバージョンにする」で解説しています。
同じCSSを2回読み込むコードを書いても大丈夫?
大丈夫です。ハンドル名が同じなら、何度呼び出しても読み込まれるのは1回だけです。
仕組みは「同じハンドル名なら二重に読み込まれない」で解説しています。
get_parent_theme_file_uriとget_theme_file_uriはどちらを使えばいい?
子テーマで上書きさせたいならget_theme_file_uriを選びます。常に親テーマのファイルを使いたいなら、get_parent_theme_file_uriを選びます。
違いは「テーマ内のファイルのパスとURLを取得する」で解説しています。
JSを実行するタイミングも指定できますか?
指定できます。5つ目の引数の配列に'strategy'を追加し、['in_footer' => true, 'strategy' => 'defer']のように書きます。
deferは、HTMLの解析を止めずに読み込み、DOMの構築後に実行します。複数ある場合は追加した順に実行されるため、ページ内の要素を操作するJSや、実行順が大事な複数のJSに向いています。
asyncは、読み込みが終わり次第すぐ実行します。実行順は保証されないため、他のJSに頼らず単独で動くJSに向いています。
以前は、5つ目の引数にtrue/falseを渡す書き方が使われていました。trueでフッターに出力され、現在も動作します。
配列の書き方は「JSをフッターで読み込む」で解説しています。
参考にした公式情報
どのページも英語ですが、ブラウザの翻訳機能を使えば日本語で読めます。

