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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 07:42:20