我的存档查询包含自定义posts\\u per\\u page、order、orderby、post\\u type和paged(通过wp pageNavi)。
array (
\'order\' => \'DESC\',
\'orderby\' => \'title\',
\'paged\' => 1,
\'post_type\' => Array (
\'post\',
\'cust_article\',
),
\'posts_per_page\' => 15,
);
我的post\\u类型包含“post”和“cust\\u article”
我有1个“帖子”和65个“客户文章”。在admin中,posts\\u per\\u page当前设置为5。
我的问题是,页面的最大数量受到“post”包含的页面数量的限制。由于我只有一个“post”,页面限制为1,即使我显示所有页面(5页,posts\\u per\\u page设置为15),除第1页以外的其他页面将返回404
创建第二个“post”并将posts\\u per\\u page设置为1允许访问第二个页面,以下页面也将返回404。
我对自定义post\\u类型存档使用相同的查询,只有一个post\\u类型,在查询中添加第二个会产生相同的错误。
我知道分页受到posts数量和set选项posts\\u per\\u page的限制。5个ppp和21个帖子=>理论上最多5页
来自2个post\\u类型的帖子应该扩展帖子数量。5ppp和21篇文章+12篇文章=>最多7页
最合适的回答,由SO网友:Howdy_McGee 整理而成
米洛是对的,你应该使用pre_get_posts
而不是在加载时调用第二个查询。这将使分页更加容易。无论您使用的orderby会话是什么,都应该可以在钩子中访问它。这样做的代码也相当简单,如下所示:
/**
* Modify the query before it gets loaded
*
* @param WP_Query Object $query
*
* @return void
*/
function wpse_228230( $query ) {
if( $query->is_admin ) {
return;
}
// Your archive conditional here
if( is_post_type_archive() ) {
$query->set( \'post_type\', array( \'post\', \'cust_article\' ) );
$query->set( \'posts_per_page\', 15 );
$query->set( \'orderby\', array( \'title\' => \'DESC\' ) );
}
}
add_action( \'pre_get_posts\', \'wpse_228230\' );
这将在主查询到达数据库之前对其进行修改。否则WordPress将获得自然查询,点击自定义WP\\U查询并再次ping数据库,这是不必要的开销。