Например, так:
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' );
Но наверное это потому что страница записей на сайте не главная, а произвольная.
Если страница выбрана в настройках чтения, то условие is_home()
должно работать и там.
Если главная реализована каким-то другим способом и на самом деле это рубрика — то да, логично заменить is_home()
на is_category()
с ID нужной рубрики 🙂
Автор
O
(@perdyllo)
Просто я нашёл другое решение для построения структуры сайта и в моем случае оказалось проще и эффективней в качестве станицы записей «подставить», страницу рубрики. Ибо на сайте всего две рубрики. Одну из них показывать вообще ни к чему. Это мне пришло голову спонтанно. А предложенные оба сниппета оказались рабочими. Просто я их криво скопипастил… Когда проверил на другом сайте — они сработали.
Так что решение от Sergey Biryukov как всегда было верным.
-
Ответ изменён 5 лет, 8 месяцев назад пользователем O.