То, что вы хотите, не представляется возможным только с помощью параметров строки запроса. Однако вы можете создать функцию в своей теме или плагин, который проверяет наличие параметров start_date
и end_date
, например, и соответствующим образом модифицирует запрос.
Вы хотите добавить эти функции в качестве фильтра в «pre_get_posts» и проверить наличие этих двух новых параметров, которые вы создали. Что-то вроде этого, добавляется в файл functions.php вашей темы должны это сделать:
//Add in our new custom query vars first
function add_query_vars_filter($vars){
$vars[] = "end_date";
$vars[] = "start_date";
return $vars;
}
add_filter('query_vars', 'add_query_vars_filter');
function parse_date_range_query_string($query){
$start_date = get_query_var('start_date', 1900);
$end_date = get_query_var('end_date', date("Y"));
if (!is_admin()) {
$query->set('date_query', array(
array(
'after' => array(
'year' => $start_date,
'month' => 1,
'day' => 1
),
'before' => array(
'year' => $end_date,
'month' => 12,
'day' => 31
),
'inclusive' => true
),
)
);
}
}
add_filter('pre_get_posts', 'parse_date_range_query_string');
Теперь, как гиперссылка example.com/?start_date=2014 & end_date = 2016 должны работать
UPDATE: Как бы эта работа с форматированной строкой YYYY-MM-DD? Незначительное изменение, так как параметры date_query до и после могут принимать строку timestamp вместо массива year, month, day, который я использовал выше. Вы просто смените функцию на следующее:
function parse_date_range_query_string($query){
$start_date = get_query_var('start_date', '1900-01-01');
$end_date = get_query_var('end_date', date("Y-m-d"));
if (!is_admin()) {
$query->set('date_query', array(
array(
'after' => $start_date,
'before' => $end_date,
'inclusive' => true
),
)
);
}
}
вау, спасибо большое. Это работает с каждым временным форматом PHP (если я изменил бит даты («Y»), чтобы отразить, например, формат ГГГГ-ММ-ДД)? – MultiformeIngegno
Мой пример не подходит для этого, так как вам придется разбирать год, месяц и день на отдельные переменные. Я обновлю свой ответ, чтобы показать, как он может работать с установленной датой YYYY-MM-DD –