Wordpress: фильтр get_posts - PullRequest
       8

Wordpress: фильтр get_posts

0 голосов
/ 17 октября 2018

Я пытаюсь создать несколько фильтров в своих сообщениях с настраиваемыми полями.Так что в моем searchpage.php я добавил следующее:

$args = array(
    'post_type'  => 'cp_course', 'numberposts' =>-1,'orderby' => 'ID', 'order' => 'ASC', 's' => $searchterm,
    'meta_query' => array(
        'relation' => 'AND',
        array(
            'key'   => 'course_code',
            'value' => $code,
        ),
        array(
            'key' => 'course_duration',
            'value' => $duration,
        )
    )
);

$course = get_posts($args);

Но это не сработает, если я поставлю только $code или только $duration, я должен поставить их обоих из-за AND отношение.Есть ли более простой способ, чем несколько IFs, чтобы проверить, если, например, $code не предоставлено, тогда фильтровать сообщения только по $duration

РЕДАКТИРОВАТЬ

Используя решение ash0ur Я использовал этот код:

$args = array(
    'post_type'  => 'cp_course', 'numberposts' =>-1,'orderby' => 'ID', 'order' => 'ASC', 's' => $searchterm,
    'meta_query' => array(
        'relation' => 'OR',
        array(
            'relation' => 'AND',
            array(
                'key'   => 'course_code',
                'value' => $code,
            ),
            array(
                'key' => 'course_duration',
                'value' => $duration,
            ),          
        ),
        array(
        'key'   => 'course_duration',
        'value' => $duration,
        ),
        array(
        'key'   => 'course_code',
        'value' => $code,
        )
    )
);

Но если я хочу расширить его, чтобы добавить дополнительные условия поиска, я получаю множество INNER JOIN запросов в базе данных, что вызывает проблемы длясервер.Вот что я пробовал, что вызывает проблемы:

$args = array(
    'post_type'  => 'cp_course', 'numberposts' =>-1,'orderby' => 'ID', 'order' => 'ASC', 's' => $searchterm,
    'meta_query' => array(
        'relation' => 'OR',
        array(
            'relation' => 'AND',
            array(
                'key'   => 'course_code',
                'value' => $code,
            ),
            array(
                'key' => 'course_duration',
                'value' => $duration,
            ),  
            array(
                'key'   => 'course_iteration_start',
                'value' => $date_from,
            ),
            array(
                'key' => 'course_iteration_end',
                'value' => $date_to,
            ),  
        ),
        array(
        'key'   => 'course_duration',
        'value' => $duration,
        ),
        array(
        'key'   => 'course_code',
        'value' => $code,
        )
    )
);

Где course_iteration_start и course_iteration_end равны sub fields (повторители) course_iteration custom field.

1 Ответ

0 голосов
/ 17 октября 2018

Вы можете использовать вложенное отношение:

'meta_query' => array(
    'relation' => 'OR',
    array(
        'relation' => 'AND',
        array(
            'key'   => 'course_code',
            'value' => $code,
        ),
        array(
            'key' => 'course_duration',
            'value' => $duration,
        )
    ), 
    array(
        'key'   => 'course_duration',
        'value' => $duration,
    )
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...