WordPress自定义维护模式插件失效问题求助
修复WordPress自定义维护模式无效的问题
你的代码失效主要有两个核心原因:
- 钩子触发时机太晚:
get_header钩子是在主题头部模板加载后才触发,此时WordPress已经开始输出HTML内容,wp_die无法中断页面加载(HTTP响应头已发送),导致维护提示无法正常显示。 - 逻辑判断可优化:虽然原逻辑语法正确,但可以更清晰地匹配「未登录用户」或「无权限的登录用户」的场景,同时添加503状态码利于SEO。
修复后的代码(插件版)
class Maintenance { public function __construct() { // 使用template_redirect钩子,在模板加载前触发(未输出任何内容时) add_action('template_redirect', [$this, 'enable_maintenance_mode']); } public function enable_maintenance_mode() { // 判断:未登录 或 已登录但无编辑主题权限的用户,触发维护模式 if ( !is_user_logged_in() || !current_user_can('edit_themes') ) { // 返回503状态码,告知搜索引擎网站暂时不可用 wp_die( '网站维护中,请稍后再来。', '维护模式', [ 'response' => 503, 'back_link' => true // 添加返回上一页的链接(可选) ] ); } } } new Maintenance();
简化版(直接放到主题functions.php)
如果不想用类,可直接添加这段代码到主题的functions.php文件中:
function enable_maintenance_mode() { if ( !is_user_logged_in() || !current_user_can('edit_themes') ) { wp_die( '网站维护中,请稍后再来。', '维护模式', ['response' => 503] ); } } add_action( 'template_redirect', 'enable_maintenance_mode' );
注意事项
- 确保代码放在
functions.php的最顶部,避免其他主题代码先输出内容导致wp_die失效。 - 若需要更高权限的用户才能访问(比如仅管理员),可将
edit_themes替换为manage_options。 - 503状态码是关键:它会告诉搜索引擎网站只是暂时维护,不会影响站点的搜索排名。
内容的提问来源于stack exchange,提问作者newbiedev
相关产品推荐
相关产品推荐

