Как получить количество акций вариации

Я разрабатываю тему для 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.

Другие вопросы по тегам