@andryy

Как правильно в Wordpress реализовать 2-уровневое меню-фильтр товаров?

Как правильно в Wordpress реализовать 2-уровневое меню-фильтр товаров, если первый уровень - это категории товаров, второй - бренды. Меню должно формироваться автоматически. Если категория или бренд не имеет записей - соответствующие пункты или подпункты меню не выводятся. Один бренд может быть во всех категориях.
  • Вопрос задан
  • 1425 просмотров
Решения вопроса 1
wppanda5
@wppanda5 Куратор тега WordPress
WordPress Mедведь
ajax + wp_Query на пальцах досконально не объяснить
но примерно так

получаем категории в селект
$terms = get_terms("category_tow");
 $count = count($terms);
 if($count > 0){
	 echo "<select id='category-tow'>";
	 foreach ($terms as $term) {
	   echo "<option value='" . $term->term_id ." '>" . $term->name. "</option>";

	 }
	 echo "</select>";
 }

аналогично для брендов

дальше запуск по смене селекта
$('#category-tow').change(function(){
var data={
         action: 'sort_action',
        security: Ajax.security,
        cat : $(this).val()
}
$.post(Ajax.ajaxurl, data, function (response) {
                тут разбираете response и пишете в нужные места
            });

});


обработчик
add_action( 'wp_ajax_sort_action', 'sort_action_callback' );
add_action( 'wp_ajax_nopriv_sort_action', 'sort_action_callback' );
function sort_action_callback() {
    check_ajax_referer( 'my-special-string', 'security' );

    $data_brend = $_POST['cat'];
    $args = array(
        'post_type' => 'products',
        'tax_query' => array(
            'relation' => 'AND',
            array(
                'taxonomy' => 'category_tow',
                'field' => 'id',
                'terms' => array($data_brend)
            ),
            array(
                'taxonomy' => 'brend_tow'
            )
        ),
    );

my_query = new WP_Query($args);
/* тут ваш цикл  */
// при этом для каждого поста получаете бренды и пишете их в отдельный массив 

echo <div id="loop"> тут результат работы цикла</div>
echo <div id="select"> тут разобранный на опции селекта массив брендов </div>
    die();
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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