如何获取WooCommerce结账后用户选择的商品规格属性
解决WooCommerce订单中获取商品属性值的问题
你的问题出在只获取了订单项集合,但没遍历每个订单项去提取对应的属性信息。另外换成woocommerce_checkout_order_processed钩子确实更合适——这个钩子在订单完全创建完成后触发,数据更稳定。
修正后的代码如下,能准确获取用户选择的颜色、规格属性:
function getcartitems($order_id) { $order = wc_get_order($order_id); // 遍历订单中的每个商品项 foreach ($order->get_items() as $item_id => $item) { // 获取对应的产品对象 $product = $item->get_product(); // 获取商品的属性配置 $attributes = $product->get_attributes(); // 提取颜色属性值(注意替换成你实际的属性slug,WooCommerce默认属性slug带pa_前缀) if (isset($attributes['pa_color'])) { $selected_color = $item->get_meta('pa_color'); // 可通过error_log查看结果,或写入自定义字段 error_log('用户选择的颜色:' . $selected_color); } // 提取规格属性值 if (isset($attributes['pa_size'])) { $selected_size = $item->get_meta('pa_size'); error_log('用户选择的规格:' . $selected_size); } // 若不确定属性slug,可打印所有订单项元数据排查 // $all_item_meta = $item->get_meta_data(); // error_log(print_r($all_item_meta, true)); } } add_action('woocommerce_checkout_order_processed', 'getcartitems');
关键提醒:
- 属性slug要和后台设置一致,WooCommerce默认的产品属性slug会自动加上
pa_前缀,如果你的属性是自定义命名(比如直接叫color),就把代码里的pa_color换成对应的slug。 - 用
$item->get_meta()获取的是用户实际选择的属性值,比从产品对象获取更准确,因为订单里存的是最终的选择结果。
内容的提问来源于stack exchange,提问作者Steve
相关产品推荐
相关产品推荐

