问题描述
为了防止我的访问者在维护期间看到我的网站的破坏版本,并让他们了解更新,我想将它们自动重定向到临时维护页面。我正在寻找可以在任何网站上使用的便携式解决方案,而不需要使用硬编码的 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 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。