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

WooCommerce订单完成后点浏览器返回触发session expired hooks实现自动跳转问询

WooCommerce 结账会话过期自动重定向实现方案

核心实现逻辑

同时通过后端钩子+前端兜底逻辑覆盖所有场景:后端处理服务器主动渲染的过期页面,前端处理浏览器缓存返回的过期页面。

代码实现

所有代码均可添加到当前主题的functions.php文件,或者自定义功能插件中。

1. 后端重定向逻辑

add_action('template_redirect', 'wc_redirect_expired_checkout_session');
function wc_redirect_expired_checkout_session() {
    // 仅在非感谢页的结账页面触发
    if (is_checkout() && !is_wc_endpoint_url('order-received')) {
        global $woocommerce;
        // 检测是否存在会话过期错误提示
        $error_notices = wc_get_notices('error');
        foreach ($error_notices as $notice) {
            if (str_contains($notice['notice'], '您的会话已过期')) {
                // 可自定义跳转目标,替换为wc_get_cart_url()即可跳转到购物车
                wp_safe_redirect(wc_get_page_permalink('shop'));
                exit;
            }
        }
    }
}

2. 前端兜底逻辑(解决浏览器返回缓存问题)

用户点击浏览器返回按钮时,部分浏览器会直接加载本地缓存的页面不请求服务器,这段代码专门覆盖该场景:

add_action('wp_footer', 'wc_expired_checkout_frontend_redirect');
function wc_expired_checkout_frontend_redirect() {
    if (is_checkout() && !is_wc_endpoint_url('order-received')) {
    ?>
    <script>
    // 页面加载完成后检测
    document.addEventListener('DOMContentLoaded', function() {
        const errorTip = document.querySelector('.woocommerce-error li');
        if (errorTip && errorTip.textContent.includes('您的会话已过期')) {
            window.location.href = '<?php echo wc_get_page_permalink("shop"); ?>';
        }
    });
    // 覆盖浏览器往返缓存(bfcache)场景
    window.addEventListener('pageshow', function(e) {
        if (e.persisted) {
            const errorTip = document.querySelector('.woocommerce-error li');
            if (errorTip && errorTip.textContent.includes('您的会话已过期')) {
                window.location.href = '<?php echo wc_get_page_permalink("shop"); ?>';
            }
        }
    });
    </script>
    <?php
    }
}

验证注意事项

  • 测试前需清空WooCommerce缓存、浏览器缓存、站点CDN缓存(如有)
  • 若使用自定义结账模板,需确认错误提示的CSS选择器与代码中.woocommerce-error li匹配,不匹配可自行调整选择器内容
  • 跳转目标可按需修改,将wc_get_page_permalink('shop')替换为对应页面链接即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 18:36:06