私は以下のコードで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"]=>
私はこの正確な問題を抱えていました。私は解決策を見つけました!
これが役に立つのであれば、配列マージの前の私の最初のクエリの両方で、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
)
);