Реализовал!)
В файле single-product/add-to-card/variable.php
Перед выводм свойств проверяем, к примеру по id свойства ищем начало вывода формы
Код:
<form class="variations_form cart" method="post" enctype='multipart/form-data' data-product_id="<?php echo $post->ID; ?>" data-product_variations="<?php echo esc_attr( json_encode( $available_variations ) ) ?>">
И добавляем условие на нужное нам свойство.
Код:
if (esc_attr( sanitize_title( $name )) == 'pa_color') :
Где color созданное в админке свойство товара.
И далее изменяем вывод:
Код:
echo '<input type="radio" name="attribute_pa_color" id="' . esc_attr( $term->slug ) . '" value="' . esc_attr( $term->slug ) . '" class="active checked-color ' . esc_attr( $term->slug ) . '" ' . selected( sanitize_title( $selected_value ), sanitize_title( $term->slug ), false ) . '><label for="' . esc_attr( $term->slug ) . '"><span></span></label>';
Ну и далее нам надо менять variable_id у наборов свойств. Вступает в силу js, тут мне конечно стыдно будет за такой код.
Код:
var strJson = $('.variations_form').attr('data-product_variations');
var obj = jQuery.parseJSON(strJson);
objLenght = obj.length;
$('.checked-color').on('click', function(event) {
for (var i = 0; i <= objLenght-1; i++) {
var valSize = $('#pa_size').val();
var valColor = $('.checked-color:checked').attr('value');
var objColor = obj[i].attributes.attribute_pa_color;
var objSize = obj[i].attributes.attribute_pa_size;
var objId = obj[i].variation_id;
if (objColor == valColor && objSize == valSize) {
$('input[name=variation_id]').val(objId);
//console.log(objId);
$('.warning').remove();
//console.log('1 ' + objId + '|' + objSize + "|" + valSize + '|' + objColor + '|' + valColor);
return;
} else {
//console.log('0 ' + objId + '|' + objSize + "|" + valSize + '|' + objColor + '|' + valColor);
$('.warning').remove();
$('<div class="warning">Такого продукта нет</div>').insertAfter('.variations_form');
};
};
});
$('#pa_size').on('click', function(event) {
for (var i = 0; i <= objLenght-1; i++) {
var valSize = $('#pa_size').val();
var valColor = $('.checked-color:checked').attr('value');
var objColor = obj[i].attributes.attribute_pa_color;
var objSize = obj[i].attributes.attribute_pa_size;
var objId = obj[i].variation_id;
if (objColor == valColor && objSize == valSize) {
$('input[name=variation_id]').val(objId);
//console.log(objId);
$('.warning').remove();
//console.log('1 ' + objId + '|' + objSize + "|" + valSize + '|' + objColor + '|' + valColor);
return;
} else {
//console.log('0 ' + objId + '|' + objSize + "|" + valSize + '|' + objColor + '|' + valColor);
$('.warning').remove();
$('<div class="warning">Такого продукта нет</div>').insertAfter('.variations_form');
};
};
});
Срабатывает проверка при каждом выборе свойства товара, где #pa_size - свойство size созданное в админке для указания размеров.
.checked-color класс input для выборов цвета, переопределённый в шаблоне для создания radio button.