[WordPress]キャッシュを気にせずcssをfunctions.phpから読み込む方法

functions.phpでまとめて管理

サイトを作る中で「cssファイルを新たに追加したい」となったとき、通常であれば<head>内に数行追加するだけで済みます。

しかしWordPressではheader.php<head>内に直接記載するよりも、functions.phpで読み込むことを推奨しているようです。

そこでcssファイルの読み込み方をまとめたいと思います。

指定するファイルのURLの書き方が、テーマフォルダに必須のstyle.cssか否かによって異なります。
それぞれ紹介したいと思います。

基本の追加方法

wp_enqueue_style()内のコードを変更していきます。

テーマフォルダのstyle.cssの場合

get_stylesheet_uri関数

get_stylesheet_uri()

現状のテーマで使われているスタイルシートのURLを返す関数

引数説明
なし なし

get_stylesheet_uri()による出力結果は次のようになります。

http://example.com/wp-content/themes/mytheme/style.css

ファイル名を指定せずに済むので楽です。

上記以外のcssの場合

get_theme_file_uri関数

get_theme_file_uri($file)

テーマ内にあるファイルのURLを返す関数

引数説明
$file ファイル名を指定する。
※末尾に'/'は付かないので注意

get_theme_file_uri()による出力結果は以下のようになります。

http://example.com/wp-content/themes/mytheme

get_theme_file_uri('/css/style.css')のようにファイル名を指定すると以下のようになります。

http://example.com/wp-content/themes/mytheme/css/style.css

ちなみに…

テーマフォルダのstyle.cssですが、この関数を使用しても読み込み可能です。

get_theme_file_uri('/style.css')

キャッシュ対策

※対策不要な場合はwp_enqueue_style($handle, $src, $deps);までで構いません。

ブラウザでサイトを表示すると、次回からの表示速度を速めるためキャッシュが保存されます。しかしこのキャッシュのためにcssの更新が反映されないという問題も起き、随時キャッシュをクリアするなどの手間がかかります。

ここでcssを自動的に読み直す方法があるようです。
以下のコードのようなファイルの最後に「?」+「変数名」というクエリパラメータを追記する方法です。

ファイル名が変わらずともクエリパラメータが異なる場合であれば、ブラウザは新しいファイルと認識してcssの読み直しがされるそうです。

■クエリパラメータの追加方法

何も指定しないままだと<link>のURLの末尾に「?ver=5.x」と付け加えられます。(WordPressのバージョン番号)

これはWordPressのバージョンが変わった際にCSSを確実に読み直すために付加されたものです。

しかしこのままではWordPressのバージョン更新時にしか働きません。そこでバージョンをCSSファイルの更新時刻に変更することで、随時読み直すようにします。

そしてWordPressのwp_enqueue_style()にはファイルのバージョンを第4引数に設定できるので、そちらを利用します。

filemtime関数

filemtime($filename)

ファイルの最終更新時刻を返すPHPの関数

引数説明
$filename ファイル名を指定する。
※時間はUnixタイムスタンプとして返される。

時間は Unix タイムスタンプとして返されます。
Unix タイムスタンプとは、現時刻を「1970年1月1日午前0時0分0秒(UTC)」からの経過秒数で表現する方法です。

get_theme_file_path関数

get_theme_file_path($file)

テーマ内にあるファイルの絶対パスを返す関数

引数説明
$file ファイル名を指定する。
※末尾に'/'は付かないので注意

get_theme_file_path()による出力結果は以下のようになります。

*Macのローカル環境の場合
/Users/.. 省略 ../app/public/wp-content/themes/mytheme

CDNの場合

FontAwesomeやプラグイン専用のcssを追加する際、CDNを利用することがあると思います。その時は第2引数にURLを入力するだけで読み込み可能です。

以上でfunctions.phpからcssを読み込めるようになりました。