有这样的一个查询条件:自定义文章类型video,在其分类页面,每页显示两组内容。

global $wp_query;
        $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
        $args = array(
    'post_type' => 'video',
    'tax_query' => array(
        array(
            'taxonomy' => 'videos',
            'field' => 'slug',
            'terms' => 'v',
        ) ,
    ) ,
    'posts_per_page' => 2,
    'paged' => $paged,
);
$cus_query = new WP_Query($args);

分页导航如下:

 echo paginate_links(array( 'total' => $cus_query -> max_num_pages));

但是会发现,在点击第二页甚至往后的页时均会显示404。
在后台设置里有这么一个项目:博客页面至多显示。
如果这里设置的数,超出上面的自定义文章video的总文章数,就会显示404。
虽然,分页导航以一页两篇文章的方式,分出了N个页。但是并没有覆盖后台博客的显示数。

举例:

如果后台设置最多显示15篇,但是自定义文章video总共12篇。如果按每页2篇设置分页导航那么会分出6页。
但是,在分页导航点第二页时,数据库查询实际上从第16篇文章开始搜索的。但自定义文章video显然不够16篇。
这样就会从第二页开始显示404。

解决方法:

需要一个辅助设置。在主题function里添加自定义文章video相关的数据库查询条件:

function my_custom_posts_per_page( $query ) {
if (!is_admin() && post_type_exists('video') && is_tax('videos') )
        $query->set( 'posts_per_page', 2 );
}
add_filter('parse_query', 'my_custom_posts_per_page');

从代码中可以看出,目的就是在当有自定义文章类型video存在时,且在video的分类页面(设taxonomy为videos)时,将系统的默认每页显示数设置成2。这样,问题应该就解决了。

小结:

我想这个是wordpress的一个bug吧。也有可能我们在编写代码时忽略了什么。