最後更新:2026/10/13
客人在你的網站按了一個按鈕,跳出一個灰白色的方框,上面寫「目前要前往的連結已到期。」,旁邊什麼都沒有:沒有 Logo、沒有回首頁的按鈕。多數人看到這個畫面,會直接關掉分頁。
這是 WordPress 內建的錯誤畫面。它很少出現,但一出現就是客人最需要被安撫的時候。這篇教新北的店家把三種常見的錯誤畫面,換成和網站一致的樣子,並且一定有一個「回到首頁」的出口。
不想自己改?把這篇交給 AI
把這篇的網址(或全文)連同下面這段話貼給 AI:
我的網站是 WordPress。我想照下面這篇文章,把網站的錯誤畫面換成我的品牌樣式:一般錯誤訊息、網站發生嚴重錯誤、更新外掛時的維護畫面。
請先問我:我的品牌色、要留的聯絡電話或 LINE、我能不能用 FTP 或主機的檔案管理上傳檔案。
問清楚之後,再一步一步告訴我:要用哪一段程式碼、貼在哪裡、哪些地方要換成我自己的資料,以及改完怎麼測試。
如果文章的做法不適合我的網站,請直接告訴我原因和替代做法。
文章:(貼上這篇的網址,或整篇內容)
改之前先備份,密碼不要貼給 AI。
先分清楚是哪一種錯誤
WordPress 有好幾種「出錯了」的畫面,各自用不同的方式換:
找不到頁面(404)是佈景主題的事,在佈景主題裡改 404 範本就好,這篇不談。這篇處理的是另外三種:第一種是 WordPress 主動停下來的錯誤訊息,例如表單放太久、連結過期,或沒有權限做某件事;第二種是程式出了嚴重錯誤,畫面寫著「這個網站發生嚴重錯誤」;第三種是更新外掛、佈景主題的那幾十秒,訪客看到的「目前網站因例行性維護而暫時無法存取」。
第一種:一般錯誤訊息,用 wp_die_handler 換掉
WordPress 遇到要中止的情況,會呼叫一個叫 wp_die 的函式畫出錯誤頁。我們可以告訴 WordPress:「在前台的時候,改用我的版本畫」。
// 前台的 WordPress 錯誤訊息頁(wp_die)換成自己的樣子;後台和 AJAX 不動
add_filter('wp_die_handler', function ($handler) {
if (is_admin() || wp_doing_ajax()) {
return $handler;
}
return 'mimi_die_page';
});
function mimi_die_page($message, $title = '', $args = []) {
$args = wp_parse_args($args, ['response' => 500]);
$text = $message instanceof WP_Error ? $message->get_error_message() : $message;
$title = $title ?: '發生了一點問題';
if (!headers_sent()) {
status_header($args['response']);
nocache_headers();
header('Content-Type: text/html; charset=utf-8');
}
?>
<!doctype html>
<html lang="zh-Hant">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="robots" content="noindex">
<title><?php echo esc_html($title); ?>|<?php echo esc_html(get_bloginfo('name')); ?></title>
<style>
body { margin: 0; min-height: 100vh; display: grid; place-items: center;
background: #fffaf0; font-family: "Noto Sans TC", "Microsoft JhengHei", sans-serif; color: #1d1d1f; }
.box { max-width: 520px; margin: 24px; padding: 32px; background: #fff;
border: 2px solid #1d1d1f; border-radius: 20px; text-align: center; }
.box a { display: inline-block; margin-top: 16px; padding: 10px 24px; border-radius: 999px;
background: #62e79e; color: #1d1d1f; text-decoration: none; border: 2px solid #1d1d1f; }
</style>
</head>
<body>
<div class="box">
<h1><?php echo esc_html($title); ?></h1>
<div><?php echo wp_kses_post($text); ?></div>
<a href="<?php echo esc_url(home_url('/')); ?>">回到首頁</a>
</div>
</body>
</html>
<?php
die();
}
幾個地方說明一下。後台和 AJAX 維持原本的畫面,因為後台的錯誤訊息是給你自己看的,AJAX 是網頁背後傳資料用的,換成整頁 HTML 反而會讓功能壞掉。status_header 保留原本的錯誤代碼(例如 403),搜尋引擎和瀏覽器才知道這是錯誤頁;noindex 讓搜尋引擎不要收錄這一頁。訊息內容用 wp_kses_post 過濾,原本訊息裡的連結會保留,危險的標籤會被拿掉。顏色、圓角、按鈕樣式換成你網站的品牌色就好。
程式碼放在 Code Snippets 這類外掛或子主題,放法和備份方式見〈WooCommerce 結帳頁改成台灣習慣〉。我們在測試站觸發一次連結過期的錯誤:原本是灰白的方框,換成了品牌色的卡片,標題後面帶著網站名稱,下面有回到首頁的按鈕,錯誤代碼仍然是 403。
第二種:網站發生嚴重錯誤
外掛衝突、主機升級 PHP 之後,可能出現「這個網站發生嚴重錯誤」。WordPress 處理這種錯誤時,最後也是呼叫 wp_die 畫畫面,所以裝了上面的程式碼之後,這個畫面也會變成你的樣式,我們在測試站故意製造一個錯誤確認過。
不過要記得一種情況:如果出錯的剛好是放這段程式碼的外掛本身,它就沒辦法幫忙了。更保險的做法,是在 wp-content 資料夾裡放一個叫 php-error.php 的檔案。WordPress 遇到嚴重錯誤時,會優先顯示這個檔案,不管哪個外掛壞掉都一樣:
<?php
// wp-content/php-error.php:網站發生嚴重錯誤時,顯示這一頁
header('HTTP/1.1 500 Internal Server Error');
header('Content-Type: text/html; charset=utf-8');
?>
<!doctype html>
<html lang="zh-Hant">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>網站暫時無法使用</title>
</head>
<body style="font-family: sans-serif; text-align: center; padding: 60px 20px;">
<h1>網站暫時出了點狀況</h1>
<p>我們已經在處理,請稍後再試。急事請來電 02-1234-5678。</p>
</body>
</html>
這個檔案要寫得越單純越好,只用最基本的 HTML,不要呼叫任何 WordPress 的功能,因為顯示它的時候,網站本身可能正處在壞掉的狀態。留一支電話或 LINE,客人有急事還找得到你。
第三種:更新時的維護畫面
更新外掛或佈景主題的時候,WordPress 會讓網站暫停幾秒到幾十秒,這段時間進來的訪客會看到一行白底黑字的維護訊息。在 wp-content 資料夾放一個 maintenance.php,就能換成自己的版本:
<?php
// wp-content/maintenance.php:更新外掛、主題的那幾十秒,顯示這一頁
http_response_code(503);
header('Retry-After: 300');
header('Content-Type: text/html; charset=utf-8');
?>
<!doctype html>
<html lang="zh-Hant">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>網站更新中</title>
</head>
<body style="font-family: sans-serif; text-align: center; padding: 60px 20px;">
<h1>網站更新中</h1>
<p>大約一分鐘就好,請稍後重新整理這一頁。</p>
</body>
</html>
503 是「暫時無法服務」的代碼,Retry-After 告訴搜尋引擎幾秒後再來,這樣更新期間被 Google 剛好爬到,也不會被當成網站壞了。我們在測試站模擬更新中的狀態,訪客看到的就是這一頁、代碼 503;更新狀態結束後,網站自動恢復正常。
php-error.php 和 maintenance.php 都是 WordPress 認得的特殊檔名,用主機的檔案管理或 FTP 上傳到 wp-content 資料夾就生效,不用另外設定。
錯誤頁也是品牌的一部分
沒有網站能保證永遠不出錯,能做的是出錯的時候,讓客人知道這還是同一家店、事情有人在處理、下一步可以去哪裡。這三個畫面加起來不到一個下午的工作量,卻能少掉很多「你們網站是不是倒了」的訊息。
網站穩定比錯誤頁更重要。如果你的網站常常出錯,先回頭檢查外掛和主機,或參考〈WordPress 網站上線前的檢查清單〉。MIMI 專做客製化網頁設計,從畫面到維護都能幫你規劃。想先了解網站能做到什麼,可以看〈IG 帳號不是你的資產〉。MIMI 提供新北網頁設計服務,新北的店家可以用電話、Email 直接和設計師討論;費用可以先看首頁的製作費用參考,歡迎聯絡 MIMI。
