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

