問題描述

當遇到 404 錯誤時,可以使用 404.php 模板文件來呈現自定義錯誤消息。這在 Template Hierarchy 文章中有記錄。

我的目標是為 401,403 和 500 錯誤創建自定義錯誤頁面。我已經嘗試在我的主題的目錄中創建 401.php,403.php 和 500.php 文件,但這不起作用。

如何在 WordPress 中創建自定義 401,403 和 500 錯誤頁面?

最佳解決方案

錯誤頁面通過.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’) 創建頁面。他們可以標題你想要什麼,只要確保 slug 與下面的功能相同 (Slug: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!上述功能註釋

移動網站或更改網址結構時

使用上述功能記住的事情是儘管在將它們寫入 HTACCESS 文件之前,會檢查 ErrorDocument 指令是否存在,但是如果您更改或移動博客以反映更新的頁面位置,那麼它將不會重寫 ErrorDocument 指令。您將需要先刪除 HTACCESS 文件中現有的 ErrorDocument 指令,然後重新運行此函數以創建新的指令。

正確的鈎子只有一次才能開啓功能

另外需要注意的是這個功能,使用 init 操作會在每次你的頁面加載時運行,這是非常不必要和浪費的,所以我建議將其添加到插件中,並使用 register_activation_hook,因此它只會在插件激活時觸發一次

文件權限

此外,當使用上述功能時,您的.htaccess 是可寫的,因此請確保它具有正確的文件權限,如 CHMOD777 。

參考文獻

注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。