You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WordPress自定义维护模式插件失效问题求助

修复WordPress自定义维护模式无效的问题

你的代码失效主要有两个核心原因:

  1. 钩子触发时机太晚:get_header钩子是在主题头部模板加载后才触发,此时WordPress已经开始输出HTML内容,wp_die无法中断页面加载(HTTP响应头已发送),导致维护提示无法正常显示。
  2. 逻辑判断可优化:虽然原逻辑语法正确,但可以更清晰地匹配「未登录用户」或「无权限的登录用户」的场景,同时添加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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 02:05:21