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

★★★ お知らせ ★★★

◆ 6月のPS Liveは決済サービスStripeのデモ!◆
決済サービスのStripeでサブスクリプションの支払い機能を作ってみた
Stripeの機能の一部を切り出して、簡単なサブスクリプションを作るとどうなるのかを、デモをまじえてご紹介します。
⇒ 詳細はこちらから

◆【セミナー開催】 可視化ツールGrafana~初めてのダッシュボード作成◆
デモンストレーション付き!
本セミナーでは、売上データを用いて、4種類のパネル作成方法をお見せします。
⇒ お申込みはこちらから

◆ エンジニア業務環境アンケート結果 ◆
エンジニアが自分の働き方にどういったことで満足していて、不満を感じているのか、働きたい会社像として何を求めているのか、業務環境調査を実施しました。ぜひご覧ください。
⇒ アンケート結果はこちらから

この記事では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.


*


質問はこちら 閉じる