HOME

ABOUT

ARCHIVES

CONTACT

404error

WordPressでの404エラーページの作り方

どーも@PNRAです!

WordPressでオリジナルテーマを1から作っている方は、忘れがちな404エラーページ!
Wordpressの場合、何も設定していなくてもindex.phpに飛ぶように設計されているため大きな問題はないですが、リンク先が任意のページでなく、トップページだった時のがっかり感はかなり強いもの。
リダイレクト設定をしている場合などは必要ないですが、せっかくなので、設定方法を覚えておきましょう。

404error

参考イメージ:観光大使の有吉さんを配した広島県の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
<!-- 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」という形で指定する必要があります。

.htaccess
# 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になっていまうので、記述したことを忘れないようにしなければいけません。

function.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.(訳:最後まで読んでくれてありがとう。 / 注:ズールー語)