web-dev-qa-db-ja.com

2つのWP_Queries、1ページあたりの投稿数、およびページ付けが機能していない

私は以下のコードで2つのWP_Queriesをマージしました、それはページネーション設定と同様に最終的な複合オブジェクトのページあたりのポストを持っています、しかしそれらの設定は機能していません。私のページは24投稿を表示しています、それがどこからこの番号を取得しているのですか、なぜページネーションがうまくいかないのですか?

$args1 = array(
    'post_type' => 'post',
    'posts_per_page' => -1
    );
$query1 = new WP_Query( $args1 );

    $args2 = array(
    'post_type' => 'product',
    'product_tag' => 'home',
    'posts_per_page' => -1
    );
$query2 = new WP_Query( $args2 );

$paged = get_query_var('paged') ? get_query_var('paged') : 1;

$finalargs = array(
  'paged' => $paged,
  'posts_per_page' => 3
);

$wp_query = new WP_Query($finalargs);

$wp_query->posts = array_merge( $query1->posts, $query2->posts );

$wp_query->post_count = count( $wp_query->posts );

echo '<pre>';
//var_dump($wp_query); exit(0);
echo '</pre>';

Var_dumpの出力は以下のようになっています、それで私のwp_queryがページごとの投稿とページ付けの設定をしているのならなぜ動かないのでしょうか?

object(WP_Query)#566 (47) {
  ["query"]=>
  array(2) {
    ["paged"]=>
    int(1)
    ["posts_per_page"]=>
    int(3)
  }
  ["query_vars"]=>
  array(61) {
    ["paged"]=>
    int(1)
    ["posts_per_page"]=>
    int(3)
    ["error"]=>
    string(0) ""
    ["m"]=>
    string(0) ""
    ["p"]=>
1
Anagio

私はこの正確な問題を抱えていました。私は解決策を見つけました!

これが役に立つのであれば、配列マージの前の私の最初のクエリの両方で、posts_per_pageを10の代わりに'posts_per_page' => -1のように-1に変更しました。

それから、最後のクエリにarray_mergeの後に'posts_per_page' => 10を追加して、1ページに10が表示されるようにしました。

編集:

今すぐあなたのコードを見て私はあなたもそうしているのを見ます。それなら、結果の配列をマージしてからマージした結果に対してクエリを実行することで、私が行ったようにクエリの方法を変更する必要があります。それは私のために働いたし、あなたの方法はしませんでした。

$other_reviews = get_posts( 
    array( 
        'fields'         => 'ids',
        'post_type'      => 'post', 
        'cat'            => 36, 
        'posts_per_page' => -1, 
        'paged'          => $paged, 
        'orderby'        => 'date', 
        'order'          => 'DESC' 
    )
);

$reviews = get_posts( 
    array( 
        'fields'         => 'ids', 
        'post_type'      => array( 'reviews1','review2' ), 
        'posts_per_page' => -1, 
        'paged'          => $paged, 
        'orderby'        => 'date', 
        'order'          => 'DESC' 
    )
);

それからそれらをマージします。

// merging ids
$post_ids = array_merge( $other_reviews, $reviews );

そして、次のように組み合わせたクエリを作成します。

// the main query
$query = new WP_Query(
    array(
        'post_type'      => 'any',
        'post__in'       => $post_ids, 
        'paged'          => $paged,
        'orderby'        => 'date', 
        'order'          => 'DESC',
        'posts_per_page' => 10
    )
);
2
NaamaGold