WooCommerce遍历变体属性时如何提取无attribute_pa_前缀的属性名
WooCommerce 变体属性名去除
attribute_pa_前缀实现方案 问题说明
通过wc_get_product( $id )获取产品对象后,调用get_available_variations()方法拿到的可用变体数据中,属性键名默认格式为attribute_pa_color、attribute_pa_size这类带固定前缀的形式,无法直接拿到color、size这类纯属性标识。
注意:常规遍历逻辑容易出现偏差,
get_available_variations()返回的是索引型变体数组,每个子项对应一个独立变体,属性数据存储在每个变体项的attributes字段下,直接遍历最外层数组无法正确拿到属性键值对。
实现代码
基础版本(仅处理全局PA属性)
全局属性是WooCommerce后台「属性」菜单创建的属性,键名固定带attribute_pa_前缀,直接替换前缀即可:
$product = wc_get_product( $id ); $available_variations = $product->get_available_variations(); $pa_prefix = 'attribute_pa_'; foreach ($available_variations as $variation) { $variation_attributes = $variation['attributes']; foreach ($variation_attributes as $attr_key => $attr_value) { // 移除前缀拿到纯属性名 $clean_attr_name = str_replace($pa_prefix, '', $attr_key); // 此处$clean_attr_name即为color、size这类纯属性名称 } }
兼容版本(同时支持全局属性+自定义产品属性)
如果站点存在直接在单个产品编辑页添加的自定义属性,这类属性的键名前缀为attribute_,无pa_段,用正则统一处理兼容性更好:
$product = wc_get_product( $id ); $available_variations = $product->get_available_variations(); foreach ($available_variations as $variation) { $variation_attributes = $variation['attributes']; foreach ($variation_attributes as $attr_key => $attr_value) { // 正则匹配移除前缀,兼容两种属性类型 $clean_attr_name = preg_replace('/^attribute_(pa_)?/', '', $attr_key); } }
注意事项
- 不要用固定长度字符串截取(如
substr($attr_key, 13))的方式处理,遇到自定义属性时会出现截取错误 - 上述方法拿到的
$clean_attr_name是属性的slug标识,可直接用于后续WooCommerce属性相关函数的传参
内容的提问来源于stack exchange,提问作者aneuroo
相关产品推荐
相关产品推荐

