你说得对。这不是一个好的结构。
您正在页面上运行三个查询—您正在创建的两个查询加上被完全忽略的主查询(加上辅助查询)覆盖时,在页面加载的中途也会对主查询进行重击$wp_query
, 这可能会导致意外和不可预测的结果以及分页困难您正在覆盖其他核心变量,如$posts
你有PHP标签垃圾邮件,虽然我看到了很多错误,但你的代码格式通常是缺乏的您要做的是更改主查询以排除该帖子格式:
function exclude_asides_wpse_194888($qry) {
if (is_tag()) {
$taxq = array(
array(
\'taxonomy\' => \'post_format\',
\'field\' => \'slug\',
\'terms\' => array(
\'post-format-aside\'
),
\'operator\' => \'!=\'
)
)
$qry->set(\'tax_query\',$taxq);
}
}
add_action(\'pre_get_posts\',\'exclude_asides_wpse_194888\');
然后运行“asides”查询:
$asides = new WP_Query(
array(
\'posts_per_page\' => 4,
\'post_type\' => \'post\',
\'tax_query\' => array(
array(
\'taxonomy\' => \'post_format\',
\'field\' => \'slug\',
\'terms\' => array(
\'post-format-aside\'
),
)
)
)
);
if ( $asides->have_posts() ) {
while ( $asides->have_posts() ) {
$asides->the_post(); ?>
<div class="col-sm-3 col-xs-6">
<?php get_template_part( \'content\', get_post_format() ); ?>
</div><?php
}
}
然后让主查询恢复正常:
if ( have_posts() ) {
while ( have_posts() ) {
$query->the_post();
if($i%4==0) { ?>
<div class="row"><?php
} ?>
<div class="col-sm-3 col-xs-6"><?php
get_template_part( \'content\', get_post_format() ); ?>
</div><?php
$i++;
if($i%4==0) { // if counter is multiple of 3, put an closing div ?>
</div><?php
}
}
if($i%4!=0) { // put closing div here if loop is not exactly a multiple of 3 ?>
</div><?php
} ?>
<div class="blog">
<div class="row">
<div class="col-md-12"><?php
posts_nav_link(); ?>
</div>
</div>
</div>
}