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

WooCommerce无可用配送方式时禁止访问结账页问题咨询

问题根因

原有代码未区分结账流程的不同页面状态:用户完成订单提交后,WooCommerce会加载结账页的order-received(订单接收)端点展示支付结果,此时购物车已经被清空,计算配送方式必然返回空值,触发重定向逻辑将用户从订单结果页跳转至空购物车页。

修复后可用代码
function prevent_checkout_access_no_shipping() {
    // 仅在结账页、非订单结果/支付页、购物车非空时执行校验
    if ( function_exists( 'is_checkout' ) && is_checkout() 
        && ! is_wc_endpoint_url( 'order-received' ) 
        && ! is_wc_endpoint_url( 'order-pay' ) 
        && ! WC()->cart->is_empty() ) {
 
        // 获取配送包裹并校验可用配送方式
        $packages = WC()->cart->get_shipping_packages();
        foreach( $packages as $key => $pkg ) {
            $calculate_shipping = WC()->shipping->calculate_shipping_for_package( $pkg );
            if( empty( $calculate_shipping['rates'] ) ) {
                wp_redirect( esc_url( WC()->cart->get_cart_url() ) );
                exit;
            }
        }
    }
}
// 使用WooCommerce推荐的重定向钩子替换原wp钩子,避免重定向报错
add_action( 'template_redirect', 'prevent_checkout_access_no_shipping' );
核心修改说明
  • 新增order-received、order-pay端点排除逻辑,跳过订单提交成功页、待支付订单支付页的配送校验,不影响正常下单后的流程
  • 新增购物车非空判断,空购物车状态下不执行配送校验逻辑,避免多余判断
  • 将触发钩子从wp更换为template_redirect,这是WordPress/WooCommerce官方推荐的页面重定向专用钩子,执行时机更合理,不会出现因提前输出内容导致的重定向失效问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 13:36:01