Избегайте выбранных вариаций расчетной цены, которая будет отражена в продуктах, связанных с Woocommerce - PullRequest
1 голос
/ 04 апреля 2019

Этот вопрос основан на Получите выбранную цену вариации в jQuery для продуктов с переменными параметрами Woocommerce .
У меня есть код, который работает на странице одного продукта, чтобы отобразить рассчитанную цену, основанную на пользовательском вводе Проблема заключается в том, что рассчитанная цена также относится к сопутствующим товарам внизу страницы. Их цена должна совпадать с ценой просматриваемого товара.
Я думаю, что проблема заключается в строке $ ('. Price'). Html (total_pris + ', -'); где «.price» относится и к сопутствующим товарам. Как мне это исправить?

Мой код:

add_action( 'woocommerce_before_add_to_cart_quantity', 'func_option_valgt' 
);
function func_option_valgt() {
global $product;
if (has_term('endene','product_cat')){
    $variations_data =[]; // Initializing

    // Loop through variations data
    foreach($product->get_available_variations() as $variation ) {
        // Set for each variation ID the corresponding price in the data array (to be used in jQuery)
        $variations_data[$variation['variation_id']] = $variation['display_price'];
    }
    ?>
    <script>
    jQuery(function($) {
        var jsonData = <?php echo json_encode($variations_data); ?>,
            inputVID = 'input.variation_id';

        $('input , #id_dropdown_one_end, #id_dropdown_other_end').change( function(){
            if( '' != $(inputVID).val() ) {
                var vid      = $(inputVID).val(), // VARIATION ID
                    length   = $('#rope_length').val(), // LENGTH
                    diameter = $('#diameter').val(),  // DIAMETER
                    ene_enden = $('#id_dropdown_one_end').find('option:selected').attr("value_one_end"),
                    andre_enden = $('#id_dropdown_other_end').find('option:selected').attr("value_other_end"),
                    vprice   = ''; // Initilizing

                // Loop through variation IDs / Prices pairs
                $.each( jsonData, function( index, price ) {
                    if( index == $(inputVID).val() ) {
                        vprice = price; // The right variation price

                    var ene_enden_conv = Number(ene_enden);
                    var andre_enden_conv = Number(andre_enden);
                    var rope_price = (length*vprice) + ene_enden_conv + andre_enden_conv;
                    var total_pris = rope_price;
                        if (rope_price != 0){
                            $('.price').html(total_pris+',-');
                        }
                    }
                });
            }
        });
    });
    </script>
    <?php
    }
}

1 Ответ

1 голос
/ 04 апреля 2019

Чтобы также не обновлять цены на соответствующие продукты, вам просто нужно внести небольшие изменения, заменив:

$('.price').html(total_pris+',-');

на:

$('.woocommerce-variation-price > .price').html(total_pris+',-');

Это должно решить вашу проблему.

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