Фильтрация meta_query в WP_Query по числовым значениям не работает
Это была очень сложная формулировка.
У меня есть пользовательский тип записи "event" с полем выбора даты/времени "event_date", созданным с помощью плагина Advanced Custom Fields. Это поле сохраняет UNIX-временную метку в базу данных. Я пытаюсь использовать WP_Query для получения всех событий, которые происходят сегодня или в будущем. Вот код, который у меня есть сейчас:
$args = Array(
'post_type' => 'event', // Тип записи - события
'posts_per_page' => -1, // Получить все записи
'meta_key' => 'event_date', // Ключ метаполя с датой
'orderby' => 'meta_value_num', // Сортировка по числовому значению
'order' => 'ASC', // По возрастанию
'meta_query' => array( // Мета-запрос
'key' => 'event_date', // Ключ метаполя
'compare' => '>=', // Сравнение: больше или равно
'value' => intval(strtotime(date('Y-m-d'))), // Текущая дата в timestamp
'type' => 'numeric' // Тип данных - числовой
),
);
$query = new WP_Query( $args ); // Создание нового запроса
Однако запрос возвращает все события, как прошедшие, так и будущие.
Я понимаю, что временные метки хранятся в базе данных как строки, поэтому сравнение 'compare' => '>=' обычно не работало бы, но согласно тому, что я нашел в Google и в Codex, параметр 'type' => 'numeric' должен преобразовать строку в число и позволить сравнить ее с моим значением сегодняшней даты в полночь. К сожалению, это не работает, и я не понимаю почему.
Попробуйте использовать массив массивов в вашем meta_query.
$args = array(
'post_type' => 'event', // Тип записи - события
'posts_per_page' => -1, // Количество записей (-1 - вывести все)
'meta_key' => 'event_date', // Мета-ключ для сортировки
'orderby' => 'meta_value_num', // Сортировка по числовому значению
'order' => 'ASC', // Сортировка по возрастанию
'meta_query' => array( // Массив мета-запросов
array(
'key' => 'event_date', // Ключ мета-поля
'compare' => '>=', // Оператор сравнения (больше или равно)
'value' => intval(strtotime(date('Y-m-d'))), // Текущая дата в timestamp
'type' => 'numeric' // Тип значения - числовой
)
),
);
$query = new WP_Query( $args ); // Создаем новый запрос

Вау, ты спас мой день этим ответом! Я пытался фильтровать записи по пользовательскому числовому полю type_price и делал это так:
'meta_query' => array(
array(
'key' => 'type_price',
'value' => array( 0, 500000 ),
'compare' => 'BETWEEN',
'type' => 'NUMERIC',
)),
Но оказалось, что для сортировки по возрастанию нужно делать так:
array(
'posts_per_page' => -1,
'meta_key' => 'type_price',
'orderby' => 'meta_value_num',
'order' => 'ASC',
'meta_query' => array(
array(
'key' => 'type_price',
'value' => array( 0, 500000 ),
'compare' => 'BETWEEN',
'type' => 'NUMERIC',
)
)),
Огромное спасибо :)
