WordPressでの404エラーページの作り方
どーも@PNRAです!
WordPressでオリジナルテーマを1から作っている方は、忘れがちな404エラーページ!
Wordpressの場合、何も設定していなくてもindex.phpに飛ぶように設計されているため大きな問題はないですが、リンク先が任意のページでなく、トップページだった時のがっかり感はかなり強いもの。
リダイレクト設定をしている場合などは必要ないですが、せっかくなので、設定方法を覚えておきましょう。
参考イメージ:観光大使の有吉さんを配した広島県の404エラーページ
前提条件
WordPressにおける404エラーの基本的な知識として、
・WordPressでは該当するページがない・或いは有効期限が過ぎている場合は、優先的に index.php が表示されるようになっている。
・404.phpを作成すると、該当ページがない場合こちらを優先的に表示する。
・404.phpは、「404エラー」で表示するページを編集するテンプレートphp。
・404ページが表示されているかは「is_404()」で判定して分岐できる。
というのが基本的な知識となります。それでは実際に作っていきましょう。
404エラーページの作り方
基本的には、page.phpやsingle.phpなどのテンプレートphpと同じように、<?php get_header(); ?>~<?php get_footer(); ?>で囲った中に書き出すコンテンツを記載していきます。
404エラーページに必要なコンテンツとしては、
・404エラーメッセージ
・トップページへのリンク
・URLの間違いの指示
あたりでしょうか。
以下には簡易的な404.phpの記述をしておきます。
もちろん自由に編集して構いませんので、参考程度にどうぞ!
<!-- 404.php -->
<?php get_header(); ?>
<div class="container">
<h2>Nothing to see here</h2>
<p>We can't find this page / 404 error/</p>
<p>You might mistake type this page URL :
<span class="error_msg">
http://<?php echo esc_html($_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI']); ?>
</span></p>
<p><a href="<?php echo home_url(); ?>">HOME</a></p>
</div>
<?php get_footer(); ?>
作成したページを確認したい場合は、ホームページのトップページのディレクトリ直下に/404を加えて確認してみましょう。
http://www.yourownwebsite.com/404/
404.phpを作ったのに、エラーページが表示されない場合
エラーが出ても 404.phpでページが生成されない場合があるので、.htaccess に「ErrorDocument 404 /index.php?error=404」という設定を追加します。
WordPressをサブディレクトリにインストールしている場合は、「ErrorDocument 404 /サブディレクトリ名/index.php?error=404」という形で指定する必要があります。
# BEGIN WordPress
・・・省略・・・
# END WordPress
ErrorDocument 404 /index.php?error=404
また、生成するページが見つからなくても、WordPress が類似したURLのページを自動的に表示するケースもあり、その場合はエラーページは表示されません。
.htaccess がない場合
ローカル環境などでは、パーマリンク設定がデフォルトのままだと.htaccessファイルが生成されない場合があるようなので、そのような場合は、デフォルト以外に変更してみると、.htaccessファイルが生成されます。
.htaccessファイルの編集の仕方については、All About:.htaccessファイルの書き方と設置方法あたりを見ながらやってみましょう。
意図しないページ以外は確実に404エラーページを表示させる方法
WordPressはページ種類の制御をURLで行っているため、パーマリンク設定に従った変なURLを入力すると、関係のないページが表示される場合があります。
このような動作を防ぐためには、使用しているページ以外の場合に、404.phpを表示するように指定することもできます。
但し、以下のこのコードはテーマ改修などで新たにページ種類を追加した場合も404.phpになっていまうので、記述したことを忘れないようにしなければいけません。
/* 存在しないページを指定された場合は 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');
こんなところでしょうか。
それではまた次回( ´•౪•`)
Siyabonga ekufundeni kwakho.(訳:最後まで読んでくれてありがとう。 / 注:ズールー語)