如何为插件返回按钮添加结账页来源判断跳转条件?
问题解决:登录页返回按钮按来源跳转至购物车/原页面
问题分析
你之前的代码未生效的核心原因是:将「是否来自结账页」的判断嵌套在了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'); }
关键优化点
- 调整判断层级:将「结账页来源判断」提到最外层,优先触发你的自定义逻辑,不受
back参数的限制 - 增加空值防护:用
$referer &&避免strpos在浏览器屏蔽referer时抛出警告 - 保留原有逻辑:非结账页来源的场景仍沿用原代码的跳转规则,保证兼容性
备选方案(更可靠的来源判断)
如果遇到浏览器隐私设置屏蔽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
相关产品推荐
相关产品推荐

