Не меняется цена вариативного товара
-
На днях обновился вукомерц. После обновления перестало корректно меняться стоимость вариативного товара (заметил это после обновления). Точнее она меняется, но только после выбора вариации и нажатия на пустом месте экрана. Раньше менялась сразу при выборе вариации без нажатия по любому месту экрана. Подскажите в чем проблема и как решить данную проблему!? Данная проблема со всеми товарами.
-
Тема изменена 6 лет, 2 месяца назад пользователем
Ed777.
Страница, с которой нужна помощь: [войдите, чтобы увидеть ссылку]
-
Тема изменена 6 лет, 2 месяца назад пользователем
-
Видимо, что что-то изменилось в шаблонах (тег или класс) и теперь скрипт, совместимый с предыдущей версией, не отрабатывают так, как задумывалось.
@takeback вы мне как то очень помогли с данным кодом. Ниже данный код. Но после обновления вукомерц я так понимаю что то с ним не то. Цена не меняется на вариативном товаре пока не кликнешь по пустому месту экрана. Можно как то исправить? Подскажете?
//Отображение одной цены (начало) add_action( 'woocommerce_before_single_product', 'check_if_variable_first' ); function check_if_variable_first(){ if ( is_product() ) { global $post; $product = wc_get_product( $post->ID ); if ( $product->is_type( 'variable' ) ) { // removing the price of variable products remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_price', 10 ); //Показываем одинаковую стоимость вариативных товаров add_filter('woocommerce_available_variation', function ($value, $object = null, $variation = null) { if ($value['price_html'] == '') { $value['price_html'] = '<span class="price">' . $variation->get_price_html() . '</span>'; } return $value; }, 10, 3); // Change location of add_action( 'woocommerce_single_product_summary', 'custom_wc_template_single_price', 10 ); function custom_wc_template_single_price(){ global $product; // Variable product only if($product->is_type('variable')): // Main Price foreach($product->get_available_variations() as $pav){ $def=true; foreach($product->get_variation_default_attributes() as $defkey=>$defval){ if($pav['attributes']['attribute_'.$defkey]!=$defval){ $def=false; } } if($def){ $price = $pav['price_html' ] ; } } ?> <style> div.woocommerce-variation-price, div.hidden-variable-price { height: 0px !important; overflow:hidden; position:relative; line-height: 0px !important; font-size: 0% !important; } </style> <script> jQuery(document).ready(function($) { $('select').blur( function(){ if( '' != $('input.variation_id').val() ){ $('p.price').html($('div.woocommerce-variation-price > span.price').html()).append('<p class="availability">'.html()+'</p>'); console.log($('input.variation_id').val()); } else { $('p.price').html($('div.hidden-variable-price').html()); if($('p.availability')) $('p.availability').remove(); console.log('NULL'); } }); }); </script> <?php echo '<p class="price">'.$price. '</p> <div class="hidden-variable-price" >'.$price.'</div>'; endif; } } } }@d7fox7vr Я уже говорил, что код не мой, потому как я ближе к 0 в программировании. По этому я не могу однозначно определить проблему. К тому же я не обновлялся, по этому не могу потестить у себя. Видно что консоль ругается…
«Uncaught TypeError: «<p class=»availability»>».html is not a function»попробуйте заменить эту часть кода
.append('<p class="availability">'.html()+'</p>');на вот это
.append('<p class="availability">'+'</p>');Я не уверен что это что-то решит, но как минимум станет ясно что дело не в этой ошибке.
-
Ответ изменён 6 лет, 2 месяца назад пользователем
takeback.
Не помогло. Но спасибо!
Костыльком попробуйте:
<script> jQuery(document).ready(function($) { $('select').change( function(){ // console.log($( 'input.variation_id' )); window.setTimeout( change_price , 1000 ); function change_price(){ if( '' != $('input.variation_id').val() ){ $('p.price').html($('div.woocommerce-variation-price > span.price').html()).append('<p class="availability">'+'</p>'); console.log($('input.variation_id').val()); } else { $('p.price').html($('div.hidden-variable-price').html()); if($('p.availability')) $('p.availability').remove(); console.log('NULL'); } } }); }); </script>@dallynx подскажите что значит попробовать Костыльком.) Не понимаю Вас(
В том коде, который Вы опубликовали замените скрипт на тот, что предложил я. Это плохое решение. Работать если и будет, то с задержкой, поэтому «костыль».
Костылек действительно работает, но очень тормозит.
Может быть кто-то уже нашел вариант нового кода для последней версии Woocommerce?
Мне нужна только одна функция — смена цены при выборе вариации, чтобы выводилась цена выбранной вариации вместо диапазона. -
Ответ изменён 6 лет, 2 месяца назад пользователем
Тема «Не меняется цена вариативного товара» закрыта для новых ответов.