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

    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;
            }
        }
    }
    //Для формы фильтра на главную страницу - конец


    Код скопировал целиком, понятно что у вас будут свои атрибуты
    Ответ написан
    2 комментария