Как получить количество акций вариации
Я разрабатываю тему для WordPress и WooCommerce.
Мне нужно показать запас вариации.
<p class="stock-m13"><?php echo $product->get_stock_quantity(); ?></p>
(здесь: Как получить количество товара в woocommerce?), но этот код показывает только общее количество товара, а не каждое количество вариации.
Мне нужна другая функция, чтобы получить количество вариаций? Или возможно, что мой код не завершен (я так думаю, потому что я использовал тему "Двадцать пятнадцать" и показано количество вариантов)?
Я хотел бы, чтобы вы могли мне помочь.
Спасибо!!
ОБНОВЛЕНИЕ: я пытаюсь получить максимальное количество с этим:
<?php
foreach ($product->get_available_variations() as $key) {
echo $key['max_qty'] .'<br/>';
}
?>
И я понимаю, но я не знаю, полезно ли это, когда акции падают.
6 ответов
Хорошо, с этим я могу взять количество. Но это не полезно.
С этим я могу подготовить код, который создает разные предложения, по одному для каждого продукта, и показать его, когда вариант будет выбран с помощью jquery.
Но это не очень хорошая идея. Это не элегантно. Я хотя существовал что-то вроде
$product->get_variation_price()
Этот код возвращает цену изменения, когда выбрано. Но
$product->get_stock_quantity();
не меняется, когда выбран вариант, потому что покажи мне глобальный запас.
Может кто-нибудь дать мне элегантное решение? Или не существует?
ОБНОВИТЬ
Наконец то использовал
$product->get_available_variations()
Чтобы получить данные.
После этого я сгенерировал HTML-код, скрытый с помощью CSS, и показываю его, когда нажимаю на цвет варианта.
Дан переменный продукт с несколькими вариантами, чтобы получить количество запаса каждого варианта:
function get_stock_variations_from_product(){
global $product;
$variations = $product->get_available_variations();
foreach($variations as $variation){
$variation_id = $variation['variation_id'];
$variation_obj = new WC_Product_variation($variation_id);
$stock = $variation_obj->get_stock_quantity();
}
}
Это самый чистый способ, который я понял для WC 2.5, я думаю, что могут быть лучшие способы с точки зрения производительности, но не такие чистые.
Приведенный ниже код распечатает все атрибуты с переменной 'is_in_stock'.
<?php
global $product;
$product_variations = $product->get_available_variations();
foreach ($product_variations as $variation) {
$var_data = $variation['attributes'];
$var_data['in_stock'] = $variation['is_in_stock'];
}
//List all attributes with stock available or not array..
echo '<pre>';
print_r($var_data);
echo '</pre>';
die;
?>
Да, ваш путь - это правильный способ получить запас вариации.
Пока вы получаете новые варианты из базы данных каждый раз, когда вам нужно использовать количество запаса, вы должны быть в порядке с этим методом.
******* UPDATEED
Я не уверен, что понимаю, что вы пытаетесь сделать. Вы должны просто иметь возможность взять оба варианта вариации и отправить их в jquery для игры.
$product_variable = new WC_Product_Variable($product->id);
$product_variations = $product_variable->get_available_variations();
foreach ($product_variations as $variation) {
$stock[$variation['attribute_pa_variation-name']] = $variation['max_qty'];
}
Здесь я назначаю уровень запаса ассоциативному массиву с атрибутом_p_"your-attribute-name" в качестве ключа
Теперь я могу отправить свой массив в JQuery.
Пожалуйста, уточните, если я неправильно понимаю вопрос.
Если кому-то еще интересно, как это сделать при переборе товаров в корзине, это просто
$cart_item['data']->get_stock_quantity()
по следующему примеру:
foreach(WC()->cart->get_cart() as $cart_item_key => $cart_item) {
$stock = $cart_item['data']->get_stock_quantity();
}
add_action('woocommerce_before_add_to_cart_button', 'get_selected_variation_stock'); function get_selected_variation_stock() { глобальный продукт $; если ($product->is_type( 'переменная')) { $ available_variations = $product->get_available_variations(); foreach ($available_variations как $ key => $value) { $ вариационный_ид = $ значение ['вариационный_ид']; $ attribute_pa_colour = $ значение ['атрибуты']['attribute_pa_colour']; $ вариация_obj = новая вариация продукта WC_Product($ вариация_id); $ stock = $ вариация_obj->get_stock_quantity(); echo $attribute_pa_colour. ":". $ сток. ""; } }
Используя этот хук, вы должны узнать количество всех вариаций на складе, а также данные о других вариациях woocommerce.