求助: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
相关产品推荐
相关产品推荐

