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 と、各ページのテンプレートの修正が必要らしい。
あとは以下を見てください。