Intereting Posts
Почему эти настройки не зарегистрированы? Woocommerce Custom Rewrite Rules Array – Подкатегории Проверьте, отображается ли боковая панель? Отладка отсутствующих элементов в таксономии Как назначить «таксономию за таксономию»? Как сортировать термины с диакритическими знаками? У вас возникли проблемы с установкой темы child Поддерживает ли WordPress какие-либо файлы вне основной папки (и базы данных)? Есть ли пользовательский интерфейс для редактирования постоянной ссылки вложений? Автоматическое резервное копирование перед автоматическим обновлением WordPress Как получить сериализованные данные из параметров wordpress как использовать ajax в области администрирования плагина? При отправке информационного бюллетеня – не с wordpress – сервер имеет 100% -ный процессор : Как создать перевод сообщения с использованием WPML API? Несколько типов записей в архивах (фильтр?)

pre_get_posts с get_posts

Поэтому в шаблоне у меня есть несколько признанных сообщений и ползунков и 2 цикла по умолчанию.

Я использую get_posts для всех, кроме циклов по умолчанию (очевидно).

Теперь проблема, с которой я get_posts сообщения get_posts из основных циклов. Я мог бы пойти query_posts , но влияние на производительность плохое, и я хочу работать над основным циклом еще до его сгенерирования.

Поэтому я буду использовать pre_get_posts в functions.php.

Внутри pre_get_posts я собираюсь изменить основной цикл и исключить данные get_posts.

У меня следующие проблемы:

  1. Мне нужно использовать get_posts внутри шаблона, поэтому мне нужно объявить переменную, удерживая ее как глобальную: (иначе она не будет доступна внутри моего шаблона.

  2. get_posts внутри pre_get_posts дает мне проблемы с памятью: Неустранимая ошибка: допустимый размер памяти 134217728 байт исчерпан (пытался выделить 130968 байт

 function RoomsGazette_homepage_content( $query ) { //$tweets = getTweets( 4, $titan->getOption( 'tweets_from_user' ) ); $header_sliders = get_posts( array( 'meta_key' => 'roomsgazette_hp_position', 'meta_value' => 1, 'posts_per_page' => 5, ) ); //$footer_sliders = get_posts( array( 'meta_key' => 'roomsgazette_hp_position', 'meta_value' => 2, 'posts_per_page' => 5, ) ); //$featured = get_posts( array( 'meta_key' => 'roomsgazette_hp_position', 'meta_value' => 3, 'posts_per_page' => 2, ) ); $exclude_ids = array(); foreach ( $header_sliders as $tmp ) { array_push( $exclude_ids, $tmp->ID ); } foreach ( $footer_sliders as $tmp ) { array_push( $exclude_ids, $tmp->ID ); } foreach ( $featured as $tmp ) { array_push( $exclude_ids, $tmp->ID ); } if ( $query->is_home() && $query->is_main_query() ) { $query->set( 'post__not_in', $exclude_ids ); } } add_action( 'pre_get_posts', 'RoomsGazette_homepage_content' ); 

Solutions Collecting From Web of "pre_get_posts с get_posts"

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

 // avoid infinite loop remove_action( 'pre_get_posts', __FUNCTION__ ); 

Это гарантирует, что вы не подключаете его к pre_get_posts снова и снова, снова и снова get_posts() вызов get_posts() .

Во-вторых, используйте параметры WP_Query – и впоследствии get_posts – параметры fields , выбирая ids как значение, что уменьшает get_posts / рабочей нагрузки, получая только идентификаторы.