Call to undefined function get_header()

このブログ(WordPress)のサーバのエラーログを見ると以下の一行があった。


PHP Fatal error: Call to undefined function get_header() in
/home/the2g.com/public_html/wp-content/themes/whiteplain/index.php on line 1

自作テーマwhiteplain内のindex.phpでエラーが起きたらしい。さっそくindex.phpのget_header()確認したが、特に問題があるような記述はなかった。


// themes/whiteplain/index.php
<?php get_header(); ?>

しかし、エラーに表記されているURLをブラウザに打ち込むと、上記と同じエラーが画面に表示された。

http://www.the2g.com/wp-content/themes/whiteplain/index.php

当たり前ですが、display_errorやerror_reportingがOnになっていないと真っ白な画面が表示される。

エラーログの理由

そもそもエラーログがついた状況を調べてみると、検索ロボットが自サイトに訪れたときについたものだった。メンテナンスモードのリダイレクトでも起こるらしいが。

また、通常このようなテーマディレクトリのindex.phpに人間がアクセスすることはないため、WordPress自体としては問題のないエラーらしい。

対応策

問題ないといっても”もやもや”するので対策した。get_headerが見つからないときは、ホームにリダイレクトさせている。


<php
  if (function_exists('get_header')) {
      get_header();
  } else {
      header("Location: http://" . $_SERVER['HTTP_HOST'] . "");
      exit;
  };
?>

他ブログはどうしているか

国内の有名どころなブログはどう対策しているかざっと確認した。外部ファイルのパスからテーマ名を調べindex.phpに直アクセスしてみたが、どこも特に対策(リダイレクトなど)はしていないみたいだった。

テーマディレクトリへのロボットのクロールは拒否しておき、人間による直アクセスはスルーが妥当みたいだ。なにせ今回はindex.phpだったが、これが同じディレクトリ内のhome.phpだったりsingle.phpを直接打ち込んだとしてもエラーは起きるわけで、全部対応してるとキリがない。

という訳で続けてロボットの設定を行うことにした。

ロボット対策

theme配下までクロールさせる必要がないのでこれを禁止させる。下記をrobots.txtに記述してルートに配置した。


# Disallowed and allowed directories and files
 
User-agent: *
Disallow: /wp-admin/
Disallow: /wp-content/
Disallow: /wp-includes/
Disallow: /comment-page-
Disallow: /trackback/
Disallow: /xmlrpc.php
Disallow: /feed/
Allow: /wp-content/uploads/

3行目だけあれば十分だが、ついでなので他も設定した。

コメントする




two × four =