@Concencuc

Как высчитывать разницу между вариациями товара woocommerce?

У меня есть атрибуты колличества и цвета.
Если выбран атрибут ( 3 позиции ), то он дешевле, нежеле выбирать 3 товара по атрибуту ( 1 позиция). И я хочу высчитать разницу по формуле (3 позиции) - 3*(1 позиция). Как мне это сделать, подскажите пожалуйста.
618d16fad9710096962702.jpeg
  • Вопрос задан
  • 37 просмотров
Решения вопроса 1
wppanda5
@wppanda5 Куратор тега WordPress
WordPress Mедведь
Загляните в исходный код, вашей карточки товара, и увидете, что форма содержит data атрибут со всеми данными о ваших вариациях в json формате.

Соответственно, все данные у вас доступны в js. Дальше остается только написать скрипт, само ядро тоже тянет данные при переключении вариаций от туда же
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@Anonimmus
(3 позиции) - 3*(1 позиция)
3 - 3 * 1 = 0
...
А если серьезно то в товаре вы ведь указываете ценну + в соответствии с атрибутами.
Например: 3 вариант цвета (белый) и атрибут (например гранит) то цена = ваша цена.

Вариативный товар как раз именно так и настраивается.
Ответ написан
Комментировать
@Concencuc Автор вопроса
делюсь своим решением
<!-- add economy value -->
	<script type="text/javascript">
		<?php
		$variations_array = [];
		if($product->is_type('variable')){

		    foreach($product->get_available_variations() as $variation ){
				$single_array = [];

				// add attributes
			    foreach( $variation['attributes'] as $key => $value ){
					$taxonomy = str_replace('attribute_', '', $key );
					$term_name = get_term_by( 'slug', $value, $taxonomy )->slug;

					$attr = [$key => $term_name];

					$single_array += $attr;
			    }
			    
			    // add price
			    $price = ['price' => $variation['display_price']];
			    $single_array += $price;
			      
			    array_push($variations_array, $single_array);
		    }
		}
		// var_dump($variations_array);
		$js_array = json_encode($variations_array);

		echo "var variations = ". $js_array . ";\n";
		?>

		jQuery(function( $ ) {
			$(document).ready(function() {
				$('.woocommerce-variation').after(function() {
					return '<h3 class="save"></h3>';
				});
				// $('.single_variation_wrap').after('<p class="save"></p>');
				$('.variations select').change(function() {
					let attr = new Object();
					$('.variations select').each(function() {
						let name = $(this).attr('name');
						let value = $(this).val();
						attr[name] = value;
					});
					
					if (attr.attribute_pa_color != '' && attr.attribute_pa_size != '') {

						let onePrice = variations.find(variation => variation.attribute_pa_color == attr.attribute_pa_color && variation.attribute_pa_size == '1-kiste')['price'];
						let currentPrice = variations.find(variation => variation.attribute_pa_color == attr.attribute_pa_color && variation.attribute_pa_size == attr.attribute_pa_size)['price'];
						let currentSize = variations.find(variation => variation.attribute_pa_color == attr.attribute_pa_color && variation.attribute_pa_size == attr.attribute_pa_size).attribute_pa_size;


						if (onePrice != currentPrice) {
							let currentSizeNum = parseInt(currentSize.match(/\d+/));
							
							$('.single_variation_wrap .save').html('Sparen: ' + Math.round((onePrice * currentSizeNum - currentPrice) * 100) / 100 + '€');

							$('.single_variation_wrap .quantity').addClass('hidden');
						} else {
							$('.single_variation_wrap .save').html('');

							$('.single_variation_wrap .quantity').removeClass('hidden');
						}
					}
				});
			});
		});
	</script>
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы