vscalpel
@vscalpel

Как сделать фильтр по значение ACF select multiple?

Добрый день.
Столкнулся с такой проблемой и не могу найти решение.
Имеется произвольные поля select с возможность множество выбора значение созданы через ACF на Wordpresse проблема в том что когда хочу выводить посты отфильтрованы по эти поля то запрос возвращается пустой но если select только с одной значение тогда все работает как надо.

Фильтр:
кусок из функции
global $wp_query; // нужно заглобалить текущую выборку постов
$args = array(); // подготовим массив 
$args['meta_query'] = array('relation' => 'AND');
if (!empty($_GET['side'])) { // если передана фильтрация по разделу
	$args['meta_query'][] = array( // пешем условия в meta_query
		'key' => 'catalog__side', // название произвольного поля
		'value' => $_GET['side'], // переданное значение произвольного поля
		'type' => 'CHAR', // тип поля, нужно указывать чтобы быстрее работало, у нас здесь число
		'compare' => 'IN', // тип сравнения IN, т.е. значения поля комнат должно быть одним из значений элементов массива
		);
	}
query_posts(array_merge($args, $wp_query->query));


Настройка поле в ACF:
5ca74bb840437501412877.png
  • Вопрос задан
  • 944 просмотра
Пригласить эксперта
Ответы на вопрос 3
deniscopro
@deniscopro Куратор тега WordPress
WordPress-разработчик, denisco.pro
Добрый.

Вероятно, в базе хранится в виде сериализованного массива.

Попробуйте заменить
'compare' => 'IN'
на
'compare' => 'LIKE'
Ответ написан
Комментировать
vscalpel
@vscalpel Автор вопроса
Сделал такое решение которая в прицепе работает у меня, оставляю тут может кому пригодится:
if (!empty($_GET['side'])) { // если передана фильтрация по разделу
		$el = array();
		$op = array('relation' => 'OR');
		foreach ($_GET['side'] as $side) {
			$el[] = array( // пешем условия в meta_query
				'key' => 'catalog__side', // название произвольного поля
				'value' => $side, // переданное значение произвольного поля
				'type' => 'CHAR', // тип поля, нужно указывать чтобы быстрее работало, у нас здесь число
				'compare' => 'LIKE', // тип сравнения IN, т.е. значения поля комнат должно быть одним из значений элементов массива
			);
		}
		$args['meta_query'][] = array_merge($op, $el);
	}
Ответ написан
ssenj
@ssenj
HTML, CSS, PHP, WordPress, Bitrix
Тоже столкнулся с этой бедой. В итоге получился похожий на код выше
$args  = [
    'post_type'   => 'post',
    ...
    'meta_query'  => [
        [
            'key'     => 'meta_key_name',
            'value'   => $paramEquipment,
            'compare' => 'LIKE',
            'type'    => 'CHAR'
        ]
    ] 
];
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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