web-dev-qa-db-fra.com

Fusion de deux WP_Queries, publications par page et pagination inopérantes

J'ai fusionné deux WP_Queries avec le code ci-dessous, il a une configuration de pagination ainsi que des publications par page dans l'objet combiné final, mais ces paramètres ne fonctionnent pas. Ma page affiche 24 messages, d'où provient ce numéro et pourquoi la pagination ne fonctionne-t-elle pas?

$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>';

La sortie de var_dump est ci-dessous, donc si mon wp_query a des publications par page et une configuration de pagination, pourquoi ne fonctionne-t-il pas?

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

J'ai eu ce problème exact. Je viens de tomber sur la solution!

Au cas où cela vous aiderait, dans mes deux requêtes initiales avant la fusion du tableau, j'ai modifié posts_per_page afin qu'il soit -1 comme 'posts_per_page' => -1 au lieu de 10. Lorsque j'ai fait cela, les liens de pagination sont soudainement apparus et ont bien fonctionné.

J'ai ensuite ajouté 'posts_per_page' => 10 à ma requête finale après le tableau array_merge pour qu'il affiche 10 par page.

EDIT:

Maintenant, en regardant votre code, je vois que vous l'avez fait aussi. Ensuite, vous devriez peut-être changer la façon dont vous interrogez comme je l'ai fait, en fusionnant votre tableau de résultats, puis en effectuant une requête sur les résultats fusionnés. Cela a fonctionné pour moi et votre manière n'a pas.

$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' 
    )
);

Ensuite, nous les fusionnons ensemble:

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

et construire la requête combinée avec:

// 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