Задать разные значения входного количества для вариантов продукта в Woocommerce - PullRequest
0 голосов
/ 24 ноября 2018

Я создал переменный продукт в WooCommerce, который имеет 3 варианта продукта.

Моя проблема в том, что количество продаваемых товаров должно быть фиксированным для каждого варианта продукта.

, например:
2 Red за 10,00 € каждый
3 синих по 12,00 € каждая
6 зеленых по 16,00 € каждая

Таким образом, клиент ДОЛЖЕН заказать 3 красных или 6 синих или 12 зеленых (не более, не менее).Я знаю, как управлять минимальными и максимальными количествами, но я не знаю, как установить значение количества по умолчанию.

Любая помощь будет оценена.

1 Ответ

0 голосов
/ 24 ноября 2018

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

Для динамической установки величины ввода в зависимости от каждойВыбранный вариант, единственный способ - использовать Javascript (Jquery).Это делается во 2-й функции.

Код:

add_filter( 'woocommerce_available_variation', 'custom_variation_min_max_qty', 10, 3 );
function custom_variation_min_max_qty( $data, $product, $variation ) {
    // Your variable product ID
    $variable_id = 73;

    if( $product->get_id() == $variable_id ) {
        // Set 1st variation ID
        if( $variation->get_id() == 1015 ){
            $qty = 3; // Set the quantity
        } 
        // Set 2nd variation ID
        elseif( $variation->get_id() == 1014 ){
            $qty = 6; // Set the quantity
        }
        // Set 3rd variation ID
        elseif( $variation->get_id() == 1013 ){
            $qty = 12; // Set the quantity
        }
    }

    if( isset($qty) ) {
        $data['min_qty'] = $qty;
        $data['max_qty'] = $qty;
    }

    return $data;
}

add_action( 'woocommerce_after_single_variation',  'change_variation_input_quantity_script' );
function change_variation_input_quantity_script() {
    global $product;

    // Your variable product ID
    $variable_id = 73;

    if( $product->get_id() != $variable_id ) return;

    // Output Javascript
    ?>
    <!-- JS Thankyou Script -->
    <script type="text/javascript">
    jQuery(function($) {
        var a = 'div.quantity > input.qty';
        // On load
        setTimeout(function(){
            $(a).val($(a).prop('min'));
        }, 300);

        // On change / select a variation
        $('.variations_form select').on( 'blur', function(){
            if( $('input[name="variation_id"]').val() > 0 )
                $(a).val($(a).prop('min'));
        })

    });
    </script>
    <?php
}

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


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

Как и в вашем примере, это можно сделать , нацеливаясь наЗначение атрибута продукта цвета для варианта .Вам нужно будет определить в функции таксономию атрибута «Цвет» продукта, которая будет pa_color.

Таким образом, вы замените первую функцию этой:

add_filter( 'woocommerce_available_variation', 'custom_variation_min_max_qty', 10, 3 );
function custom_variation_min_max_qty( $data, $product, $variation ) {
    // Your variable product ID
    $variable_id = 73;

    if( $product->get_id() == $variable_id ) {
        // Define your product attribute (always start with "pa_" + the slug)
        $taxonomy = 'pa_color';

        foreach($data['attributes'] as $attribute => $value_slug ){
            if( $attribute == 'attribute_' . $taxonomy ) {
                // set your color slugs below with the correct quantity
                if ( $value_slug == 'red' ) 
                {
                    $qty = 3; // Set the quantity for "Red" color
                    break;
                }
                elseif ( $value_slug == 'blue' )
                {
                    $qty = 6; // Set the quantity for "Blue" color
                    break;
                }
                elseif ( $value_slug == 'green' )
                {
                    $qty = 12; // Set the quantity for "Green" color
                    break;
                }
            }
        }
    }

    if( isset($qty) ) {
        $data['min_qty'] = $qty;
        $data['max_qty'] = $qty;
    }

    return $data;
}

Вы сохраните вторую функцию такой, какая она есть.

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

...