問題描述
為了防止我的訪問者在維護期間看到我的網站的破壞版本,並讓他們瞭解更新,我想將它們自動重定向到臨時維護頁面。我正在尋找可以在任何網站上使用的行動式解決方案,而不需要使用硬編碼的 URL 。
登入管理員 (或其他使用者選擇的級別) 應該可以完全訪問 back-end 和 front-end 。有很多外掛提供這個功能,但我正在尋找一個 code-only 解決方案。
最佳解決方案
WordPress 具有處理維護模式的嵌入式功能。
當您從 WP 儀錶板升級外掛或 WordPress 核心時,WordPress 進入維護模式:它嘗試載入位於內容資料夾 (通常為/wp-content) 中的名為 maintenance.php 的檔案,如果該檔案不存在,則 WP 顯示預設訊息。
我建議您使用該檔案,這樣您將保持一致的 manually-triggered 維護和 WordPress-handled 維護。
如何
-
首先建立
maintenance.php檔案並放置所需的內容。對於樣式我建議你把 CSS 放在檔案本身,使用<style>標籤; 一般這不是很好的建議,但在這種情況下,它可以讓您使用檔案 WordPress-handled 維護模式,當沒有主題載入 (主題可能升級,所以不可靠) 。 -
儲存剛剛在內容資料夾中建立的檔案 (通常為
/wp-content) 。 -
在你的
functions.php放:add_action( 'wp_loaded', function() { global $pagenow; if( defined( 'IN_MAINTENANCE' ) && IN_MAINTENANCE && $pagenow !== 'wp-login.php' && ! is_user_logged_in() ) { header( 'HTTP/1.1 Service Unavailable', true, 503 ); header( 'Content-Type: text/html; charset=utf-8' ); if ( file_exists( WP_CONTENT_DIR . '/maintenance.php' ) ) { require_once( WP_CONTENT_DIR . '/maintenance.php' ); } die(); } });此程式碼將檢查常量 (請參閱下一個點),如果使用者未登入,請載入在點 1 建立的檔案並退出。
如果只允許具有特定功能的使用者使用
current_user_can('capability_to_allow')而不是is_user_logged_in()。有關更多資訊,請參閱 Codex 。也許你可以新增到
maintenance.php一個登入頁面的連結; 以這種方式,non-logged 使用者可以點選它,而無需手動輸入位址列中的登入 URL 。如果您使用第三方開發的主題,請使用 child theme; 以這種方式,您將能夠安全地更新主題而不會丟失您的更改。
-
當您要啟用維護模式時,開啟
wp_config.php並將其放在:define('IN_MAINTENANCE', true);之後,當您準備再次公開您的網站時,只需刪除該行或將
true更改為false,以便於更輕鬆的 re-enabling 。
參考文獻
注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。