Как отфильтровать посты по дате с помощью выбора диапазона дат в Wordpress? - PullRequest
0 голосов
/ 09 мая 2018

У меня есть поле ввода, в котором используется указатель диапазона дат. Это поле ввода является частью поискового запроса, который должен отфильтровывать сообщения по диапазону дат, времени и отдельным датам.

У меня есть два настраиваемых поля: одно, в которое пользователи могут вводить отдельные даты и время, и одно, которое позволяет пользователям выбирать диапазон дат и временной интервал.

Я не могу заставить свой мета-запрос работать, потому что, когда я добавляю диапазон дат в поле ввода, адресная строка форматирует дату как гггг-мм-дд + - + гггг-мм-дд и мои настраиваемые поля форматируют дату, чтобы быть

гггг-мм-дд

гггг-мм-дд - гггг-мм-дд

Когда я удаляю «+» в адресной строке, сообщения появляются, но они также не фильтруются должным образом. Он будет отображать сообщение независимо от того, имеет ли он точный формат в качестве диапазона дат, без учета фактического диапазона дат, и я не могу заставить его отображать отдельные даты.

Вот мой код:

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 голосов
/ 09 мая 2018

Из WP Codex

значение (строка | массив) - значение настраиваемого поля. Это может быть массив только в том случае, если для сравнения установлено значение «IN», «NOT IN», «BETWEEN» или «NOT BETWEEN».

ДАТА «type» работает со значением «сравнение» МЕЖДУ, только если дата сохраняется в формате ГГГГ-ММ-ДД и проверяется в этом формате.

Итак, прежде всего исправим

...