Intereting Posts
Автоматическое добавление настраиваемого поля в пользовательские типы страниц Как изменить редактор TinyMCE VisualComposer только для определенного короткого кода Создание многоязычного многоузлового Контролируйте, какие пользовательские сообщения пользователь может видеть Оберните X количество столбцов таксономии в отдельной строке в WordPress Проблема пользователей (мульти-автор плюс многопользовательская) Крюк при добавлении или редактировании определенного пользовательского типа сообщений? Дайте определенную постоянную ссылку на основе таксономии только на какую-то должность Как я могу просмотреть список всех страниц, которые создал сайт WordPress? Субдомены с почти одинаковым контентом Переменные класса в коротких кодах Фильтр wp_get_attachment_link не работает Как добавить настраиваемое поле к существующему типу сообщений? Сделано поле поиска с полем, скрытым до выпадающего выделения. Установка wordpress с использованием композитора на определенном языке

Игнорировать последние два сообщения

Я пытаюсь исключить последние две записи в блоге со страницы. Я знаю, что это можно сделать со offset но это приводит к ошибке, при которой некоторые из сообщений в блоге повторяются на второй странице, поэтому они не идеальны. В настоящее время я делаю это вручную, используя идентификатор сообщения так:

 $paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : '1'; $args = array( 'posts_per_page' => 5, 'post__not_in' => array(827, 809), 'post_status' =>"publish", 'post_type' =>"post", 'orderby' =>"post_date", 'cat' =>'-1, -8, -9, -7, -6, -5, -4', 'paged' => $paged ); $postslist = get_posts( $args ); echo '<div class="latest_new_posts main-news">'; 

Может ли кто-нибудь подумать о том, как лучше это сделать, когда мне не нужно постоянно настраивать идентификатор сообщения?

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

Получите две последние сообщения

 <?php $most_recent_args = array( 'posts_per_page' => 2, 'paged' => 1, 'fields' => 'ids', 'orderby' => 'post_modified', 'order' => 'DESC', ); $most_recent = new WP_Query( $most_recent_args ); 

Затем вы можете использовать результаты там, чтобы …

Измените свой запрос двумя последними сообщениями

 $paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : '1'; $args = array( 'posts_per_page' => 5, 'post__not_in' => $most_recent->posts, 'post_status' =>"publish", 'post_type' =>"post", 'orderby' =>"post_date", 'cat' =>'-1, -8, -9, -7, -6, -5, -4', 'paged' => $paged ); $postslist = get_posts( $args ); echo '<div class="latest_new_posts main-news">'; 

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

 $args = array( 'posts_per_page' => 5, 'offset' => 2, 'post__not_in' => array(827, 809), 'post_status'=>"publish", 'post_type'=>"post", 'orderby'=>"post_date", 'cat'=>'-1, -8, -9, -7, -6, -5, -4', 'paged'=> $paged ); 

Однако, как вы упомянули, это сломает разбивку на страницы. Существует обходное решение, как указано в кодексе , и оно предлагает решение для этого.

Использование pre_get_posts

Вы можете исключить 2 последних сообщения из основного запроса, используя фильтр pre_get_posts :

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

Вы можете проверить страницу codex для альтернативы, которую я пропустил, так как она длинная, и хорошо объяснил сам код.