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

WooCommerce如何获取所有可用配送服务选项(Packages)?

解决WooCommerce获取具体配送服务选项的问题

你报错是因为WC()->shipping()->get_shipping_packages()这个方法不存在,正确获取顾客结账时看到的具体配送选项(比如「First class」「Second class」这类),可以按以下方式实现:

// 绑定到合适的WooCommerce钩子,确保在系统初始化后执行
add_action('woocommerce_after_cart', 'fetch_shipping_service_options');
function fetch_shipping_service_options() {
    // 空购物车无法获取配送选项,直接返回
    if (WC()->cart->is_empty()) {
        return;
    }

    // 正确获取绑定购物车的配送包(包含商品、地址等信息)
    $shipping_packages = WC()->cart->get_shipping_packages();

    foreach ($shipping_packages as $package_key => $package) {
        // 手动计算当前配送包的配送费率(WooCommerce默认仅在结账/购物车页自动计算)
        WC()->shipping->calculate_shipping_for_package($package);
        
        // 提取计算后的具体配送选项
        $shipping_rates = WC()->shipping->get_packages()[$package_key]['rates'];

        if (!empty($shipping_rates)) {
            echo '<h3>可用配送选项:</h3>';
            foreach ($shipping_rates as $rate) {
                // 输出配送选项名称
                echo '<p>' . esc_html($rate->label) . '</p>';
                // 如需额外信息,可获取ID、价格等
                // echo '<small>ID: ' . esc_html($rate->id) . ' | 价格: ' . wc_price($rate->cost) . '</small>';
            }
        } else {
            echo '<p>暂无可用配送选项</p>';
        }
    }
}

核心说明:

  • 配送包获取:用WC()->cart->get_shipping_packages()而非WC()->shipping()的方法,因为配送包和购物车强绑定,包含商品、配送地址等必要计算条件。
  • 触发计算:必须调用calculate_shipping_for_package(),否则无法拿到具体的配送选项(自定义代码场景下不会自动触发计算)。
  • 运行时机:务必在WooCommerce完全初始化、购物车有商品的场景执行,比如挂在woocommerce_after_cart、woocommerce_checkout_init这类钩子上,避免过早调用导致无数据。

如果需要在后台等无真实购物车的场景获取,需手动模拟购物车商品和配送地址,否则无法得到符合实际场景的配送选项(配送选项依赖商品重量/尺寸、地址区域等条件)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 09:33:29