Intereting Posts
Плагин Custom Action Hook не работает Безопасно ли использовать редактор файлов для настройки? Использование стандартной функции поиска с пользовательским типом сообщения Изменение пути видимого URL-адреса к файлам css и js 'category__and' для пользовательской таксономии? Как использовать условный оператор с настраиваемым полем Дайте администратору сайта возможность «пропустить подтверждение по электронной почте» при добавлении нового пользователя В меню выбора должны отображаться категории и глубина элемента WP Cron и wp_insert_post Предупреждение: urlencode () ожидает, что параметр 1 будет строкой, заданный массив Простая проверка формы для пользовательского типа сообщения в интерфейсе. Не работает Лучшая практика для нескольких запросов на странице Обновить мета-автора пользователя при просмотре содержимого Советы и плагины против вредоносных программ Сортировка таблицы списков типов сообщений по отображаемому имени идентификатора пользователя, хранящегося в качестве значения посылки

как использовать pre_gets_posts, чтобы исключить один запрошенный идентификатор из домашней петли

Я хочу исключить последнее сообщение категории «prima pagina» из цикла моей домашней страницы, потому что у меня есть выделенный ящик для него, и я не хочу дубликатов на странице. Я использую дочернюю тему, но я не хочу переопределять index.php, поэтому я добавил этот код в мои функции. Php

function cdbz_modify_main_query( $query ) { global $post; $exclude = []; $fArgs = array( 'category_name' => 'prima-pagina', 'posts_per_page' => 1, 'ignore_sticky_posts' => 1, 'fields' => 'ids' ); $featured = new WP_Query($fArgs); foreach($featured as $fId) { $exclude[] = $fId->ID;}; wp_reset_query(); if ( !is_admin() && $query->is_home() && $query->is_main_query() ) { $query->set('post__not_in', $exclude); } } add_action( 'pre_get_posts', 'cdbz_modify_main_query' ); 

Это ломает сайт. Есть проблемы с частью WP_query, но я не понимаю, почему. Если я поместил один и тот же запрос на другую страницу шаблона, он отлично работает (он возвращает один id). Любая помощь будет очень оценена. Благодарю.

Solutions Collecting From Web of "как использовать pre_gets_posts, чтобы исключить один запрошенный идентификатор из домашней петли"

Пара проблем здесь

  • Пользовательский запрос должен находиться внутри вашего условного оператора

  • Используйте get_posts который возвращает свойство $posts

  • wp_reset_query() используется с query_posts который вы никогда не должны использовать

  • Нет необходимости в $post global

Ваш код должен выглядеть примерно так:

 add_action( 'pre_get_posts', 'cdbz_modify_main_query' ); function cdbz_modify_main_query( $query ) { if ( !is_admin() && $query->is_home() && $query->is_main_query() ) { $fArgs = array( 'category_name' => 'prima-pagina', 'posts_per_page' => 1, 'ignore_sticky_posts' => 1, 'fields' => 'ids' ); $featured = get_posts( $fArgs ); if ( $featured ) $query->set( 'post__not_in', $featured ); } } 

РЕДАКТИРОВАТЬ

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

Надеюсь это имеет смысл