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

如何获取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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 13:10:35