WooCommerce合并属性pa_mixed按类型分类前端展示求助
解决方案
首先修正你代码里的核心问题:in_array() 的参数顺序搞反了,而且 $pa_mixed 是逗号分隔的字符串,不是数组,没法直接用数组匹配。下面是完整的实现代码,能把合并属性按分类拆分并输出:
// 获取合并属性值,处理空值 $pa_mixed = $product->get_attribute('pa_mixed') ?: ''; // 如果属性值为空,直接返回 if (empty($pa_mixed)) { return; } // 把字符串转成数组,去除每个元素的前后空格 $mixed_values = array_map('trim', explode(',', $pa_mixed)); // 定义各分类的可选值 $color_options = ['Red', 'Blue', 'Green']; $size_options = ['S', 'M', 'L']; $aged_options = ['Children', 'Adult']; // 筛选出当前产品对应的各分类值 $selected_colors = array_intersect($mixed_values, $color_options); $selected_sizes = array_intersect($mixed_values, $size_options); $selected_aged = array_intersect($mixed_values, $aged_options); // 前端输出(可根据需求调整HTML结构) echo '<div class="product-mixed-attributes">'; if (!empty($selected_colors)) { echo '<p>Colors : ' . implode(', ', $selected_colors) . '</p>'; } if (!empty($selected_sizes)) { echo '<p>Size : ' . implode(', ', $selected_sizes) . '</p>'; } if (!empty($selected_aged)) { echo '<p>Aged : ' . implode(', ', $selected_aged) . '</p>'; } echo '</div>';
代码说明:
- 用
explode(',', $pa_mixed)把逗号分隔的字符串转成数组,再用array_map('trim', ...)去掉每个值的前后空格,避免空格导致匹配失败。 array_intersect()可以直接找出两个数组的交集,也就是当前产品选中的对应分类值,比循环判断更高效。- 最后根据每个分类是否有选中值,选择性输出内容,避免空分类显示。
内容的提问来源于stack exchange,提问作者carlozsan
相关产品推荐
相关产品推荐

