В WooCommerce я использую $product->get_variation_attributes()
для получения атрибутов вариантов продукта. Эта функция возвращает массив с именами без идентификаторов.
Как это:
[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, который я создаю, мне также нужны идентификаторы из вариантов. Таким образом, я могу добавить идентификаторы и имена в поля выбора (как это делает woocommerce).
Я искал несколько дней, но не смог найти решение.
Я создал этот код:
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.
Код работает, но возвращает повторяющиеся имена и идентификаторы.
Мои вопросы: кто-нибудь знает, как я могу сделать то же самое, что и get_variation_attributes()
, но с идентификатором?
Спасибо.