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

求助:WordPress自定义登录页错误登录跳转至默认页面如何修改

解决WordPress自定义登录页错误跳转并显示提示的问题

别担心,我一步步带你搞定这个问题——全程用WordPress自带的安全函数,不用复杂的PHP知识,跟着抄代码就行:

第一步:修改自定义登录页的表单提交地址

首先,你需要把登录表单的提交目标从默认的wp-login.php改成WordPress的后台处理接口,这样我们才能自己控制跳转逻辑。找到你自定义登录页里的<form>标签,改成下面这样:

<form id="loginform" action="<?php echo esc_url( admin_url('admin-post.php') ); ?>" method="post">
    <!-- 新增隐藏字段,告诉WordPress这是我们的自定义登录动作 -->
    <input type="hidden" name="action" value="custom_login">
    
    <!-- 保留你原来的用户名输入框(name属性必须是log) -->
    <p>
        <label for="user_login">用户名<br>
        <input type="text" name="log" id="user_login" class="input" value="" size="20"></label>
    </p>
    
    <!-- 保留你原来的密码输入框(name属性必须是pwd) -->
    <p>
        <label for="user_pass">密码<br>
        <input type="password" name="pwd" id="user_pass" class="input" value="" size="20"></label>
    </p>
    
    <!-- 记住我复选框(可选,name属性保持rememberme) -->
    <p class="forgetmenot">
        <label for="rememberme"><input name="rememberme" type="checkbox" id="rememberme" value="forever"> 记住我</label>
    </p>
    
    <!-- 登录按钮 -->
    <p class="submit">
        <input type="submit" name="wp-submit" id="wp-submit" class="button button-primary button-large" value="登录">
    </p>
</form>

第二步:添加登录处理的PHP函数

接下来,我们要告诉WordPress怎么处理这个自定义登录请求。把下面这段代码加到你的主题functions.php文件里(直接复制粘贴到文件末尾就行):

// 注册自定义登录处理的钩子(同时支持游客和已登录用户触发)
add_action('admin_post_nopriv_custom_login', 'custom_login_handler');
add_action('admin_post_custom_login', 'custom_login_handler');

function custom_login_handler() {
    // 获取表单提交的用户名、密码和"记住我"状态
    $username = isset($_POST['log']) ? sanitize_user($_POST['log']) : '';
    $password = isset($_POST['pwd']) ? $_POST['pwd'] : '';
    $remember = isset($_POST['rememberme']) ? true : false;
    
    // 用WordPress自带的安全函数验证登录信息
    $user = wp_authenticate($username, $password);
    
    if (is_wp_error($user)) {
        // 登录失败:跳回你的自定义登录页,带上错误标识
        // 把YOUR_CUSTOM_LOGIN_PAGE_SLUG改成你自定义登录页的别名(比如你后台设置的页面slug是custom-login,就填这个)
        $login_page_url = get_permalink(get_page_by_path('YOUR_CUSTOM_LOGIN_PAGE_SLUG'));
        $error_url = add_query_arg('login_error', $user->get_error_code(), $login_page_url);
        wp_redirect($error_url);
        exit;
    } else {
        // 登录成功:跳转到后台仪表盘(想跳首页就改成home_url())
        wp_set_auth_cookie($user->ID, $remember);
        wp_redirect(admin_url());
        exit;
    }
}

⚠️ 重要提示:一定要把代码里的YOUR_CUSTOM_LOGIN_PAGE_SLUG换成你自定义登录页的实际slug——比如你在WordPress后台创建页面时,别名设置的是custom-login,就改成这个值。

第三步:在自定义登录页显示错误提示

最后,在你的自定义登录页模板里,添加一段代码来显示错误信息。把这段代码放在表单上方合适的位置(比如页面顶部):

<?php
// 检查是否有登录错误参数
if (isset($_GET['login_error'])) {
    $error_code = $_GET['login_error'];
    // 根据错误代码显示对应的提示
    switch ($error_code) {
        case 'invalid_username':
            $error_msg = '用户名不存在,请检查输入';
            break;
        case 'incorrect_password':
            $error_msg = '密码错误,请重新输入';
            break;
        default:
            $error_msg = '登录失败,请检查用户名和密码';
            break;
    }
    // 显示错误提示(可以自己加CSS样式美化,比如改颜色、加边框)
    echo '<div style="color: #dc3232; padding: 10px; border: 1px solid #dc3232; border-radius: 4px; margin-bottom: 15px;">' . esc_html($error_msg) . '</div>';
}
?>

这样就完成了:登录失败时会自动跳回你的自定义登录页,并且显示对应的错误提示;登录成功则正常跳转到后台。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:54:42