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

WooCommerce中如何在add_to_cart函数传递非变体产品属性

解决WooCommerce add_to_cart传递非变体属性问题

问题原因

你之前把非变体属性Subjects传到了$variation参数里,但这个参数是专门给可变产品(带SKU变体的产品)的变体属性用的,比如颜色、尺寸这类区分不同变体的属性。而你的Subjects是非变体属性,属于产品的附加选择项,必须放在$cart_item_data参数中才能被WooCommerce正确绑定到购物车项。

解决方案

1. 修正add_to_cart调用参数

把属性数据放到$cart_item_data参数里,$variation参数留空数组即可。如果需要多选多个Subjects,直接用数组存储值:

// 单个Subject的情况
$cart_item_data = array(
    'Subjects' => 'Biology'
);

// 多个Subject的情况(支持多选)
// $cart_item_data = array(
//     'Subjects' => array('Biology', 'Physics', 'Chemistry')
// );

// 调用add_to_cart,注意参数顺序
WC()->cart->add_to_cart('111', 1, 0, array(), $cart_item_data);

2. 让属性在购物车/结算页显示

默认情况下,cart_item_data里的自定义数据不会自动显示在购物车页面,需要添加钩子函数来渲染这些属性:

add_filter('woocommerce_get_item_data', 'render_subjects_in_cart', 10, 2);
function render_subjects_in_cart($item_data, $cart_item) {
    // 检查购物车项是否包含Subjects属性
    if (isset($cart_item['Subjects'])) {
        // 处理多选的情况,把数组转成逗号分隔的字符串
        $subjects_text = is_array($cart_item['Subjects']) ? implode(', ', $cart_item['Subjects']) : $cart_item['Subjects'];
        
        // 添加到购物车项显示数据中
        $item_data[] = array(
            'key'   => __('Subjects', 'your-text-domain'), // 替换成你的主题文本域
            'value' => $subjects_text
        );
    }
    return $item_data;
}

为什么产品页面能正常传递?

产品页面点击加入购物车时,WooCommerce会自动将非变体属性(比如自定义附加选项)收集并放入cart_item_data参数中,所以能正常传递到购物车。你手动调用时只是参数位置传错了,调整后就能实现同样效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 09:42:05