首页 > 解决方案 > 如何使用 Wordpress 中的日期范围选择器按日期过滤帖子?

问题描述

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

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

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

}

标签: wordpressdatesearchfilteringdaterangepicker

解决方案


来自 WP Codex

value (string|array) - 自定义字段值。只有当 compare 是 'IN'、'NOT IN'、'BETWEEN' 或 'NOT BETWEEN' 时,它才可以是一个数组。

仅当日期以 YYYY-MM-DD 格式存储并使用此格式测试时,“类型”DATE 才与“比较”值 BETWEEN 一起使用。

所以,首先修复它


推荐阅读