如何使用Wordpress中的日期范围选择器按日期过滤帖子?

时间:2018-05-08 22:57:06

标签: wordpress date search filtering daterangepicker

我有一个使用日期范围选择器的输入字段。此输入字段是搜索查询的一部分,该查询应按日期范围,时间和个别日期过滤掉帖子。

我有两个自定义字段,一个用户可以输入单独的日期和时间,另一个允许用户选择日期范围和时间范围。

我似乎无法使我的元查询起作用,因为当我在输入字段中添加日期范围时,地址栏将日期格式化为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');

}

1 个答案:

答案 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格式存储,并以此格式进行测试。

所以,首先解决它