@alexiusgrey

Как умножить цену выбранной вариации на количество на странице ТОВАРА?

Мне надо сделать цену товара на кнопке добавления в корзину. В товаре.
В каталоге не надо.

Вот тут

Я сначала использовал популярный в этой теме сниппет, но исправил под себя, потому что мне на странице магазина не надо
add_filter( 'woocommerce_product_single_add_to_cart_text', 'custom_add_to_cart_price', 20, 2 ); // 

function custom_add_to_cart_price( $button_text, $product ) {
    // Variable products
    if( $product->is_type('variable') ) {        
        if(  is_product() ){
            $product_price = wc_price( wc_get_price_to_display( $product, array( 'price' => $product->get_variation_price() ) ) );		
	     return $button_text . ' за ' . strip_tags( $product_price );
        } 
    }	
	  if(is_single()  &&  $product->is_type('simple'))	 
	 {
        $product_price = wc_price( wc_get_price_to_display( $product ) );
        return $button_text . ' за ' . strip_tags( $product_price );
    }	
    // All other product types  
        else {
            return $button_text;
        }
}


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

Для этого использовал jquery - вышестоящший сниппет оставил для простых товров, а этим скриптом на вариативных я перебиваю
jQuery(document).on('found_variation', 'form.cart', function( event, variation ) {  
	 var qty = jQuery('.summary .quantity .qty').val(); 
         jQuery('.summary .single_add_to_cart_button').html(variation.price_html);     
		 jQuery('button.single_add_to_cart_button .price').prepend('У кошик за ');
      });

Вот так срабатывает, при переключении вариаций цифра внутри кнопки меняется.
Но мне все еще нужен калькулятор.
И на простом, и на вариативном товаре.
Умножить числовое значение цены в простом товаре и цены вариации в вариативном на количество.
Собственно этот кусок рабочий
var vqty = jQuery('.summary .quantity .qty').val();

Мне кажется, должно быть то-то типа var vprice = parseInt('.woocommerce-variation-price bdi')), vprice*vqty, но что пробовал - не сработало, как вырулить этот калькулятор до конца?
  • Вопрос задан
  • 150 просмотров
Пригласить эксперта
Ответы на вопрос 1
@alexiusgrey Автор вопроса
Вот такая рекурсия.
Еще надо проверить на косячность и не задевает ли другие функции
Пишу скорее для себя в будущем, потому что часто нахожу тут свои же вопросы и ответы, но если кому поможет - ок
jQuery(document).on('found_variation', 'form.cart', function( event, variation ) {  
	     var qtty = jQuery('.summary .quantity .qty').val(); 
	      currency    = currency = ' <?php echo get_woocommerce_currency_symbol(); ?>',
          vprice       = jQuery('.woocommerce-variation-price .amount').text().replace(/ /g,''),
          parsePrice  = parseFloat(vprice)*qtty,
          totalPrice  = 'У кошик за ' + parsePrice.toFixed(2) + currency;
         jQuery('.summary .single_add_to_cart_button').html(totalPrice); 
			jQuery( '[name=quantity]' ).on( 'input change', function() {
					     var qtty = jQuery('.summary .quantity .qty').val(); 
						  currency    = currency = ' <?php echo get_woocommerce_currency_symbol(); ?>',
						  vprice       = jQuery('.woocommerce-variation-price .amount').text().replace(/ /g,''),
						  parsePrice  = parseFloat(vprice)*qtty,
						  totalPrice  = 'У кошик за ' + parsePrice.toFixed(2) + currency;
						 jQuery('.summary .single_add_to_cart_button').html(totalPrice);   
				});
      });	
	
	jQuery( '.product-type-simple [name=quantity]' ).on( 'input change', function() {
					     var qtty = jQuery('.summary .quantity .qty').val(); 
						  currency    = currency = ' <?php echo get_woocommerce_currency_symbol(); ?>',
						  vprice       = jQuery('.summary .woocommerce-Price-amount').text().replace(/ /g,''),
						  parsePrice  = parseFloat(vprice)*qtty,
						  totalPrice  = 'У кошик за ' + parsePrice.toFixed(2) + currency;
						 jQuery('.summary .single_add_to_cart_button').html(totalPrice);   
				});
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы