WordPress で 404 ページが出ない(404.php の内容が反映されない)

パーマリンク設定で /post/%post_id% などとカスタム構造を設定しているせいではないかと思うが、どんな URL を入力しても 404.php は出てこない。ただし表示されるのはヘッダー、フッター、サイドバーのみで、もちろん記事の部分は空っぽなのだけど。

そこで、テーマファイルをカスタマイズして、記事が空っぽの場合には 404.php の内容を読み込ませることにした。ただし、404.php からヘッダーとフッターを取り除いておかないと重複してしまう。

というわけで、404.php から以下の2行を取り除いたものを 404_content.php として保存し、これを読み込ませてやることにする。

<?php get_header(); ?>

...

<?php get_footer(); ?>

あとは、page.php や single.php などのテンプレートファイルの中で、404_content.php を読み込ませたい部分に以下のコードを書き込めば OK。

<?php include (TEMPLATEPATH . '/404_content.php'); ?>

404.php が出ない原因がわかった(追記:2008.09.22)

その後、原因がわかった。.htaccess の中で、ファイルが見つからない場合には index.php にリダイレクトするように設定されているからだ。

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

これは WordPress の標準設定だと思うけど、そうするとデフォルトのテンプレートにも 404.php が入っている理由がよくわからない。この 404.php が使われるときもあるんだろうか・・?それとも過去の名残で残っているだけなのか・・。ナゾは残る。

というわけで、もう少し調べてみたところ、やはり標準状態では 404.php は使われないようだ。

これを使うようにするには、.htaccess と、各ページのテンプレートの修正が必要らしい。
あとは以下を見てください。

WordPressの404エラーをカスタマイズしてみたよ - Hinemosu