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 );
Можете так попробовать
Вы не имеете права на публикацию сообщений в этой теме