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

WooCommerce自定义字段显示异常:如何按商品属性设置触发条件?

解决WooCommerce结账页自定义字段因商品属性失效及添加属性触发条件的问题

问题原因

当你给商品添加属性(比如钻石数量)后,商品变成了可变产品(Variable Product),此时购物车中的$cart_item['data']对应的是子变体产品,而商品分类通常是设置在父产品上的。你原来的代码直接用变体ID调用has_term(),自然找不到对应的分类,导致触发条件判定为false,自定义字段不显示。

解决方案

修改代码,同时处理父/子产品的分类判断和商品属性的触发条件,具体代码如下:

add_filter('woocommerce_checkout_fields', 'add_custom_field_based_on_category_and_attribute');

function add_custom_field_based_on_category_and_attribute($fields) {
    // 目标分类slug
    $target_category = 'clash-of-clans';
    // 目标属性slug(WooCommerce属性slug默认以pa_开头,比如钻石数量的slug是pa_diamond-quantity)
    $target_attribute = 'pa_diamond-quantity';
    
    $has_target_product = false;

    foreach (WC()->cart->get_cart() as $cart_item) {
        $product = $cart_item['data'];
        // 变体产品取父产品ID,普通产品用自身ID
        $product_id = $product->is_type('variation') ? $product->get_parent_id() : $product->get_id();
        
        // 检查商品是否属于目标分类
        $has_target_category = has_term($target_category, 'product_cat', $product_id);
        
        // 检查商品是否包含目标属性
        $product_attributes = $product->get_attributes();
        $has_target_attribute = isset($product_attributes[$target_attribute]);
        
        // 满足分类或属性任一条件即可触发(需同时满足则改为&&)
        if ($has_target_category || $has_target_attribute) {
            $has_target_product = true;
            break;
        }
    }

    // 满足条件则添加自定义字段
    if ($has_target_product) {
        $fields['billing']['billing_custom_field'] = array(
            'type' => 'text',
            'label' => '密码',
            'required' => true,
            'class' => array('form-row-wide'),
            'clear' => true,
        );
    }

    return $fields;
}

代码说明

  • 变体产品兼容:通过$product->is_type('variation')识别变体产品,自动切换到父产品ID进行分类判断,避免因变体无分类导致的判断失效。
  • 属性判断逻辑:用get_attributes()获取商品所有属性,通过属性slug(带pa_前缀)判断是否包含目标属性,可在后台产品属性设置页查看具体slug。
  • 触发条件灵活调整:代码中用||表示满足分类或属性任一条件就显示字段,若需要同时满足两个条件,将||改为&&即可。
  • 字段自定义:可根据不同商品类型修改label(比如软件类改为“软件ID”)、type等参数。

使用注意

  1. 替换$target_category为你的目标分类slug。
  2. 替换$target_attribute为你的目标属性slug(必须带pa_前缀)。
  3. 将代码添加到主题的functions.php文件或自定义插件中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 10:14:52