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

如何在WooCommerce中获取用户选中的属性ID与名称并存入PHP变量

获取WooCommerce中用户选中的商品属性(名称+对应ID)

你的代码只能获取商品的所有属性选项,是因为get_attribute()方法本身就是返回该属性的全部可选值,要拿到用户选中的属性数据,得根据不同场景处理:

场景1:从购物车/已生成的订单中获取

如果用户已经把商品加入购物车,或者订单已创建,可以直接遍历购物车/订单里的商品项,提取选中的属性:

// 遍历购物车商品
foreach (WC()->cart->get_cart() as $cart_item) {
    $product = $cart_item['data'];
    
    // 针对变体商品(带属性选择的商品)
    if ($product->is_type('variation')) {
        // 获取该变体对应的选中属性集合
        $selected_attrs = $product->get_variation_attributes();
        
        foreach ($selected_attrs as $attr_slug => $attr_value_slug) {
            // 转换为属性名称(去掉前缀)
            $attr_taxonomy = str_replace('attribute_', '', $attr_slug);
            $attr_name = wc_attribute_label($attr_taxonomy);
            
            // 获取选中属性值对应的ID
            $term = get_term_by('slug', $attr_value_slug, $attr_taxonomy);
            $attr_value_id = $term ? $term->term_id : '';
            
            // 这里可以把名称和ID存入自定义变量使用
            // 示例:$my_attrs[$attr_name] = $attr_value_id;
            echo "属性名称:{$attr_name},选中值ID:{$attr_value_id}<br>";
        }
    }
}

如果是从订单中获取,只需把WC()->cart->get_cart()替换为订单的商品项集合:

$order = wc_get_order($order_id);
foreach ($order->get_items() as $item) {
    $product = $item->get_product();
    // 后续逻辑和购物车场景一致
}

场景2:在产品页面用户提交选择后获取

用户在前端选择属性并点击“加入购物车”时,可以通过WooCommerce的钩子拦截请求,提取选中的属性数据:

// 监听商品加入购物车的动作
add_action('woocommerce_add_to_cart', 'capture_selected_attributes', 10, 6);
function capture_selected_attributes($cart_item_key, $product_id, $quantity, $variation_id, $variation, $cart_item_data) {
    // 只有变体商品才会有选中属性
    if ($variation_id) {
        $selected_attrs = $variation->get_variation_attributes();
        
        foreach ($selected_attrs as $attr_slug => $attr_value_slug) {
            $attr_taxonomy = str_replace('attribute_', '', $attr_slug);
            $attr_name = wc_attribute_label($attr_taxonomy);
            
            $term = get_term_by('slug', $attr_value_slug, $attr_taxonomy);
            $attr_value_id = $term ? $term->term_id : '';
            
            // 这里可以将数据存入变量、数据库,或执行其他逻辑
            // 示例:save_selected_attr($attr_name, $attr_value_id);
        }
    }
}

关键说明

  • 带属性选择的商品在WooCommerce中属于变体商品,用户选中属性后实际加入购物车的是对应的变体ID,所以核心是通过变体对象获取已选中的属性。
  • 你原来使用的get_attribute('tamanhos')只能返回该属性的所有可选值,无法区分用户是否选中某一项。

内容的提问来源于stack exchange,提问作者Henrique R. Pohl

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 06:15:14