У меня есть 2 поля ACF 'start_time' и 'webinar_date', и мне нужно получить все сообщения в основном запросе WordPress, используя pre_get_posts
, которые имеют дату и время до текущего времени.Поэтому прошлые сообщения из этих двух полей acf.
Мой текущий код выглядит следующим образом:
add_action('pre_get_posts', 'my_pre_get_posts', 10, 1);
function my_pre_get_posts($query)
{
if (is_admin())
return $query;
if ($query->is_search() && $query->is_main_query())
{
$current_time = time();
$query->set('meta_query', array(
'relation' => 'OR',
array(
'key' => 'webinar_date',
'compare' => 'NOT EXISTS'
),
array(
'relation' => 'AND',
array(
'key' => 'webinar_date',
'value' => date('Ymd', $current_time),
'compare' => '<'
),
array(
'key' => 'start_time',
'value' => date('His', $current_time),
'compare' => '<'
)
)
));
$query->set('orderby', array(
'meta_value_num' => 'DESC',
'date' => 'DESC'
));
}
return $query;
}
Это не очень хорошо работает, потому что они представляют собой 2 отдельных мета-ключа.Как объединить их как 1 и проверить вместо date('YmdHis', time())
?Или что-то подобное, чтобы я мог пройти мимо сообщений по дате и времени?Любой возможный способ сделать это, используя pre_get_posts
?Мне нужно, чтобы эти 2 поля были разделены так, как они есть в настоящее время по другим причинам.
РЕДАКТИРОВАТЬ
Другой способ, которым я пробовал это, заключается в следующем:
add_action('pre_get_posts', 'my_pre_get_posts', 10, 1);
function my_pre_get_posts($query)
{
if (is_admin())
return $query;
if ($query->is_search() && $query->is_main_query())
{
$query->set('meta_query', array(
'relation' => 'OR',
array(
'key' => 'webinar_date',
'compare' => 'NOT EXISTS'
),
array(
'relation' => 'OR',
array(
'key' => 'webinar_date',
'value' => date('Ymd', $current_time),
'compare' => '<'
),
array(
'relation' => 'AND',
array(
'key' => 'webinar_date',
'value' => date('Ymd', $current_time),
'compare' => '='
),
array(
'relation' => 'OR',
array(
'key' => 'start_time',
'compare' => 'NOT EXISTS'
),
array(
'key' => 'start_time',
'value' => date('H:i:s', $current_time),
'compare' => '<=',
'type' => 'TIME'
)
)
)
)
));
}
return $query;
}
Не уверен, сколько уровней вложенности разрешено в wp_meta_query, но, похоже, это слишком долго загружается ... есть ли шанс ускорить это?