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

この記事では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人がこの投稿は役に立ったと言っています。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です