web-dev-qa-db-ja.com

カスタム401、403、および500エラーページを作成する方法?

404エラーが発生した場合は、404.phpテンプレートファイルを使用してカスタムエラーメッセージを表示できます。これは Template Hierarchy の記事に書かれています。

私の目的は、401、403、500エラー用のカスタムエラーページを作成することです。テーマのディレクトリに401.php、403.php、500.phpのファイルを作成しようとしましたが、うまくいきません。

WordPressで401、403、500のカスタムエラーページを作成する方法を教えてください。

26
henrywright

エラーページは.HTACCESSを介して提供されます。Apacheを使用している場合はErrorDocumentディレクティブを使用してステータスとURLをそれに追加します。

それで、それはあなたの.htaccessファイルでこのように見えるでしょう:

ErrorDocument 401 http://yourwebsite.com/error-401
ErrorDocument 403 http://yourwebsite.com/error-403
ErrorDocument 500 http://yourwebsite.com/error-500

あなたは以下の機能を使用することができます。これは動的にあなたのためにHTACCESSファイルに必要なものを追加するでしょうか、あるいは手動でそれをすることができます。

1.ページを追加します。

その後、ダッシュボードに移動して、通常のページと同じようにページを作成する必要があります( 'Dashboard'> 'Pages'> 'New')。スラッグが以下の関数と同じであることを確認してください(スラッグ:error-401、error-403、error-404、error-500)。また、ページテンプレートを使用して、これらの特定のページに必要なレイアウトやスタイルを作成できます。 WordPress Codex の指示に従ってください。

2.関数を追加します。

// Create Custom Error Pages in WordPress using HTACCESS
function royal_custom_error_pages() {

    // Get HTACCESS path & dynamic website url
    $htaccess_file = '.htaccess';
    $website_url = get_bloginfo('url').'/';

    // Check & prevent writing error pages more than once
    $check_file = file_get_contents($htaccess_file);
    $this_string = '# BEGIN WordPress Error Pages';

    if( strpos( $check_file, $this_string ) === false) {

    // Setup Error page locations dynamically
    $error_pages .= PHP_EOL. PHP_EOL . '# BEGIN WordPress Error Pages'. PHP_EOL. PHP_EOL;
    $error_pages .= 'ErrorDocument 401 '.$website_url.'error-401'.PHP_EOL;
    $error_pages .= 'ErrorDocument 403 '.$website_url.'error-403'.PHP_EOL;
    $error_pages .= 'ErrorDocument 404 '.$website_url.'error-404'.PHP_EOL;
    $error_pages .= 'ErrorDocument 500 '.$website_url.'error-500'.PHP_EOL;
    $error_pages .= PHP_EOL. '# END WordPress Error Pages'. PHP_EOL;

    // Write the error page locations to HTACCESS
    $htaccess = fopen( $htaccess_file, 'a+');
    fwrite( $htaccess, $error_pages );
    fclose($htaccess);

    }
}

add_action('init','royal_custom_error_pages'); // This will run the function everytime, not ideal!

// register_activation_hook( __FILE__, 'royal_custom_error_pages' ); // Using a plugin, runs only once!

NB !!上記の機能に関する注記

あなたのウェブサイトを移動したりURL構造を変更したりするとき

上記の関数に関して覚えておくべきことは、それらがあなたのHTACCESSファイルにそれらを書く前にErrorDocumentディレクティブが既に存在するかどうか確かめるためにそれがあなたが更新されたページ位置を反映するためにあなたのブログを変えるか動かしてもErrorDocumentディレクティブを書き換えないことを確かめるが最初にHTACCESSファイル内の既存のErrorDocumentディレクティブを削除してから、この関数を再実行して新しいディレクティブを作成する必要があります。

関数のみを起動するようにフックを修正してください

もう一つ注意すべきことは、ページをロードするたびにinitアクションを使用することは非常に不必要で無駄なので実行するので、プラグインに追加してregister_activation_hookを使用することを推奨します。

ファイルのアクセス許可

また、上記の関数を使用するときは、あなたの.htaccessが書き込み可能であることが必須であるので、それが正しいファイル許可、CHMOD777のようなものを持っていることを確認してください。

14
Matt Royal