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

请求实现:WooCommerce购物车含虚拟商品时隐藏配送方式

解决WooCommerce含虚拟商品即隐藏配送方式的问题

默认情况下,WooCommerce仅在购物车全为虚拟商品时才隐藏配送方式。要实现只要购物车包含至少一件虚拟商品(无论是否有实体商品)就隐藏配送方式,你之前的代码未生效是因为只修改了配送地址的需求判断,而配送方式的显示逻辑主要由woocommerce_cart_needs_shipping钩子控制。

以下是修正后的代码:

// 控制购物车是否需要配送
add_filter( 'woocommerce_cart_needs_shipping', 'hide_shipping_when_virtual_product_present' );
// 控制是否需要配送地址(配套修改,避免地址字段残留)
add_filter( 'woocommerce_cart_needs_shipping_address', 'hide_shipping_when_virtual_product_present' );

function hide_shipping_when_virtual_product_present( $needs_shipping ) {
    // 遍历购物车所有商品
    foreach ( WC()->cart->get_cart() as $cart_item ) {
        // 检查当前商品是否为虚拟商品
        if ( $cart_item['data']->is_virtual() ) {
            return false; // 存在虚拟商品,返回不需要配送
        }
    }
    return $needs_shipping; // 无虚拟商品,保留默认配送逻辑
}

代码说明

  • 同时挂钩woocommerce_cart_needs_shipping和woocommerce_cart_needs_shipping_address两个关键过滤器,确保配送方式和配送地址字段都被正确隐藏。
  • 遍历购物车商品时,只要发现一件虚拟商品就立即返回false,终止循环提升效率。
  • 无虚拟商品时,保留WooCommerce原有的配送判断逻辑,正常显示配送方式。

注意事项

  • 将代码添加到当前主题的functions.php文件,或使用自定义代码插件(如Code Snippets),避免主题更新导致代码丢失。
  • 测试前清空购物车并清除浏览器缓存,或使用无痕模式访问,避免WooCommerce购物车缓存影响测试结果。
  • 若站点使用缓存插件,需先清除插件缓存再测试。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 07:35:11