• Вопрос без рабочей ссылки на проблему считается риторическим. Без ссылки и скриншота - провокацией!

Изменение вывода свойств товара (radiobutton).

Image CMS

Vicos

Форумчанин
#1
Здравствуйте форумчане!
Наткнулся на проблему с реализацией, как изменить вывод определённого свойства товара из выпадающего списка в radiobutton.
Вот яркий пример что хочется получить. Нашёл как сделать выпадающий список, собственно не трудно было найти решение.
На JS перебить думаю пробовать в последний момент, на PHP всё же будет вернее.
Мне бы зацепки какой хук да и какими данными оперировать.
Плагин Woocommerce Radio Buttons не работает, может в конфликте с функцией отображением свойства выпадающего списка.
Пока не совсем освоил хуки на WP, да и до написания плагинов ещё не дошёл.
 
Последнее редактирование:

Vicos

Форумчанин
#2
Реализовал!)
В файле 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.
 
Последнее редактирование:

brash

Новичок
#3
Спасибо искал что то похожее, пока не знаю то или нет. У меня задача стоит взять из произвольного поля цифры и
вставлять их в поле цена при выборе одного из двух параметров "комплект | полотно".
Собственно такие танцы из за того что пользуюсь при добавлении импортом, задача такая чтоб из админки
товары не добавлять, только импортом. Вот и пытаюсь упростить задачу))

В общем думаю если ваш код немного переписать то как раз получится то что я хочу.