Исключить пользовательский тип записи из поиска по значению произвольного поля?

13 февр. 2013 г., 21:18:22
Просмотры: 2.03K
Голосов: 0

Мне не удалось найти информацию о том, как это сделать или возможно ли это вообще.

Я хочу, чтобы в результатах поиска не отображались записи пользовательского типа "resources", у которых значение поля "resource_usertype" (ключ) не равно "Public", "Students" или "Alumni" (значения).

Или, возможно, лучше сказать, что я хочу отображать только те результаты поиска, где значения поля "resource_usertype" равны "Public", "Students" или "Alumni".

0
Все ответы на вопрос 2
1

Вам необходимо реализовать хук для фильтра pre_get_posts, в котором можно задать нужные параметры. Обратите внимание, что изменять нужно только поисковый запрос, поэтому следует проверять, возвращает ли метод is_search() значение true. Хук должен выглядеть следующим образом:

add_filter( 'pre_get_posts', 'wpse8170_pre_get_posts' );
function wpse8170_pre_get_posts( WP_Query $query ) {
    if ( $query->is_search() ) {
        $query->set( 'post_type', array( 'resources' ) );
        $query->set( 'meta_query', array(
            array(
                'key' => 'resource_usertype',
                'value' => array('Public', 'Students', 'Alumni'),
                'compare' => 'IN',
            )
        ) );
    }

    return $query;
}
13 февр. 2013 г. 22:02:13
Комментарии

Евгений - похоже, что это должно работать, но на самом деле исключает все результаты для всех типов записей и страниц.

Ray Gulick Ray Gulick
13 февр. 2013 г. 22:25:45
1

Это вполне возможно!

$args = array(
   'post_type' => 'resources',
   'meta_query' => array(
       array(
           'key' => 'resource_usertype', // Ключ произвольного поля
           'value' => array('Public', 'Students', 'Alumni'), // Значения: Публика, Студенты, Выпускники
           'compare' => 'IN', // Оператор сравнения (вхождение в массив)
       )
   )
 );
 $query = new WP_Query($args); // Создаем новый запрос WP_Query
13 февр. 2013 г. 21:57:20
Комментарии

Это запрос для списков, верно? В частности, пытается исключить из результатов поиска.

Ray Gulick Ray Gulick
13 февр. 2013 г. 22:22:11