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

如何限制WooCommerce结账页仅允许从购物车页按钮访问?

解决WooCommerce直接访问结账页的限制问题

要实现仅允许用户从购物车页点击结账按钮进入结账页,可通过以下两种方案实现:

方案一:基于HTTP Referer验证

通过检查请求的来源URL,判断用户是否从购物车页跳转而来:

add_action('template_redirect', 'restrict_checkout_access_from_direct_url');
function restrict_checkout_access_from_direct_url() {
    // 仅对结账页生效,排除订单完成页面
    if (is_checkout() && !is_wc_endpoint_url('order-received')) {
        $referer = wp_get_referer();
        
        // 验证来源是否为购物车页
        if (!$referer || strpos($referer, wc_get_cart_url()) === false) {
            wc_add_notice(__('请先在购物车页完成信息填写后,点击结账按钮进入结账流程。', 'woocommerce'), 'error');
            wp_redirect(wc_get_cart_url());
            exit;
        }
    }
}

说明

  • 该方案依赖浏览器发送的Referer信息,大部分场景下有效,极少数隐私设置较高的浏览器可能不发送Referer
  • 将代码添加到主题的functions.php文件或自定义插件中即可生效

方案二:基于Session验证(更严谨)

通过在购物车页点击结账按钮时设置Session标记,结账页验证该标记是否存在:

// 购物车页提交结账请求时设置Session
add_action('woocommerce_before_cart', 'set_checkout_access_session');
function set_checkout_access_session() {
    if (isset($_POST['proceed']) && $_POST['proceed'] === 'checkout') {
        WC()->session->set('allowed_checkout_access', true);
    }
}

// 结账页验证Session标记
add_action('template_redirect', 'restrict_checkout_with_session');
function restrict_checkout_with_session() {
    if (is_checkout() && !is_wc_endpoint_url('order-received')) {
        if (!WC()->session->get('allowed_checkout_access')) {
            wc_add_notice(__('请通过购物车页的结账按钮进入结账流程。', 'woocommerce'), 'error');
            wp_redirect(wc_get_cart_url());
            exit;
        }
        // 进入结账页后清除标记,确保每次都需从购物车页触发
        WC()->session->__unset('allowed_checkout_access');
    }
}

说明

  • 该方案不受浏览器Referer设置影响,兼容性更强
  • 同样将代码添加到主题functions.php或自定义插件中

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 15:07:03