Как установить 2 значения как 1 в метаданных Wordpress - PullRequest
0 голосов
/ 21 мая 2019

У меня есть 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, но, похоже, это слишком долго загружается ... есть ли шанс ускорить это?

...