页数-多种(自定义)帖子类型

时间:2016-05-30 作者:AlexG

我的存档查询包含自定义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页

1 个回复
最合适的回答,由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数据库,这是不必要的开销。

相关推荐

How to sort by number

我必须按数字对结果排序:<ul> <?php $productTerms = get_terms(\'prezzoceste\', array(\'hide_empty\' => 0, \'orderby\' => \'ASC\', \'meta_type\' => \'NUMERIC\', )); foreach($productTerms as $productTerm) : ?> <li> <i c