如何获得用于产品变化的woocommerce属性?



我试图获得所有woocommerce属性和值的列表,但只有那些用于产品变化(例如,我想获得"one_answers";color"值,但不包括仅用于信息目的的其他属性,如"结构";或"weight"。

我使用这个代码:

$allAttributes = wc_get_attribute_taxonomies();
foreach ($allAttributes as $att) {
$wcAttribute = wc_get_attribute($att->attribute_id);
[...]
}

在这一点上,我想检查这个$wcAttribute是否用于任何产品变化,是否将其添加到我的列表中,但我不知道如何进行。

帮忙吗?

我对自己说,因为我找到了解决办法。也许,这不是最好的解决方案,但它是有效的(如果有人有更好的解决方案,我将不胜感激):

function getAllWCAttributes()
{
/* Format for attributes: ['attribute_id' => ['id', 'name', 'values'=>['id', 'name'] ] ]*/
$attributes = array();
$allAttributes = wc_get_attribute_taxonomies();
foreach ($allAttributes as $att) {
if (isAttributeUsedForVariations($att)) {
$wcAttTerms = get_terms('pa_' . $att->attribute_name);
$terms = array();
foreach ($wcAttTerms as $wcTerm) {
$terms[] = array(
'id' => $wcTerm->term_id,
'name' => $wcTerm->name
);
}
$attributes[$att->attribute_id] = array(
'id' => $att->attribute_id,
'name' => $att->attribute_label,
'values' => $terms
);
}
}
return $attributes;
}

function isAttributeUsedForVariations($attribute)
{
$terms = array();
$attTerms =  get_terms('pa_' . $attribute->attribute_name);
foreach ($attTerms as $attTerm) {
$terms[] = $attTerm->slug;
}
$args = array(
'post_type' => 'product_variation',
'post_status' => 'publish',
'meta_query' => array(
array(
'key' => 'attribute_pa_' . $attribute->attribute_name,
'value' => $terms,
'compare'  =>  'IN'
)
)
);
$variationsQuery = new WP_Query($args);
return ($variationsQuery->post_count > 0)? true: false;
}

文档:

wc_get_attribute_taxonomies ()

get_terms ()

WP_Query

最新更新