我有一个使用日期范围选择器的输入字段。此输入字段是搜索查询的一部分,该查询应按日期范围,时间和个别日期过滤掉帖子。
我有两个自定义字段,一个用户可以输入单独的日期和时间,另一个允许用户选择日期范围和时间范围。
我似乎无法使我的元查询起作用,因为当我在输入字段中添加日期范围时,地址栏将日期格式化为yyyy-mm-dd + - + yyyy-mm-dd 和我的自定义字段格式化日期
YYYY-MM-DD
yyyy-mm-dd - yyyy-mm-dd
当我删除地址栏中的“+”时,帖子似乎出现了,但它也没有正确过滤。它会显示帖子,无论它是否具有日期范围的确切格式,而不考虑实际日期范围,我无法显示单独的日期。
这是我的代码:
if (isset($_GET['lp_s_date']) && !empty($_GET['lp_s_date'])){
function me_search_query( $query ) {
if ( $query->is_search ) {
$meta_query = array(
'post_type' => 'post',
'exact' => true,
'sentence' => true,
'relation' => 'OR',
array(
'key' => 'prefix-mydates',
'value' => ( $_GET['lp_s_date'] ),
'compare' => 'LIKE',
),
array(
'key' => 'prefix-range',
'value' => ( $_GET['lp_s_date'] ),
'type' => 'date',
'compare' => 'BETWEEN',
),
);
$query->set('meta_query', $meta_query);
};
}
add_filter( 'pre_get_posts', 'me_search_query');
第二次尝试:
if (isset($_GET['lp_s_date']) && !empty($_GET['lp_s_date'])){
$start = ($_GET['start']);
$end = ($_GET['end']);
function me_search_query( $query ) {
if ( $query->is_search ) {
$meta_query = array(
'post_type' => 'post',
array(
'key' => 'prefix-range',
'value' => array($start, $end),
'compare' => 'BETWEEN',
'type' => 'DATE',
),
array(
array(
'key' => 'prefix-myDates',
'value' => $start,
'compare' => '>=',
),
array(
'key' => 'prefix-myDates',
'value' => $end,
'compare' => '<=',
),
),
);
$query->set('meta_query', $meta_query);
};
}
add_filter( 'pre_get_posts', 'me_search_query');
}
答案 0 :(得分:0)
来自WP Codex
value(string | array) - 自定义字段值。只有当比较是&#39; IN&#39;,&#39; NOT IN&#39;,&#39; BETWEEN&#39;或&#39; NOT BETWEEN&#39;时,它才可以是数组。
&#39;类型&#39; DATE适用于&#39;比较&#39;价值只有当 日期以YYYY-MM-DD格式存储,并以此格式进行测试。
所以,首先解决它