web-dev-qa-db-ja.com

ページ数 - 複数の(カスタム)投稿タイプ

私のアーカイブクエリには、カスタムのposts_per_page、order、orderby、post_type、およびpagedが含まれています(wp-pageNavi経由)。

array (
    'order' => 'DESC',
    'orderby' => 'title',
    'paged' => 1,
    'post_type' => Array (
        'post',
        'cust_article',
    ),
    'posts_per_page' => 15,
);

私のpost_typeは 'post'と 'cust_article'を含みます。
私は1 'post'と65 'cust_article'を持っています。 posts_per_pageは現在adminで5に設定されています。

私の問題は、最大ページ数が 'post'に含まれるページ数によって制限されることです。 「投稿」が1つしかないため、すべてのページが表示されても(5ページ、posts_per_pageが15に設定されていても)、ページは1に制限されています。
2番目の「投稿」を作成し、posts_per_pageを1に設定すると、2番目のページにアクセスできます。後続のページでも404が返されます。

私は私のカスタムpost_typeアーカイブに同じpost_typeを使って同じクエリを使っていますが、クエリに秒を追加すると同じエラーが発生します。

ページングは​​投稿数と設定オプションposts_per_pageによって制限されることを私は知っています。 5 pppと21のポスト=>最大5ページ
理論上、2つのpost_typeからの投稿は投稿数を増やすべきです。 5pppと21投稿+ 12投稿=>最大7ページ

4
AlexG

Miloは正しいです。ロード時に2番目のクエリを呼び出す代わりに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_Queryをヒットしてデータベースに再度pingを実行します。

3
Howdy_McGee