Intereting Posts
WPML Получить url без вывода Как увеличить время выполнения скрипта на моем сервере Мета-поле (в пользовательском типе сообщений) с двумя полями разных типов запрос на поиск «родительских» сообщений CPT A при фильтрации «дочерних» сообщений CPT B Как я могу проверить, есть ли на определенной странице сгенерированной плагином или дочернем Как добавить пользовательские элементы страницы в редактор WYSIWYG? Почему json_decode не работает? этикетки пользовательских таксономов на иврите Являются ли теги отличными от категорий? Как включить пользовательский код на страницу, которая настроена для работы на главной странице? Запрос, который дважды присоединяется к таблице postmeta Расширенный заказ query_posts Каковы недостатки при загрузке имен файлов на разных языках? Передать переменную от функции до короткого кода Как проверить, имеет ли категория родительские и дочерние категории?

Фильтр Ajax для фильтрации сообщений с датой, ценой и категорией

Я создаю фильтр сообщений Ajax для типа персонализированного табло. И привязка для фильтрации сообщений с min+max price inputs & with 3 things are follwing .

1: Дата Post Date = ASC or DESC

2: Пользовательское поле с числовым значением Price = ASC or DESC

3: Категории

Фильтр хорошо работает при его фильтрации 3 части отдельно. Но я пытаюсь объединить его внутри одного <select>...</select> . А затем работать с Price range inputs

Требуется: его результат показывает min&max price inputs и отдельно.

Нужно изменить порядок сообщения с этой формой?

Мой тестовый сервер LINK

HTML ЧАСТЬ:

 <form action="<?php echo site_url() ?>/tablet" method="POST" id="filter"> <input type="text" name="price_min" placeholder="Min price" /> <input type="text" name="price_max" placeholder="Max price" /> <select name="orderby"> <option name="date" value="ASC" /> Date Asc </option> <option name="date" value="DESC" /> Date Desc </option> <option name="price" value="ASC" /> Price Asc </option> <option name="price" value="DESC" /> Price Desc </option> <?php if( $terms = get_terms( 'tablet-cat', 'orderby=name' ) ) : // to make it simple I use default categories foreach ( $terms as $term ) : echo '<option value="' . $term->term_id . '">' . $term->name . '</option>'; // ID of the category as the value of an option endforeach; endif; ?> </select> <button>Apply filter</button> <input type="hidden" name="action" value="myfilter"> </form> 

Function.php:

 function misha_filter_function(){ $args = array( 'orderby' => ('date'), // we will sort posts by date 'order' => $_POST['date'], // ASC или DESC 'post_type' => array( 'tablet') ); // for Price / Custom field $args['meta_query'][] = array( 'key' => 'price', 'type' => 'NUMERIC', 'orderby' => ('price'), // we will sort posts by date 'order' => $_POST['price'] ); // for taxonomies / categories if( isset( $_POST['categoryfilter'] ) && $_POST['categoryfilter'] ) $args['tax_query'] = array( array( 'taxonomy' => 'tablet-cat', 'field' => 'id', 'terms' => $_POST['categoryfilter'] ) ); // create $args['meta_query'] array if one of the following fields is filled if( isset( $_POST['price_min'] ) && $_POST['price_min'] || isset( $_POST['price_max'] ) && $_POST['price_max'] ) $args['meta_query'] = array( 'relation'=>'AND' ); // AND means that all conditions of meta_query should be true // if both minimum price and maximum price are specified we will use BETWEEN comparison if( isset( $_POST['price_min'] ) && $_POST['price_min'] || isset( $_POST['price_max'] ) && $_POST['price_max'] ) { $args['meta_query'][] = array( 'key' => 'price', 'value' => array( $_POST['price_min'], $_POST['price_max'] ), 'type' => 'numeric', 'compare' => 'between', 'post_type' => array( 'tablet') ); } else { // if only min price is set if( isset( $_POST['price_min'] ) && $_POST['price_min'] ) $args['meta_query'][] = array( 'key' => 'price', 'value' => $_POST['price_min'], 'type' => 'numeric', 'compare' => '>', 'post_type' => array( 'tablet') ); // if only max price is set if( isset( $_POST['price_max'] ) && $_POST['price_max'] ) $args['meta_query'][] = array( 'key' => 'price', 'value' => $_POST['price_max'], 'type' => 'numeric', 'compare' => '<', 'post_type' => array( 'tablet') ); } $query = new WP_Query( $args ); if( $query->have_posts() ) : while( $query->have_posts() ): $query->the_post(); get_template_part('content/content', 'archive'); endwhile; wp_reset_postdata(); else : echo 'No posts found'; endif; die(); } add_action('wp_ajax_myfilter', 'misha_filter_function'); add_action('wp_ajax_nopriv_myfilter', 'misha_filter_function');