問(wèn)題描述
在 WooCommerce 中,我使用 $product->get_variation_attributes()
來(lái)獲取產(chǎn)品的變體屬性.此函數(shù)返回一個(gè)名稱不帶 ID 的數(shù)組.
In WooCommerce, I'm using $product->get_variation_attributes()
to get the variations attributes for a product. This function returns an array with the names without the ID's.
像這樣:
[pa_color-shirt] => Array
(
[0] => red
[7] => grey
[14] => yellow
)
[pa_color-sweater] => Array
(
[0] => red
[1] => green
[2] => blue
[3] => grey
[4] => yellow
[5] => pink
[6] => dark-blue
)
對(duì)于我正在創(chuàng)建的 AJAX 商店,我還需要來(lái)自變體的 ID.所以我可以將 Id 和名稱附加到選擇框(就像 woocommerce 一樣).
我搜索了幾天,但找不到解決方案.
For the AJAX shop I'm creating I also need the ID's from the variations.
So I can append the Id's and the names to the select boxes (Like woocommerce does).
I searched around for days but couldn't find a solution.
我創(chuàng)建了這個(gè)代碼:
if($product->has_child()) {
$attributes = $product->get_attributes();
$variations = $product->get_available_variations();
$variationsArray = array();
foreach ($attributes as $attr => $attr_deets) {
$variationArray = array();
$attribute_label = wc_attribute_label($attr);
$variationArray["attribute_label"] = $attribute_label;
if (isset($attributes[$attr]) || isset($attributes['pa_' . $attr])) {
$attribute = isset($attributes[$attr]) ? $attributes[$attr] : $attributes['pa_' . $attr];
if ($attribute['is_taxonomy'] && $attribute['is_visible']) {
$variationArray["attribute_name"] = $attribute['name'];
$variationIds = array();
$variationNames = array();
$variationPrices = array();
foreach ($variations as $variation) {
if (!empty($variation['attributes']['attribute_' . $attribute['name']])) {
array_push($variationIds, $variation['variation_id']);
$taxonomy = $attribute['name'];
$meta = get_post_meta($variation['variation_id'], 'attribute_'.$taxonomy, true);
$term = get_term_by('slug', $meta, $taxonomy);
$variation_name = $term->name;
array_push($variationNames, $variation_name);
array_push($variationPrices, $variation['display_regular_price']);
}
}
$variationArray["variation_prices"] = $variationPrices;
$variationArray["variations"] = array_combine($variationIds, $variationNames);
}
}
array_push($variationsArray, $variationArray);
}
}
$product_variations = $variationsArray;
此代碼返回https://hastebin.com/ecebewumoz.php
代碼有效,但返回重復(fù)的名稱和 ID.
The code works but returns duplicate names and id's.
我的問(wèn)題是,有誰(shuí)知道我如何使用 ID 來(lái)完成與 get_variation_attributes()
相同的事情?
My questions is does anyone know how I could accomplish the same as get_variation_attributes()
but with the ID's?
謝謝.
推薦答案
WooCommerce 版本 3+ 的更新
Update for WooCommerce versions 3+
foreach( $product->get_variation_attributes() as $taxonomy => $terms_slug ){
// To get the attribute label (in WooCommerce 3+)
$taxonomy_label = wc_attribute_label( $taxonomy, $product );
// Setting some data in an array
$variations_attributes_and_values[$taxonomy] = array('label' => $taxonomy_label);
foreach($terms_slug as $term){
// Getting the term object from the slug
$term_obj = get_term_by('slug', $term, $taxonomy);
$term_id = $term_obj->term_id; // The ID <== <== <== <== <== <== HERE
$term_name = $term_obj->name; // The Name
$term_slug = $term_obj->slug; // The Slug
// $term_description = $term_obj->description; // The Description
// Setting the terms ID and values in the array
$variations_attributes_and_values[$taxonomy]['terms'][$term_id] = array(
'name' => $term_name,
'slug' => $term_slug
);
}
}
<小時(shí)><塊引用>
低于 WooCommerce 版本 3
我在您的原始數(shù)據(jù)數(shù)組中沒(méi)有看到任何重復(fù)的變體 ID……您的問(wèn)題不是很清楚,因此很難猜測(cè)您正在查看的缺失 ID 是什么.然后我冒險(xiǎn)回答,我想缺少的 ID 是來(lái)自屬性值的術(shù)語(yǔ) Ids...
Below WooCommerce version 3
為了獲得這些條款 ID,我使用 Wordpress 函數(shù) get_term_by()
,這樣:
I don't see any duplicate variations IDs in your raw data array… Your question is not very clear, so is difficult to guess what are the missing Ids you are looking at. Then I take the risk to answer and I suppose that the missing IDs are the term Ids from the attributes values…
To get this terms IDs, I use Wordpress function get_term_by()
, this way:
還有:
And with:
echo '<pre>'; print_r($variations_attributes_and_values);echo '</pre>';
我將得到這個(gè)輸出,每個(gè)屬性的真實(shí)術(shù)語(yǔ) ID 用于產(chǎn)品變體(我已經(jīng)安排了數(shù)組輸出以使其更緊湊):
I will get this output, with the real terms IDs for each attribute for a product variations (I have arranged the array output to get it more compact):
Array(
[pa_color] => Array(
[label] => Color
[terms] => Array(
[8] => Array(
[name] => Black
[slug] => black'
)
[9] => Array(
[name] => Blue
[slug] => blue
)
[11] => Array(
[name] => Green
[slug] => green
)
)
)
[pa_bulk_quantity] => Array(
[label] => Bulk quantity
[terms] => Array(
[44] => Array(
[name] => Pack of 10 dozen
[slug] => pack-of-10-dozen
)
[45] => Array(
[name] => Case of 50 dozens
[slug] => case-of-50-dozens
)
)
)
)
這篇關(guān)于獲取產(chǎn)品變體屬性值術(shù)語(yǔ) ID 和名稱的文章就介紹到這了,希望我們推薦的答案對(duì)大家有所幫助,也希望大家多多支持html5模板網(wǎng)!