我正在使用每3个帖子包含行的自定义查询。在分页类别中,即使类别为空,它也总是返回12个帖子。我有什么问题吗?
<?php
$paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1;
$args = array(
'posts_per_page' => 12,
'paged' => $paged
);
$the_query = new WP_Query($args);
if ($the_query->have_posts()) :
$counter = 0;
while ($the_query->have_posts()) : $the_query->the_post();
if ($counter % 3 == 0) :
echo $counter > 0 ? "<div class='clear'></div></div>" : ""; // close div if it's not the first
echo "<div class='row'>";
endif;
?>
<?php get_template_part( 'templates/3columnpost', get_post_format() ); ?>
<?php
$counter++;
endwhile;
endif;
wp_reset_postdata();
?>
答案 0 :(得分:1)
您正在通过调用WP_Query
来重置Wordpress循环,因此它会收到所有帖子。
有多种方法可以设置每页的帖子数量。我建议你尽可能做#1,但如果没有,那么2是下一个最好的选择。
<强> 1。在Wordpress Admin中设置每页的帖子
默认的Wordpress循环显示Admin Settings
- >中设置的帖子数量。在&#34; 博客页面最多显示&#34;下的Reading
页面。您可以将其更改为12。
如果您使用此功能,您还需要更改代码以完全删除WP_Query并使用默认循环,以便再次显示类别帖子,例如
// Check if there are any posts to display
if ( have_posts() ) :
// do whatever you need to do before you start displaying the posts
// The Loop:
while ( have_posts() ) : the_post();
// display the post here
endwhile;
endif;
请注意,这会更改所有帖子类型的帖子数量
<强> 2。更改functions.php中每页的帖子数量
如果您只想更改特定帖子类型的每页帖子数,可以在functions.php中进行,例如
function set_custom_posts_per_page( $query ) {
if ( is_admin() || ! $query->is_main_query() )
return;
if ( is_post_type_archive( 'movie' ) ) {
// Display 12 posts for a custom post type called 'movie'
$query->set( 'posts_per_page', 12 );
return;
}
}
add_action( 'pre_get_posts', 'set_custom_posts_per_page', 1 );
参考Wordpress Codex pre_get_posts
第3。使用WP_Query - 注意,这会重置循环
WP_Query完全重置循环,所以如果有使用它,那么您需要在$args
中传递类别ID,以便Wordpress仅返回该类别中的帖子。
// get the category id in the query before we reset it using WP_Query
$categoryid = $wp_query->get_queried_object_id();
$paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1;
$args = array(
'category' => $categoryid
'posts_per_page' => 12,
'paged' => $paged
);
$the_query = new WP_Query($args);
if ($the_query->have_posts()) :
// whatever you need to do before you start displaying the posts
while ($the_query->have_posts()) : $the_query->the_post();
// display your posts
endwhile;
endif;
wp_reset_postdata();