Intereting Posts
Как включить пользователя для выбора пароля для регистрации? Перечислите все категории, но исключайте текущую категорию сообщений на одной странице Фантастические плюсы и минусы Добавление окна вспомогательного редактора на страницу «Отправить» автоматическое добавление элементов подменю Я нашел это в плагине. Что оно делает? Это опасно? Сортировка настраиваемых мета-значений не сохраняет флажки правильно Создайте список партнеров с Link, Logo и текстом Можно ли добавить пользовательскую бизнес-логику на страницу редактирования пользовательского почтового администратора? Пользовательские меню: проблема динамической подсветки с пользовательской домашней ссылкой Локальная установка WordPress не обрезает изображения Многоуровневая таксономия иерархии Удаление перенаправления после смены страницы Планировщик бронирования отелей вы бы порекомендовали Пользовательский список SportsPress

2 цикла, только отображение 1 цикла в обоих циклах

У меня есть 2 петли, трейлеры фильмов и игровые трейлеры, но игровые трейлеры отображаются как в трейлерах к фильмам, так и в игровом трейлере. Каждый цикл отображает сообщение, помеченное либо Movie Trailer либо Gaming Trailer .

Как мне получить сообщения с тегом «Кино трейлеры» в разделе фильмов и сообщения с тегами «Игровые трейлеры» в игровой зоне?

Вот петли:

 <div class="section-header clearfix"> <h2>Movie Trailers</h2> <div class="section-filter"> <ul> <li><a class="active" href="http://site.com/videos/">Recent</a></li> <li><a href="http://site.com/tag/movie-trailers/">More Movie Trailers</a></li> </ul> </div> </div> <?php if ( have_posts() ) : ?> <?php ?> <?php add_action( 'pre_get_posts', 'display_movie_trailers' ); ?> <?php while ( have_posts() ) : the_post(); ?> <?php get_template_part( 'content-videos', get_post_format() ); ?> <?php endwhile; ?> <?php else : ?> <?php get_template_part( 'no-results', 'index' ); ?> <?php endif; ?> <div class="section-header latest-gaming-trailers clearfix"> <h2>Gaming Trailers</h2> <div class="section-filter"> <ul> <li><a class="active" href="http://site.com/videos/">Recent</a></li> <li><a href="http://site.com/tag/gaming-trailers/">More Gaming Trailers</a></li> </ul> </div> </div> <?php if ( have_posts() ) : ?> <?php ?> <?php add_action( 'pre_get_posts', 'display_gaming_trailers' ); ?> <?php while ( have_posts() ) : the_post(); ?> <?php get_template_part( 'content-videos', get_post_format() ); ?> <?php endwhile; ?> <?php else : ?> <?php get_template_part( 'no-results', 'index' ); ?> <?php endif; ?> 

functions.php

 //Display Movie Trailers function display_movie_trailers( $query ) { if ( $query->is_category() && $query->query_vars['category_name'] == 'videos') { $query->set( 'tag', 'movie-trailers' ); } } add_action( 'pre_get_posts', 'display_movie_trailers' ); //Display Gaming Trailers function display_gaming_trailers( $query ) { if ( $query->is_category() && $query->query_vars['category_name'] == 'videos') { $query->set( 'tag', 'gaming-trailers' ); } } add_action( 'pre_get_posts', 'display_gaming_trailers' ); 

Solutions Collecting From Web of "2 цикла, только отображение 1 цикла в обоих циклах"

Вы не можете добавить действие pre_get_posts прямо перед циклом. Вы должны сделать это в functions.php. Он должен быть установлен до того, как сайт фактически запросит db, чтобы настроить цикл, который происходит до загрузки файла шаблона.

То, что вы делаете, повторяется через один и тот же запрос дважды, потому что pre_get_posts не может изменить запрос после этого. В этом случае самый простой способ изменить это – query_posts для создания целого нового запроса. Или вручную создайте запрос с помощью WP_Query.

Идеальная ситуация может заключаться в использовании pre_get_posts для одного цикла и нового запроса для другого, но простое решение выглядит примерно так:

 <div class="section-header clearfix"> <h2>Movie Trailers</h2> <div class="section-filter"> <ul> <li><a class="active" href="http://site.com/videos/">Recent</a></li> <li><a href="http://site.com/tag/movie-trailers/">More Movie Trailers</a></li> </ul> </div> </div> <?php $movie_trailers = new WP_Query( array( 'category_name' => 'videos', 'tag' => 'movie-trailers' ) ); if ( $movie_trailers->have_posts() ) : ?> <?php while ( $movie_trailers->have_posts() ) : $movie_trailers->the_post(); ?> <?php get_template_part( 'content-videos', get_post_format() ); ?> <?php endwhile; ?> <?php else : ?> <?php get_template_part( 'no-results', 'index' ); ?> <?php endif; ?> <div class="section-header latest-gaming-trailers clearfix"> <h2>Gaming Trailers</h2> <div class="section-filter"> <ul> <li><a class="active" href="http://site.com/videos/">Recent</a></li> <li><a href="http://site.com/tag/gaming-trailers/">More Gaming Trailers</a></li> </ul> </div> </div> <?php $gaming_trailers = new WP_Query( array( 'category_name' => 'videos', 'tag' => 'gaming-trailers' ) ); if ( $gaming_trailers->have_posts() ) : ?> <?php if ( have_posts() ) : ?> <?php while ( $gaming_trailers->have_posts() ) : $gaming_trailers->the_post(); ?> <?php get_template_part( 'content-videos', get_post_format() ); ?> <?php endwhile; ?> 

Я думаю, вы неправильно поняли использование pre_get_posts() . Обычно вы используете это в своих функциях.php, что вы, вроде, но вы также имеете его в своем шаблоне, что неверно. Кроме того, версии в ваших функциях.php проверяют одну и ту же категорию (видео).

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