我有一个特定的category-slug.php页面。
我想显示第一个类别“banner-ads”,每页只有1个帖子,然后在其下方,从“特色”类别中显示每页3个帖子。
我不想使用: ** query_posts('posts_per_page = 4'); **
我已经尝试过pre_get_posts功能,但似乎无法使其正常工作。
现在每页显示的帖子数量是我在“设置”中指定的数量 - >阅读
这是我目前的代码:
$args1 = array(
'category_name' => 'banner-ads',
'posts_per_page' => 1
);
$the_query = new WP_Query( $args1 );
while ( $the_query->have_posts() ) :
$the_query->the_post();
ar2_render_posts( null, array ( 'type' => 'node' ), true );
endwhile;
wp_reset_postdata();
$args2 = array(
'category_name' => 'featured',
'posts_per_page' => 3
);
$query2 = new WP_Query( $args2 );
while( $query2->have_posts() ):
$query2->next_post();
ar2_render_posts( null, array ( 'type' => 'traditional' ), true );
endwhile;
wp_reset_postdata();
答案 0 :(得分:0)
您尚未重置:wp_reset_postdata();
对类别有用:http://codex.wordpress.org/Class_Reference/WP_Query#Category_Parameters
这是我的一个页面 第一循环:
<?php
$postq1 = new WP_Query(
array(
'post_type' => array('post','yourcustom'),
'posts_per_page' => 1,
'category_name'=>'banner-ads')
);
if($postq1->have_posts()):
while ( $postq1->have_posts() ) :
$postq1->the_post();?>
<article id="post-<?php the_ID();?>">....</article>
<?php
endwhile;
endif;
wp_reset_postdata();
?>
第二次循环:
<?php
$postq2 = new WP_Query(
array(
'post_type' => array('post','yourcustom'),
'posts_per_page' => 3,
'category_name'=>'featured')
);
if($postq2->have_posts()):
while ( $postq2->have_posts() ) :
$postq2->the_post();?>
<article id="post-<?php the_ID();?>">....</article>
<?php
endwhile;
endif;
wp_reset_postdata();
?>
...其余代码query_posts()
;
答案 1 :(得分:0)
好的,所以我终于明白了。如果你想强制它采取一定数量的帖子,然后添加过滤器及其功能,然后在循环结束时删除它。我在第二个循环中意识到ar2_render_posts()函数与代码冲突,所以我选择从头开始重做该函数,因为它基本上是一个布局函数。
add_filter('post_limits', 'my_post_limits');
function my_post_limits( $limit ) {
if ( in_category('banner-ads') ) {
return 'LIMIT 0, 3';
}
return $limit;
}
$args1 = array(
'category_name' => 'banner-ads'
);
$the_query = new WP_Query( $args1 );
while ( $the_query->have_posts() ) :
$the_query->the_post();
ar2_render_posts( null, array ( 'type' => 'node' ), true );
endwhile;
wp_reset_postdata();
remove_filter('post_limits', 'my_post_limits');
答案 2 :(得分:0)
非常简单,仅alter query_args
ar2_render_posts
ar2_render_posts( null, array (
'query_args' => array ( 'posts_per_page' => 1 ),
), true );