我有两个循环,电影预告片和游戏预告片,但游戏预告片显示在电影预告片和游戏预告片下面。每个循环都会显示标记为Movie Trailer
或Gaming Trailer
.
我如何在电影区域下获得贴有“电影预告片”的帖子,以及在游戏区域下获得贴有“游戏预告片”的帖子?
Heres the loops:
<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\' );
最合适的回答,由SO网友:Jake 整理而成
不能在循环之前添加pre\\u get\\u posts操作。你必须在函数中完成。php。必须在站点实际查询db以设置循环之前进行设置,循环发生在加载模板文件之前。
您所做的是在完全相同的查询中循环两次,因为pre\\u get\\u posts在发生后无法更改查询。在这种情况下,更改它的最简单方法是query\\u posts来设置一个全新的查询。或者使用WP\\u query手动构建查询。
理想的情况可能是对一个循环使用pre\\u get\\u 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; ?>