Показывать состояние запасов рядом с каждым значением атрибута в товарах с переменной WooCommerce

Я хочу реализовать в своем магазине что-то подобное:

введите здесь описание изображения

У меня есть этот код, но это количество выставок рядом с каждым вариантом.

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();
}
}

А также этот код:

  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 DrMTR    schedule 11.07.2017    source источник


Ответы (1)


Более быстрая и оптимизированная версия кода для WooCommerce 3+ только в:
Отображение состояния запаса вариантов для продуктов с одной переменной в раскрывающемся списке в Wocommerce 3


Обновлена ​​совместимость с WooCommerce или предыдущей версией 2.6.x

Вы можете сделать это с помощью настраиваемой функции, подключенной к ловушке фильтра woocommerce_variation_option_name. Это применимо только для продуктов, у которых есть уникальные атрибуты для их вариаций ...

Вот код:

add_filter( 'woocommerce_variation_option_name', 'customizing_variations_terms_name', 10, 1 );
function customizing_variations_terms_name( $term_name ){

    if(is_admin())
        return $term_name;

    global $product;
    $second_loop_stoped = false;

    // Get available product variations
    $product_variations = $product->get_available_variations();

    // Iterating through each available product variation
    foreach($product_variations as $variation){

        $variation_id = $variation['variation_id'];
        $variation_obj = new WC_Product_Variation( $variation_id );

        ## WOOCOMMERCE RETRO COMPATIBILITY ##
        if ( version_compare( WC_VERSION, '3.0', '<' ) ) # BEFORE Version 3 (older)
        {
            $stock_status = $variation_obj->stock_status;
            $stock_qty = intval($variation_obj->stock);

            // The attributes WC slug key and slug value for this variation
            $attributes_arr = $variation_obj->get_variation_attributes();
        }
        else # For newest verions: 3.0+ (and Up)
        {
            $stock_status = $variation_obj->get_stock_status();
            $stock_qty = $variation_obj->get_stock_quantity();

            // The attributes taxonomy key and slug value for this variation
            $attributes_arr = $variation_obj->get_attributes();
        }

        if(count($attributes_arr) != 1) // Works only for 1 attribute set in the product
            return $term_name;

        // Get the terms for this attribute
        foreach( $attributes_arr as $attr_key => $term_slug){
            // Get the attribute taxonomy
            $term_key = str_replace('attribute_', '', $attr_key );

            // get the corresponding term object
            $term_obj = get_term_by( 'slug', $term_slug, $term_key );
            if( $term_obj->name == $term_name ){ // If the term name matches we stop the loops
                $second_loop_stoped = true;
                break;
            }
        }
        if($second_loop_stoped)
            break;
    }
    if( $stock_qty>0 )
        return $term_name .= ' - ' . $stock_status . ' ('.$stock_qty.')';
    else
        return $term_name .= ' - ' . $stock_status;

}

Код находится в файле function.php вашей активной дочерней темы (или темы) или также в любом файле плагина.

Этот код работает и протестирован в WooCommerce 2.6.x и 3+.


Вы получите это (например):

введите описание изображения здесь

Вы можете использовать другие методы WC_Product_Variation или WC_Product для получения и отображения данных. ты хочешь…

person LoicTheAztec    schedule 11.07.2017
comment
Привет, Лоик, это работает для Woo 3.X. Можете ли вы адаптировать код для работы с Woo 2.X? - person DrMTR; 11.07.2017
comment
Код обновлен, протестирован и работает также на версии 2.6.x - person LoicTheAztec; 12.07.2017
comment
Работает отлично !! Я надеюсь, что ваш код окажется полезным для кого-то еще. - person DrMTR; 12.07.2017
comment
@DrMTR Я тоже надеюсь, потому что это заняло у меня время…;) - person LoicTheAztec; 12.07.2017