Введите часть искомого слова, названия или фразы...
↑ ↓
  1. Новые темы озаглавленные с маленькой буквы - удаляются без предупреждения!
  2. Вопрос без рабочей ссылки на проблему считается риторическим. Без ссылки и скриншота - провокацией!

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

Тема в разделе "Вопросы, советы и доработки.", создана пользователем Vicos, 31 янв 2015.

  1. Vicos

    Vicos

    Сообщения:
    34
    Симпатии:
    5
    Баллы:
    8
    Здравствуйте форумчане!
    Наткнулся на проблему с реализацией, как изменить вывод определённого свойства товара из выпадающего списка в radiobutton.
    Вот яркий пример что хочется получить. Нашёл как сделать выпадающий список, собственно не трудно было найти решение.
    На JS перебить думаю пробовать в последний момент, на PHP всё же будет вернее.
    Мне бы зацепки какой хук да и какими данными оперировать.
    Плагин Woocommerce Radio Buttons не работает, может в конфликте с функцией отображением свойства выпадающего списка.
    Пока не совсем освоил хуки на WP, да и до написания плагинов ещё не дошёл.
     
    Последнее редактирование: 31 янв 2015
  2. Vicos

    Vicos

    Сообщения:
    34
    Симпатии:
    5
    Баллы:
    8
    Реализовал!)
    В файле 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.
     
    Последнее редактирование: 10 фев 2015
    • Нравится Нравится x 2
  3. brash

    brash

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

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