問題描述
在 WooCommerce 中,我使用 $product->get_variation_attributes()
來獲取產品的變體屬性.此函數返回一個名稱不帶 ID 的數組.
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
)
對于我正在創建的 AJAX 商店,我還需要來自變體的 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.
我創建了這個代碼:
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
代碼有效,但返回重復的名稱和 ID.
The code works but returns duplicate names and id's.
我的問題是,有誰知道我如何使用 ID 來完成與 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
);
}
}
<小時><塊引用>
低于 WooCommerce 版本 3
我在您的原始數據數組中沒有看到任何重復的變體 ID……您的問題不是很清楚,因此很難猜測您正在查看的缺失 ID 是什么.然后我冒險回答,我想缺少的 ID 是來自屬性值的術語 Ids...
Below WooCommerce version 3
為了獲得這些條款 ID,我使用 Wordpress 函數 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>';
我將得到這個輸出,每個屬性的真實術語 ID 用于產品變體(我已經安排了數組輸出以使其更緊湊):
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
)
)
)
)
這篇關于獲取產品變體屬性值術語 ID 和名稱的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!