Вопрос или проблема
Я не знаю, как превратить некоторые параметры WP QUERY в строку запроса URL. Большинство из них довольно просты, но есть некоторые, которые я не знаю, как заставить работать. Например, для этих параметров WP_QUERY:
$args = array(
'post_type' => 'post',
's' => 'ключевое слово',
);
строка запроса для этого выглядит так: ?s=ключевое%20слово&post_type=post
Какова строка запроса для параметра ‘after’ со значением ’24 часа назад’. Например, этот WP_QUERY получает посты, созданные за последние 24 часа:
$args = array(
'date_query' => array(
array(
'after' => '24 часа назад',
),
),
);
Но я не знаю, какая строка запроса для этого. Это не работает:
?after=24%20hours%20ago
Любая помощь будет оценена.
Функция PHP http_build_query(); вернет другую строку для этого массива. Она не останется читаемой, как массив, но, я верю, она будет работать как параметр для WP_Query.
build_query является эквивалентом WordPress для той же функциональности.
Оказывается, что build_query
немного отличается от http_build_query
.
http_build_query
вернул date_query%5B0%5D%5Bafter%5D=24+hours+ago
, а build_query
вернул date_query%5B0%5D%5Bafter%5D=24 часа назад
. Я думаю, что последнее будет работать для WP_Query.
Согласно кодексу, вы можете использовать любую строку, совместимую с strtotime(), так что вы можете использовать:
‘after’ => ‘-24 часов’
.
Ответ или решение
Для работы с параметрами WP_Query и их преобразованием в строку URL запроса (query string) в WordPress необходимо учитывать специфику передачи данных в виде ассоциативных массивов. Это особенно важно для параметров, таких как date_query
, к которым относится и параметр after
, который используется для получения постов, созданных в указанный период времени.
Преобразование WP_Query параметров в query string
Когда вы создаете массив с параметрами WP_Query, такие параметры, как ‘post_type’ или ‘s’, легко преобразуются в строку запроса. Например, вот так:
$args = array(
'post_type' => 'post',
's' => 'keyword',
);
Для данного примера строка запроса будет выглядеть так:
?s=keyword&post_type=post
Параметр ‘after’
Для параметра ‘after’ в date_query
, который позволяет получать посты, созданные после определенной даты или времени, преобразование становится несколько сложнее. Например, следующий код:
$args = array(
'date_query' => array(
array(
'after' => '24 hours ago',
),
),
);
Чтобы правильно сформировать строку запроса, необходимо помнить, что WordPress использует структуру вложенных массивов для параметра date_query
. Строка запроса для такого массива может выглядеть следующим образом:
?date_query[0][after]=24%20hours%20ago
Однако, как правильно указал один из пользователей, удобнее использовать функцию build_query()
в WordPress, чтобы корректно отформатировать подключаемые данные. Данная функция учитывает специфику работы с ассоциативными массивами и создаст строку, подходящую для WP_Query:
$query_string = build_query($args);
В результате мы получим строку:
?date_query%5B0%5Bafter%5D=24+hours+ago
Использование альтернативных значений для ‘after’
Также стоит заметить, что в качестве значения для параметра after
вы можете использовать строки, совместимые с функцией strtotime()
. Например:
$args = array(
'date_query' => array(
array(
'after' => '-24 hours',
),
),
);
Для этой структуры строка запроса будет выглядеть следующим образом:
?date_query[0][after]=-24%20hours
Заключение
Таким образом, чтобы правильно преобразовать параметры WP_Query в строку для передачи через URL, необходимо обращать внимание на структуру массивов и способы их кодирования. Функция build_query()
является вашим лучшим другом в этом случае, так как она гарантирует корректное форматирование строк без лишних затруднений. Не забывайте также учитывать возможность использования понятных вам альтернативных форматирований для временных меток, что еще больше упростит вашу работу с WP_Query.