ブログ

ホーム » WordPressのCSS更新が反映されない?子テーマの読み込みにfilemtimeを使ってキャッシュ問題を解決!

WordPressのCSS更新が反映されない?子テーマの読み込みにfilemtimeを使ってキャッシュ問題を解決!

子テーマ読み込み時に関数でキャッシュクリア

WordPressのカスタマイズで、子テーマのstyle.cssをFTPにアップロードしても、更新内容が反映されない場合がありました。
管理画面の「追加CSS」なら反映されるのに、style.cssだとダメなのはなぜ?と原因を調べていたところ、子テーマのfunctions.phpの書き方に問題がありました。

ブラウザに無視されやすい子テーマの書き方

シンプルに読み込みだけを指定しています。この書き方だと、CSSを更新しても反映されないことがありました。

  1. // ブラウザに無視されやすい子テーマの書き方
  2. add_action( 'wp_enqueue_scripts', function() {
  3.     wp_enqueue_style( 'child-style', get_stylesheet_uri() );
  4. });

この書き方だと、CSSのURLの後ろに付くバージョン(?ver=...)がWordPress自体のバージョンになります。
style.cssを何回書き換えても、URLが変わらないため、サーバー(CDN)やブラウザが古いコピーを出し続けていました。

ファイル更新を反映させる書き方

そこで、ファイルの最終更新日時を自動でバージョン番号として付与するこの書き方にしました。

  1. // CSSを上書き保存するとURLが自動更新されるコード
  2. add_action( 'wp_enqueue_scripts', function() {
  3.     // ファイルの更新時刻を数値として取得
  4.     $version = filemtime( get_stylesheet_directory() . '/style.css' );
  5.     
  6.     wp_enqueue_style(
  7.         'child-style',
  8.         get_stylesheet_uri(),
  9.         array(),
  10.         $version
  11.     );
  12. });

この書き方のメリット

キャッシュクリアが不要。 クライアントに「Ctrl + F5を押してください」と言う必要がなくなります。

CDN環境にも強いので、強力なキャッシュサーバー(CDN)を挟んでいても、URLが変わるので確実に最新版が読み込まれます。

読み込むたびに番号を変えるtime()関数を使わず更新した時だけ番号が変わるので、キャッシュの良さを活かしつつ更新もされます。

Azure Front Doorのような強力なCDN環境はもちろん、最近のレンタルサーバー全般にも有効です。

この記事を書いた人

ポポデザイン

最新の投稿