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

  • Решено O

    (@perdyllo)


    Простой казалось бы вопрос оказался не совсем простым в практическом решении. Как на странице записей исключить вывод последних, допустим 16-ти записей?

Просмотр 6 ответов — с 1 по 6 (всего 6)
  • Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    Например, так:

    
    function exclude_latest_posts( $query ) {
    	if ( $query->is_home() && $query->is_main_query() ) {
    		$query->set( 'offset', 16 );
    	}
    }
    add_action( 'pre_get_posts', 'exclude_latest_posts' );
    

    Но в этом случае в постраничной навигации могут отображаться лишние страницы.

    Ещё один вариант — получить ID последних записей и исключить их из запроса:

    
    function exclude_latest_posts( $query ) {
    	if ( $query->is_home() && $query->is_main_query() ) {
    		remove_action( 'pre_get_posts', __FUNCTION__ );
    
    		$latest_posts = get_posts( array( 'fields' => 'ids', 'posts_per_page' => 16 ) );
    
    		$query->set( 'post__not_in', $latest_posts );
    	}
    }
    add_action( 'pre_get_posts', 'exclude_latest_posts' );
    

    В этом случае с постраничной навигацией всё должно быть в порядке.

    Автор O

    (@perdyllo)

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

    Автор O

    (@perdyllo)

    Ну хорошо. Тогда попробуем зайти с другой стороны:
    Как исключить последние 16 записей на странице одной из категорий?

    • Ответ изменён 5 лет, 8 месяцев назад пользователем O.
    Автор O

    (@perdyllo)

    Спасибо. Вопрос решен другим путем.

    function exclude_latest_posts( $query ) {
    	if ( $query->is_category(431) && $query->is_main_query() ) {
    		$query->set( 'offset', 16 );
    	}
    }
    add_action( 'pre_get_posts', 'exclude_latest_posts' );
    Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    Но наверное это потому что страница записей на сайте не главная, а произвольная.

    Если страница выбрана в настройках чтения, то условие is_home() должно работать и там.

    Если главная реализована каким-то другим способом и на самом деле это рубрика — то да, логично заменить is_home() на is_category() с ID нужной рубрики 🙂

    Автор O

    (@perdyllo)

    Просто я нашёл другое решение для построения структуры сайта и в моем случае оказалось проще и эффективней в качестве станицы записей «подставить», страницу рубрики. Ибо на сайте всего две рубрики. Одну из них показывать вообще ни к чему. Это мне пришло голову спонтанно. А предложенные оба сниппета оказались рабочими. Просто я их криво скопипастил… Когда проверил на другом сайте — они сработали.

    Так что решение от Sergey Biryukov как всегда было верным.

    • Ответ изменён 5 лет, 8 месяцев назад пользователем O.
Просмотр 6 ответов — с 1 по 6 (всего 6)
  • Тема «Вывод записей за исключением нескольких последних» закрыта для новых ответов.