11ответ(ов) в теме
Владимир
не в сети 1 месяц
На сайте с 29.11.2021
Участник
Тем 10
Сообщения 60
1
22:44
Версия WP-Recall: 16.26.5

Сделал все по

Вы не можете просматривать опубликованные ссылки

.

По двум кастомным полям.
Форма:

Спойлер
	
		

		<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 );


По дате фильтрует, а вот по цене отказывается.
Может я сделал что то не так?

0
Андрей CS
не в сети 15 часов
На сайте с 30.11.-0001
Администратор
Тем 71
Сообщения 16934
2
09:27

Вы распечатайте массив $args, посмотрите что у вас формируется внутри него, возможно, значения не совсем корректные, также проверьте может у вас нет публикаций под эту выборку.

0
Владимир
не в сети 1 месяц
На сайте с 29.11.2021
Участник
Тем 10
Сообщения 60
3
10:25

В 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
                )

        )

)

0
Preci
не в сети 23 минуты
На сайте с 11.11.2014
Участник
Тем 71
Сообщения 1644
4
12:15

Так если вам в $_GET['meta_key'] приходит всегда одно и то же поле - значит вы в форме некорректно что то указали в этом селекте

0
Владимир
не в сети 1 месяц
На сайте с 29.11.2021
Участник
Тем 10
Сообщения 60
5
21:34

Я даже не знаю что делаю не так. Никогда с фильтрами не работал (кроме как готовые плагины для 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 );

0
Андрей CS
не в сети 15 часов
На сайте с 30.11.-0001
Администратор
Тем 71
Сообщения 16934
6
08:57

у вас в чем проблема конкретно? записи вообще не в том диапазоне цен выбираются или они не сортируются по цене?

0
Владимир
не в сети 1 месяц
На сайте с 29.11.2021
Участник
Тем 10
Сообщения 60
7
11:41

Андрей CS сказал(а)
у вас в чем проблема конкретно? записи вообще не в том диапазоне цен выбираются или они не сортируются по цене?

не сортируются по цене. Когда делаю по одному кастомному полю, то все работает отлично (цене или дате). А вот вместе не хотят работать.

0
Андрей CS
не в сети 15 часов
На сайте с 30.11.-0001
Администратор
Тем 71
Сообщения 16934
8
12:01

ну у вас в поле
[meta_key]
должен передаваться lessons_price - имя произвольного поля цены по которому сортировка производится
а если вы думаете, что с можете сортировать по нескольким произвольным полям, то не выйдет
на этом убогом функционале можно строить только довольно простые фильтры

0
Владимир
не в сети 1 месяц
На сайте с 29.11.2021
Участник
Тем 10
Сообщения 60
9
12:12

А есть ли решение по данному вопросу, или туториал по множественным кастомным полям?

0
Андрей CS
не в сети 15 часов
На сайте с 30.11.-0001
Администратор
Тем 71
Сообщения 16934
10
12:13

конечно, такое можно сделать, но тут уже стройте нужный вам sql-запрос, материала по этому вопросу очень много)

0
Preci
не в сети 23 минуты
На сайте с 11.11.2014
Участник
Тем 71
Сообщения 1644
11
00:24

$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 );

Можете так попробовать

0
Вы не имеете права на публикацию сообщений в этой теме