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

如何为插件返回按钮添加结账页来源判断跳转条件?

问题解决:登录页返回按钮按来源跳转至购物车/原页面

问题分析

你之前的代码未生效的核心原因是:将「是否来自结账页」的判断嵌套在了isset($_REQUEST['back'])分支内,但用户从结账页进入登录页的场景下,URL大概率不会携带back参数,导致判断逻辑根本没被触发,直接走了默认的else分支。

修正后的代码

$back_url = '';
if (!$modal) {
    // 判断是否来自结账页,先处理referer为空的情况避免报错
    $referer = wp_get_referer();
    $is_from_checkout = $referer && strpos($referer, '/checkout/') !== false;

    if ($is_from_checkout) {
        // 来自结账页,跳转至购物车
        $back_url = "https://example.com/cart";
    } else {
        // 保留原有逻辑作为默认 fallback
        if (isset($_REQUEST['back'])) {
            $back_url = "//" . $_SERVER['HTTP_HOST'];
        } else {
            $back_url = "//" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
            $back_url = remove_query_arg(array('login', 'type'), $back_url);
        }
    }
    $back_title = __('Go Back');
}

关键优化点

  1. 调整判断层级:将「结账页来源判断」提到最外层,优先触发你的自定义逻辑,不受back参数的限制
  2. 增加空值防护:用$referer &&避免strpos在浏览器屏蔽referer时抛出警告
  3. 保留原有逻辑:非结账页来源的场景仍沿用原代码的跳转规则,保证兼容性

备选方案(更可靠的来源判断)

如果遇到浏览器隐私设置屏蔽referer导致wp_get_referer()取不到值的情况,可以改用会话存储来源:

  • 在结账页的代码中添加:
    session_start();
    $_SESSION['previous_page'] = 'checkout';
    
  • 然后在登录页的返回按钮逻辑中修改判断:
    session_start();
    $is_from_checkout = isset($_SESSION['previous_page']) && $_SESSION['previous_page'] === 'checkout';
    // 判断后可以清空会话,避免后续页面误触发
    unset($_SESSION['previous_page']);
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 13:05:10