我有自定义帖子类型,并希望更改每页的帖子数量。我使用以下代码来显示/限制帖子:
$args = array(
'post_type' => 'movie',
'posts_per_page' => 3,
'tax_query' => array(
array(
'taxonomy' => $wp_query->queried_object->taxonomy,
'field' => 'slug',
'terms' => $wp_query->queried_object->slug,
)
),
'paged' => get_query_var('paged') ? get_query_var('paged') : 1
);
query_posts( $args );
这次我有20个帖子,这个帖子类型和wordpress管理员每页的默认帖子(设置/阅读...)设置为10.
如果我在没有页面的情况下调用网址,则显示3个帖子,如果我使用“page / 2 /”调用网址,则显示3个帖子,但如果我使用“page / 3 /”调用该页面,则显示没有找到任何内容。 ..
我不会更改管理员帖子的默认值 - 有人有想法吗?
注意:要“调试”我让我显示“$ wp_query-> post_count;”的值 - 这使用每页的默认管理员帖子 - 10 ...
对待凯
答案 0 :(得分:4)
加载页面时,它将在调用模板文件(archive.php)之前进行查询。
第一个查询将使用WordPress中设置的默认值;即。每页10个帖子。根据事情的声音,你在archive.php中运行第二个'query_posts'调用,但听起来就像是在你运行了相应的检查之后。
两种可能的解决方案:
使用posts_per_page修改第一个查询
add_filter( 'pre_get_posts', 'modify_movie_query' );
function modify_movie_query( $wp_query ) {
if( $wp_query->query_vars['post_type'] != 'movie' ) return;
$wp_query->query_vars['posts_per_page'] = 3;
}
因为你修改了对$ wp_query的引用,所以你不需要返回它。
query_posts
调用选项1是我推荐的 - 它是最有效的,也是最合适的。
答案 1 :(得分:0)
如果存档页面用于自定义分类,则批准的答案不会起作用。在这种情况下,您可能希望使用以下内容:
add_filter( 'pre_get_posts', 'modify_movie_query' );
function modify_movie_query( $wp_query ) {
if(is_tax('movie-category')){
$wp_query->query_vars['posts_per_page'] = 10;
}
return $wp_query
}