wordpress WordPress での 404 ページの作成

2013年6月9日

<WordPress の仕様>

  • WordPress では該当するページがない場合、優先的に index.php が表示されるようになっている。
  • 404.php を作成すると、該当ページがない場合これが表示されるようになる。
  • 404.php は、「404 エラー」で表示するページを編集するテンプレート。
  • 404 ページが表示されているかは「is_404()」で判定して分岐できる。

404 エラーページの作成

  • 「指定されたページは存在しませんでした」や「ページが見つかりませんでした」などのエラーメッセージを表示。
  • 表示中のページの URL を「echo esc_html($_SERVER[‘SERVER_NAME’].$_SERVER[‘REQUEST_URI’]);」で出力
  • <a href=”<?php echo home_url(); ?>”>トップページへ戻る</a> でトップページへ戻るリンクを出力。
<!-- 404.php -->
<?php get_header(); ?>
<div id="content">
<h2>指定されたページは存在しませんでした。</h2>
<p>このページの URL :
<span class="error_msg">
http://<?php echo esc_html($_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI']); ?>
</span></p>
<p>現在表示する記事がありません。</p>
<p><a href="<?php echo home_url(); ?>">トップページへ戻る</a></p> 
</div>
<?php get_footer(); ?>

エラーが出ても 404.php でページが生成されない場合

エラーが出ても 404.php でページが生成されない場合があるので、.htaccess に「ErrorDocument 404 /index.php?error=404」という設定を追加する。

WordPress をサブディレクトリにインストールしている場合は、「ErrorDocument 404 /サブディレクトリ名/index.php?error=404」という形で指定する必要がある。

.htaccess
# BEGIN WordPress
・・・省略・・・
# END WordPress
ErrorDocument 404 /index.php?error=404

また、生成するページが見つからなくても、WordPress が類似した URL のページを自動的に表示するケースもあり、その場合はエラーページは表示されない。

.htaccess がない場合

ローカル環境などでは、パーマリンク設定がデフォルトのままだと.htaccess ファイルが生成されない場合があるようなので、そのような場合は、デフォルト以外に変更してみると、.htaccess ファイルが生成される。

必要のないページ種類の場合に404を表示する方法

  • WordPressはページ種類の制御をURLで行っているため、パーマリンク設定に従った変な URLを入力すると、関係のないページが表示される場合がある。
  • このような動作を防ぐためには、使用しているページ以外の場合に、404 を表示するように指定することもできる。
  • 但し、以下のこのコードはテーマ改修などで新たにページ種類を追加した場合も 404 になっていまうので、記述したことを忘れないようにしなければならない。
/*  存在しないページを指定された場合は 404 ページを表示する  */
function redirect_404() {
  //メインページ・シングルページ・アーカイブ(月別)・固定ページ 以外の指定の場合 404 ページを表示する
  if(is_home() || is_single() || is_month() || is_page()) return;
  include(TEMPLATEPATH . '/404.php');
  exit;
}
add_action('template_redirect', 'redirect_404');