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

Я разрабатываю тему для wordpress и woocommerce.

Мне нужен ассортимент шоу-вариаций.

<p class="stock-m13"><?php echo $product->get_stock_quantity(); ?></p>

(здесь: Как получить запасы статья из woocommerce?), но этот код показывает мне только глобальное количество запасов, а не количество каждой вариации.

Мне нужна другая функция для получения количества вариаций? Или возможно, что мой код не завершен (я думаю, это потому, что я использовал тему Twenty Fifteen и показано количество вариантов)?

Я пытаюсь получить максимальное количество с помощью этого:

<?php
    foreach ($product->get_available_variations() as $key) {
        echo $key['max_qty'] .'<br/>';
    }
?>

И я понимаю, но не знаю, пригодится ли это, когда акции падают.


person SeiyaJapon    schedule 28.05.2015    source источник


Ответы (5)


Учитывая переменный продукт с несколькими вариантами, чтобы получить количество запаса каждого варианта:

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. Я думаю, что могут быть способы лучше с точки зрения производительности, но не такие чистые.

person db306    schedule 05.03.2016

Да, ваш способ - это правильный способ получить запас вариации.

До тех пор, пока вы получаете свежие вариации из базы данных каждый раз, когда вам нужно использовать ее запасы, вы должны быть в порядке с использованием этого метода.

******* ОБНОВЛЕНО

Я не уверен, что понимаю, что вы пытаетесь сделать. Вы должны просто взять оба варианта и отправить их в 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'];
}

Здесь я назначаю уровень запасов ассоциативному массиву с attribute_pa_ "your-attribute-name" в качестве ключа

Теперь я могу отправить свой массив в jQuery.

Пожалуйста, поясните, если я неправильно понимаю вопрос.

person Tuesdave    schedule 28.05.2015

Приведенный ниже код распечатает все атрибуты с переменной 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;
?>
person Faisal Alvi    schedule 08.10.2016

Хорошо, с этим я могу взять количество. Но бесполезно.

С его помощью я могу подготовить код, который будет составлять разные предложения, по одному для каждого продукта, и показать его, когда будет выбран вариант с помощью jquery.

Но это плохая идея. Не элегантно. Я хотя существовало что-то вроде

$product->get_variation_price()

Этот код возвращает цену варианта, когда он выбран. Но

$product->get_stock_quantity();

не меняются при выборе варианта, потому что покажите мне глобальный запас.

Может кто-нибудь дать мне элегантное решение? Или не существует?

ОБНОВЛЕНИЕ

Наконец я использовал

$product->get_available_variations()

Чтобы получить данные.

С его помощью я сгенерировал html-код, скрытый с помощью css, и я показываю его, когда нажимаю на цвет варианта.

person SeiyaJapon    schedule 29.05.2015

add_action( 'woocommerce_before_add_to_cart_button', 'get_selected_variation_stock' );
function get_selected_variation_stock() {
    global $product;

    if ($product->is_type( 'variable' ))
    {
        $available_variations = $product->get_available_variations();
        foreach ($available_variations as $key => $value)
        {
            $variation_id = $value['variation_id'];
            $attribute_pa_colour = $value['attributes']['attribute_pa_colour'];
            $variation_obj = new WC_Product_variation($variation_id);
            $stock = $variation_obj->get_stock_quantity();

            echo $attribute_pa_colour . ": " . $stock . " ";

        }
    }

Используя этот хук, вы должны узнать количество всех вариаций на складе, а также данные о товарах других вариаций woocommerce.

person Muhammad Rizwan    schedule 01.07.2020