WordPressの「Call to undefined function get_header()」エラーの原因と対策

◆ Live配信スケジュール ◆
サイオステクノロジーでは、Microsoft MVPの武井による「わかりみの深いシリーズ」など、定期的なLive配信を行っています。
⇒ 詳細スケジュールはこちらから
⇒ 見逃してしまった方はYoutubeチャンネルをご覧ください
【3/22開催】テックブログを書こう!アウトプットのススメ
1年で100本ブログを出した新米エンジニアがPV数が伸びなくてもTech Blogを書き続ける理由とは?
https://tech-lab.connpass.com/event/312805/

【4/18開催】VSCode Dev Containersで楽々開発環境構築祭り〜Python/Reactなどなど〜
Visual Studio Codeの拡張機能であるDev Containersを使ってReactとかPythonとかSpring Bootとかの開発環境をラクチンで構築する方法を紹介するイベントです。
https://tech-lab.connpass.com/event/311864/

この記事ではWordPressで発生する「Call to undefined function get_header()」というエラーの原因と解決方法をまとめています。

概要

WordPressサイトのエラーログで以下のようなエラーが発生しました。

[28-Jul-2021 05:50:11 UTC] PHP Fatal error:  Uncaught Error: Call to undefined function get_header() in /wordpress/wp-content/themes/XXXXXXXX/index.php:1
Stack trace:
#0 {main}
  thrown in /wordpress/wp-content/themes/XXXXXXXX/index.php on line 1

メッセージは表示されますが、サイトは問題なく動作しています。

エラーメッセージから、テーマに問題があると思われます。しかし特に編集した記憶もなく、テーマを再度アップロードしても直りません。

この問題を調査し、原因を特定しました。

原因

エラーメッセージを読むと「Call to undefined function get_header()」とあります。つまりget_header()という関数が定義されていないのがエラーの原因です。

エラーが発生しているindex.phpを確認すると、エラーの行に以下のような記述があります。

<?php get_header(); ?>

このファイルを見ても、get_header()の定義は存在しません。なので「Call to undefined function get_header()」というエラーが出るのも当然です。

今回のエラーの原因となっているWordPressテーマのindex.phpはWordPress本体から呼び出されることを前提としたファイルなのです。そのためget_header()の定義はこのファイルにはなく、WordPress本体側で定義されています。

対策

テーマファイルの直接アクセスは想定されていない動作のようです。対策としては、テーマファイルを編集するか、アクセス制限を掛けるなどの方法が考えられます。テーマファイルの編集は、アップデート時に修正が必要になりメンテナンス性が良くありません。なので、今回は.htaccessによるアクセス制限を紹介します。

以下の.htaccessを/wp-content/themesに配置します。以下は「example.com」からのアクセスのみ許可する例です。

SetEnvIf Referer "example\.com" ref_allow

Order Deny,Allow
Deny from all
Allow from env=ref_allow
アバター画像
プロフェッショナルサービスチームの中の人。
ご覧いただきありがとうございます! この投稿はお役に立ちましたか?

役に立った 役に立たなかった

0人がこの投稿は役に立ったと言っています。


ご覧いただきありがとうございます。
ブログの最新情報はSNSでも発信しております。
ぜひTwitterのフォロー&Facebookページにいいねをお願い致します!



>> 雑誌等の執筆依頼を受付しております。
   ご希望の方はお気軽にお問い合わせください!

Be the first to comment

Leave a Reply

Your email address will not be published.


*


質問はこちら 閉じる