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

WordPress:访问wp-login.php等页面时重定向至带#login的上一页

解决方案

1. 替换正确的Hook

你之前使用的admin_init仅针对后台管理页面初始化,对wp-login.php这类登录相关页面不生效,应该改用login_init钩子——它会在登录、注册、找回密码页面加载时触发,精准覆盖你的需求场景。

2. 安全获取来源页并构造跳转链接

用WordPress内置的wp_get_referer()函数获取上一页链接,比直接操作$_SERVER变量更安全。同时要处理来源页为空的情况(比如用户直接在地址栏输入wp-login.php),设置网站首页作为默认跳转页。

3. 完整实现代码

function redirect_default_login_to_popup() {
    // 仅对wp-login.php相关页面进行处理
    if ($GLOBALS['pagenow'] !== 'wp-login.php') {
        return;
    }

    // 定义需要拦截的动作:登录、注册、找回密码
    $target_actions = array('', 'register', 'lostpassword');
    $current_action = isset($_GET['action']) ? $_GET['action'] : '';

    if (!in_array($current_action, $target_actions)) {
        return;
    }

    // 获取上一页链接,为空则跳转至首页
    $referrer = wp_get_referer();
    $redirect_url = $referrer ? $referrer : home_url();

    // 添加#login锚点唤起弹窗
    $redirect_url = trailingslashit($redirect_url) . '#login';

    // 避免循环跳转:如果跳转目标还是wp-login,直接跳首页加锚点
    if (strpos($redirect_url, 'wp-login.php') === false) {
        wp_safe_redirect($redirect_url);
        exit;
    } else {
        wp_safe_redirect(home_url('#login'));
        exit;
    }
}
add_action('login_init', 'redirect_default_login_to_popup');

4. 实现方式合理性说明

这种方案是合适的:

  • 强制用户使用统一的弹窗表单,确保会员信息收集的一致性(比如必须填写姓名、同意条款);
  • 依赖WordPress原生函数处理重定向和来源页,比自定义逻辑更安全可靠;
  • 加入了循环跳转防护,避免用户陷入无限重定向的问题;
  • 仅拦截指定的登录相关动作,不会影响后台其他功能的正常使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 21:48:13