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
相关产品推荐
相关产品推荐

