functions.php にコードを追加したのに、なぜか動かない、反映されない。

これは、WordPress開発において初心者から中級者までが必ずと言っていいほど直面するトラブルです。
記述ミスといった単純なものから、WordPressの実行順序(プライオリティ)が絡む複雑なものまで、原因は多岐にわたります。

本記事では、実務でのデバッグ経験を元に、functions.phpが反映されない主な原因と、最速で解決するための確認ポイントを徹底解説します。

functions.phpを編集しても反映されない原因

反映されない原因の早見表

まずは、よくある原因を一覧にしました。
心当たりがあるものからチェックしてみてください。

分類主な原因難易度
基本ミス編集しているファイル・テーマが違う★☆☆
構文エラー全角スペース、セミコロン忘れ、関数名の重複★★☆
キャッシュブラウザ、プラグイン、サーバー側キャッシュ★☆☆
実行順序アクションフックの優先順位(Priority)不足★★★

functions.phpが反映されない7つの詳細原因

1. 編集している「階層」や「テーマ」が違う

最も初歩的ですが、意外と多いミスです。

  • 子テーマと親テーマの混同: 子テーマを有効化している場合、親テーマの functions.php を編集しても反映されません。
  • 本番環境とテスト環境の取り違え: FTPで接続先を間違えて、ローカル環境を編集しているつもりが本番を見ていた、というケースです。

2. PHP構文エラーによる処理の中断

functions.phpは、わずか1箇所の記述ミスでサイト全体を停止させるほど繊細なファイルです。

  • 全角スペースの混入: コードの間に全角スペースが入ると、PHPは解析エラーを起こします。
  • セミコロン ( ; ) や括弧 ({ }) の閉じ忘れ: 基本的なミスですが、見落としがちです。
  • 関数の二重定義: 既存の関数名と同じ名前で新しい関数を作ろうとするとエラーになり、その後の処理が読み込まれません。

3. アクションフックの実行タイミング(優先順位)

WordPressには「いつ、どのタイミングで処理を実行するか」という厳密な順序があります。

  • 実行タイミングの誤り: 例えば、wp_enqueue_scripts で読み込むべき処理を、それより前のタイミングで実行しようとしても無視されます。
  • 優先順位(Priority)の競合: 他のプラグインが同じフックに対して、より高い優先順位(小さな数字)で上書きしている場合があります。

Tips: add_action( ‘hook_name’, ‘your_function’, 999 ); のように、第3引数に大きな数字を入れて後から実行させてみてください。

4. 強力なキャッシュの影響

コードは正しくても、表示側が「古いデータ」を見せ続けているケースです。

  • ブラウザキャッシュ: ブラウザが古いCSSやJSを保持している。
  • プラグインキャッシュ: WP Rocket や W3 Total Cache などのキャッシュプラグイン。
  • サーバーサイドキャッシュ: OPcache や、サーバー独自のキャッシュ機能(エックスサーバーなど)。

5. 条件分岐タグの記述場所

特定のページでのみ動かしたいコードを is_front_page() などで囲む際、記述場所が適切でないと動作しません。
functions.phpの直下に書くと、WordPressが「どのページを表示しているか」を判断する前に判定が行われ、常に false になることがあります。

6. ファイルの文字コードとBOM

ファイルの保存形式が UTF-8 (BOMあり) になっていると、目に見えないコードが原因で不具合を起こすことがあります。
必ずUTF-8 (BOMなし)で保存してください。

現場で使える!デバッグ確認チェックリスト

  1. デバッグモードをONにしたか? wp-config.phpでdefine( ‘WP_DEBUG’, true );に設定し、エラーが出ていないか確認。
  2. 強制停止を試したか? ファイルの先頭に exit(‘test’);と書き、画面に”test”と出るか確認。
  3. キャッシュをすべて削除したか? プラグイン、ブラウザ、サーバーの3箇所を確認。
  4. 優先順位を「999」にしてみたか? add_actionやadd_filterの第3引数を大きくして試す。
  5. 全角スペースを検索したか? エディタの検索機能で「全角スペース」を確認。

WordPressでトラブルが発生した場合、まずは1つ目の「wp-config.phpでdefine( ‘WP_DEBUG’, true );」を試してみてください。
これによりデバッグモードに変更することができます。

それでもエラー原因が分からなければ、その他の方法を試してみましょう。

まとめ

functions.php が反映されない原因の多くは、「そもそもファイルが読み込まれていない」か「別の処理に上書きされている」のどちらかです。

まずは exit;などのデバッグ手法で「ファイルが生きているか」を確認し、次にキャッシュ、そしてフックの優先順位というステップで調査を進めるのが、解決への最短ルートです。