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

WooCommerce按商品类别限制结账可选国家的代码问题解决

解决WooCommerce按商品类别隐藏结账/购物车页面配送国家的问题

问题背景

需要实现:当购物车中包含ID为195的「Canada Only」类别商品时,在购物车和结账页面隐藏美国(US)作为可选配送目的地,但原有代码未生效。

原代码问题分析

原代码尝试通过$item['product_cat']判断商品分类,但购物车项数组中并没有这个直接字段,导致无法正确识别商品所属分类,因此逻辑不生效。

修正后的代码

/* 当购物车包含"Canada Only"(ID195)类别商品时,隐藏美国作为配送目的地 */
add_filter( 'woocommerce_countries', 'products_disable_country', 10, 1 );
function products_disable_country( $countries ) {
    // 仅在购物车或结账页面执行
    if( is_cart() || is_checkout() ) {
        $target_cat_id = 195; // 目标分类ID
        $has_target_cat = false;

        // 遍历购物车中的所有商品
        foreach( WC()->cart->get_cart() as $cart_item ) {
            $product_id = $cart_item['product_id'];
            // 检查当前商品是否属于目标分类
            if( has_term( $target_cat_id, 'product_cat', $product_id ) ) {
                $has_target_cat = true;
                break; // 找到符合条件的商品后停止遍历
            }
        }

        // 如果存在目标分类商品,移除美国选项
        if( $has_target_cat ) {
            unset( $countries["US"] );
        }
    }

    return $countries;
}

代码说明

  • 分类检查逻辑:使用has_term()函数,传入目标分类ID、商品分类的taxonomy(product_cat)和商品ID,准确判断商品是否属于指定分类。
  • 遍历优化:一旦发现购物车中有符合条件的商品,立即终止遍历,提升效率。
  • 条件判断:仅在购物车或结账页面执行逻辑,避免影响其他页面的国家选项。

内容的提问来源于stack exchange,提问作者Just Be Cooking

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 16:40:13