Поддержка Проблемы и решения исключить записи в архиве

  • Добрый день!
    есть произвольные типы записей book.
    у некоторых есть поле ACF strana со значением Germany.
    подскажите как эти записи исключить из вывода в архиве? проверять каждый запрос на наличие этого поля или есть что-то универсальное?

Просмотр 5 ответов — с 1 по 5 (всего 5)
  • Модератор Yuri

    (@yube)

    Универсальное — фильтр на хуке pre_get_posts. Подробности ищите в документации https://developer.wordpress.org/reference/hooks/pre_get_posts/ На форуме тоже есть примеры использования.

    спасибо!
    вот создал функцию

    
    function book_queries($query){
        if ( ! is_admin() && is_post_type_archive( 'book' ) && $query->is_tax() && $query->is_main_query() ) {
             $query->set( 'meta_query', array(
                 array(
                     'key'     => 'strana',
                     'compare' => '!=',
                     'value'   => 'Germany',
                 )
             ) );
        }
     }
     add_action( 'pre_get_posts', 'book_queries' );

    срабатывает только на странице архива, на странице таксономии не хочет.. что тут не так?

    • Ответ изменён 2 года, 2 месяца назад пользователем face2005.
    • Ответ изменён 2 года, 2 месяца назад пользователем face2005.
    Модератор Yuri

    (@yube)

    срабатывает только на странице архива,

    Видимо потому, что явно указано условие is_post_type_archive()
    Determines whether the query is for an existing post type archive page.

    на странице таксономии не хочет.

    Что Вы называете страницей таксономии? Покажите пример.

    вот на реальном проекте

    function prodano_queries($query){
        if ( ! is_admin() && is_post_type_archive( 'catalog' ) && $query->is_tax() && $query->is_main_query() ) {
             $query->set( 'meta_query', array(
                 array(
                     'key'     => 'prodano',
                     'compare' => '!=',
                     'value'   => 'Продано',
                 )
             ) );
        }
     }
     add_action( 'pre_get_posts', 'prodano_queries' );

    https://crystalestate.com.ua/property-cat/apartment/

    в таксономии Категории Недвижимости (property-cat) не срабатывает, может условие не такое? $query->is_tax() должно же во всех таксономиях срабатывать, или не правильно? нужно массивом передать все термы таксономии?

    • Ответ изменён 2 года, 2 месяца назад пользователем face2005.
    • Ответ изменён 2 года, 2 месяца назад пользователем face2005.
    Модератор Yuri

    (@yube)

    Боюсь, Вы малость путаете таксономии и термы.
    /property-cat/apartment/ — страница терма
    property-cat — таксономия
    apartment — терм
    для таксономии нет дефолтной страницы

    Попробуйте уменьшить количество условий, например, так:

    if ( ! is_admin() && $query->is_tax('property-cat') && $query->is_main_query() ) 
    
Просмотр 5 ответов — с 1 по 5 (всего 5)
  • Тема «исключить записи в архиве» закрыта для новых ответов.