@squirtazzer

Как сделать фильтр по аттрибутам в woocommerce?

Здрасте, как сделать фильтрацию по атрибутам (свойствам) товара в woocommerce? Чтобы его можно было вывести в боковом виджете?
  • Вопрос задан
  • 9655 просмотров
Пригласить эксперта
Ответы на вопрос 4
wppanda5
@wppanda5 Куратор тега WordPress
WordPress Mедведь
Атрибуты это термины таксономий,
Соответственно получить таксономии продукта, пройтись циклом вывести их термины в виде чекбоксов, все это завернуть в форму.
В обработчике формы к текущему массиву аргументов запроса добавляете необходимые параметры tax_query все это оформляете виджетом.

Могут быть еще индивидуальные атрибуты товаров, там точно так же но с произвольными полями
Ответ написан
MaximusDem
@MaximusDem
Начинающий разработчик
Попробую вам на конкретном примере (делал для одного проекта) показать, то что хотел сказать WP Panda (если я правильно понял).
1) Сделайте форму, через которую пользователи будут выбирать нужные атрибуты (у меня этот фильтр был написан на основе формы для поиска)
<form role="search" method="get" class="woocommerce-product-search" name="s" 
      action="<?php echo esc_url(home_url('/')); ?>">
    <input style="display: none;" type="search"
           id="woocommerce-product-search-field-<?php echo isset($index) ? absint($index) : 0; ?>"
           class="search-field"
           placeholder="<?php echo esc_attr__('Search products&hellip;', 'woocommerce'); ?>" value=""
           name="s"/>
    <div class="search_title">
        Фильтр по параметрам шин
    </div>
    <div class="row s-fast-search__row justify-content-center">
        <div class="col-md-12">
            <?php
            $diametr = wp_dropdown_categories("taxonomy=pa_diametr&echo=0&show_option_none=Все внутренние диаметры шин&name=diametr");
            ?>
            <label>Выберите внутренний диаметр шины</label>
            <div><?php echo $diametr; ?></div>
        </div>
        <div class="col-md-12">
            <?php
            $razmer = wp_dropdown_categories("taxonomy=pa_razmer&echo=0&show_option_none=Все размеры&name=razmer");
            ?>
            <label>Выберите размер</label>
           <div> <?php echo $razmer; ?></div>
        </div>


        <div class="col-md-12">
		<?php $dropdowncats = wp_dropdown_categories(
        'hide_empty=0&depth=1&orderby=name&order=ASC&selected='.$_GET['product_cat'].'&hierarchical=1&echo=0&taxonomy=product_cat&show_option_none=Все категории'
); ?>
            <label>Категории</label>
<div><?php echo $dropdowncats; ?></div>
        </div>
    </div>
    <!--row-->
    <button type="submit" class="filtr_search_button"
            value="<?php echo esc_attr_x('Search', 'submit button', 'woocommerce'); ?>">Искать
    </button>
    <input type="hidden" name="post_type" value="product"/>
</form>

2) Добавьте обработчик этого всего в functions.php
//Для формы фильтра на главную страницу
add_action('pre_get_posts', 'search_by_cat');
function  search_by_cat() {
    global $wp_query;

    if (is_search()) {

        $diametr =  intval($_GET['diametr']);
        if($diametr>0){
            $wp_query->query_vars['tax_query'][] = array( //для атрибутов товаров
                "taxonomy" => "pa_diametr",
                "field" => "id",
                "terms" =>  $diametr
            );
        }

        $razmer =  intval($_GET['razmer']);
        if($razmer>0){
            $wp_query->query_vars['tax_query'][] = array(
                "taxonomy" => "pa_razmer",
                "field" => "id",
                "terms" =>  $razmer
            );
        }



		$cat =  intval($_GET['cat']);

        if($cat<0){
            $wp_query->query_vars['product_cat'] =  '';
        }else{
            $term = get_term_by('id',$cat,'product_cat');
            $wp_query->query_vars['cat'] = '';
            $wp_query->query_vars['product_cat'] =  $term->slug;
        }
    }
}
//Для формы фильтра на главную страницу - конец


Код скопировал целиком, понятно что у вас будут свои атрибуты
Ответ написан
@MrNovi4ok
Михаил, а возможна фильтрация по индивидуальным атрибутам товара? В виджетах есть фильтрация только по общим атрибутам. А мне помимо общих нужно прописать еще и индивидуальные
Ответ написан
Комментировать
mk3mk
@mk3mk
занимаюсь вёрсткой (иногда)
В списке виджетов есть виджет фильтрации по атрибутам

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

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

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