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

WordPress维护模式管理员登录权限问题及代码修复求助

WordPress维护模式管理员登录修复方案

问题根源

现有代码存在几个关键问题导致功能失效:

  • 表单action中的PHP代码被当作字符串输出,未被解析执行
  • 用户密码验证逻辑错误(直接对比哈希密码与明文)
  • 维护模式判断逻辑有误,导致维护页失效
  • 错误使用get_option('admin_email')获取用户ID(该选项返回邮箱而非ID)
  • 误用不存在的核心函数wp_maintenance_mode(),需替换为自定义维护模式开关逻辑

修正后的完整代码

// 维护模式页面钩子,优先执行
add_action('template_redirect', 'custom_maintenance_mode_page');

function custom_maintenance_mode_page() {
    // 已登录且有权限的管理员跳过维护页
    if (is_user_logged_in() && current_user_can('edit_themes')) {
        return;
    }

    // 维护页内容
    $text = '站点正在更新,请稍候。';
    $text2 = '如需关闭维护模式,请输入站点管理员的邮箱或用户名及密码';

    ?>
    <html>
    <body>
    <div style="text-align:center;margin-top:100px;">
        <p class="txt-edit_themes"><?php echo esc_html($text); ?></p>
        <p class="txt-edit_themes"><?php echo esc_html($text2); ?></p>
        
        <!-- 使用正确的登录URL,直接调用函数而非嵌套PHP -->
        <form method="post" action="<?php echo esc_url(wp_login_url(get_permalink())); ?>" class="input-group">
            <p><input type="text" name="log" id="user_Login" placeholder="邮箱或用户名"></p>
            <p><input type="password" name="pwd" id="user_Pass" placeholder="密码"></p>
            <p><input type="submit" name="wp-submit" value="登录" class="button-primary"></p>
            <!-- 登录成功后跳转至维护模式设置页 -->
            <input type="hidden" name="redirect_to" value="<?php echo esc_url(admin_url('admin.php?page=site-maintenance')); ?>">
            <?php wp_nonce_field('login_form'); ?>
        </form>
    </div>
    </body>
    </html>
    <?php
    die(); // 终止页面继续加载,确保维护页独占显示
}

// 可选:管理员登录后自动关闭维护模式(适配自定义开关逻辑)
add_action('wp_login', 'auto_disable_maintenance_on_admin_login', 10, 2);

function auto_disable_maintenance_on_admin_login($user_login, $user) {
    if (current_user_can('edit_themes')) {
        // 替换为你实际的维护模式开关逻辑,比如更新选项
        update_option('site_maintenance_mode', 'off');
    }
}

关键修改说明

  1. 表单Action修复:直接在HTML中调用wp_login_url()并传入当前页面作为回调,确保PHP代码被正确解析,同时用esc_url()保证URL安全。
  2. 维护模式判断逻辑:先判断已登录且有权限的用户,直接返回跳过维护页;其他用户显示维护页并die()终止加载,避免维护模式失效。
  3. 登录表单标准化:使用WordPress标准登录字段名(log、pwd、wp-submit),添加redirect_to隐藏字段,登录成功后直接跳转到维护模式设置页面。
  4. 密码验证安全化:依赖WordPress原生登录机制验证密码,避免手动对比哈希值的错误。
  5. 自动关闭维护模式:通过wp_login钩子,管理员登录后自动关闭维护模式(需替换为你实际的开关逻辑,比如自定义选项控制)。

额外注意事项

  • 确保update_option('site_maintenance_mode', 'off')与你的维护模式开关逻辑一致。
  • 测试前确认管理员账号正常,避免锁死自身访问。
  • 保留wp_nonce_field()防止CSRF攻击,提升安全性。

内容的提问来源于stack exchange,提问作者php

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 11:25:18