僅使用查詢字符串參數是不可能的。但是,您可以在您的主題或插件中創建一個函數,以檢查是否存在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年URL應該工作
UPDATE:如何將這項工作與YYYY-MM-DD格式化的字符串?由於參數前後的date_query可以採用時間戳字符串,而不是上面使用的年,月,日數組,因此稍作更改。您只需更改功能,如下所示:
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」)以反映YYYY-MM-DD格式)? – MultiformeIngegno
我的確切例子不適用於此,因爲您必須將年,月和日解析爲單獨的變量。我會更新我的答案,以顯示它如何與YYYY-MM-DD格式的日期一起使用 –