11ответ(ов) в теме
Сделал все по
Вы не можете просматривать опубликованные ссылки
.
По двум кастомным полям.
Форма:
Спойлер
<div class="filter-box"> <label></label> <div class="filter-item"> <input type="text" name="min-price" size="3" value="" required placeholder=""> <input type="text" name="max-price" size="3" value="" required placeholder=""> </div> </div> <div class="filter-box"> <label></label> <div class="filter-item"> Дата занятия Цена </div> </div> <div class="filter-box"> <label></label> <div class="filter-item"> - Не выбрано - По убыванию По возрастанию </div> </div> <input class="filter-btn" type="submit" value="">
Код:
Спойлер
$args = array( 'post_type' => 'lessons', 'meta_key' => $_GET['meta_key'], 'order' => $_GET['order'], 'orderby' => $_GET['orderby'], 'paged' => get_query_var( 'paged' ), 'posts_per_page' => '-1', 'meta_query' => array( array( 'key' => 'lessons_price', 'value' => array( $_GET['min-price'], $_GET['max-price'] ), 'type' => 'numeric', 'compare' => 'BETWEEN' ), array( 'key' => 'date_start_lessons', 'value' => date("Y-m-d"), 'compare' => '=', 'type' => 'numeric' ) ) ); query_posts( $args );
По дате фильтрует, а вот по цене отказывается.
Может я сделал что то не так?
В meta_key приходит только одно поле.
Спойлер
Array ( [post_type] => lessons [meta_key] => date_start_lessons [order] => ASC [orderby] => meta_value_num [paged] => 0 [posts_per_page] => -1 [meta_query] => Array ( [0] => Array ( [key] => lessons_price [value] => Array ( [0] => 1 [1] => 2500 ) [type] => numeric [compare] => BETWEEN ) [1] => Array ( [key] => date_start_lessons [value] => 2022-07-27 [compare] => = [type] => numeric ) ) )
Я даже не знаю что делаю не так. Никогда с фильтрами не работал (кроме как готовые плагины для woocomerce).
Я уже попробовал инпутам разные name указать, meta_key_price и meta_key_date, в дампе приходят оба поля, сортировка по дате отрабатывает, а по цене так же в разнобой.
и в meta_query добавил 'relation' => 'AND',
Спойлер
$args = array( 'post_type' => 'lessons', 'meta_key_price' => $_GET['lessons_price'], 'meta_key_date' => $_GET['date_start_lessons'], 'order' => $_GET['order'], 'orderby' => $_GET['orderby'], 'paged' => get_query_var( 'paged' ), 'posts_per_page' => '-1', 'meta_query' => array( 'relation' => 'AND', array( 'key' => 'lessons_price', 'value' => array( $_GET['min-price'], $_GET['max-price'] ), 'type' => 'numeric', 'compare' => 'BETWEEN' ), array( 'key' => 'date_start_lessons', 'value' => date("Y-m-d"), 'compare' => '=', 'type' => 'numeric' ) ) ); $filter_lessons = new WP_Query( $args );
ну у вас в поле
[meta_key]
должен передаваться lessons_price - имя произвольного поля цены по которому сортировка производится
а если вы думаете, что с можете сортировать по нескольким произвольным полям, то не выйдет
на этом убогом функционале можно строить только довольно простые фильтры
$args = array( 'post_type' => 'lessons', 'orderby' => ['lessons_price_clause' => 'DESC', 'date_start_lessons_clause' => 'DESC'], 'paged' => get_query_var( 'paged' ), 'posts_per_page' => '-1', 'meta_query' => array( 'relation' => 'AND', 'lessons_price_clause' => array( 'key' => 'lessons_price', 'value' => array( $_GET['min-price'], $_GET['max-price'] ), 'type' => 'numeric', 'compare' => 'BETWEEN' ), 'date_start_lessons_clause' => array( 'key' => 'date_start_lessons', 'value' => date("Y-m-d"), 'compare' => '=', 'type' => 'numeric' ) ) ); $filter_lessons = new WP_Query( $args );
Можете так попробовать
Вы не имеете права на публикацию сообщений в этой теме