Intereting Posts
Использование 'child_of' в get_pages () и wp_list_pages () Как переопределить php-классы моего плагина с дубликатами, которые находятся в моей папке с дочерними темами Автоматически добавлять этот атрибут в короткий заголовок галереи Я хотел бы знать, если есть простые решения для интеграции других CMS в wordpress Как добавить страницу настроек в другое меню? Параметры плагинов не сохраняются в базе данных в WP 4.5 WordPress создает структуру URL-адресов с% категориями% /% тегов% Ajax с плагинами возвращает 0 Многостраничное доменное отображение WordPress с различными IP-адресами WordPress не обрабатывает подкаталог должным образом Можно ли переопределить константу ABSPATH Что такое «быстрый и грязный» способ переноса установки WordPress? Все URL-адреса имеют к ним добавленный «/ blog /». Форма контактного формуляра 7 работает над локальной установкой wordpress, но сбой на рабочем сервере Пользовательский тип сообщения – ошибки

как использовать 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 ); } } 

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

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

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