web-dev-qa-db-fra.com

Puis-je fusionner 2 nouveaux WP_Query ($ variable)?

J'exécute un réseau multisite et j'ai configuré une requête SQL qui utilise swith_to_blog (); et interroge les messages.

Existe-t-il un moyen de déclarer la requête dans un nouveau WP_Query et de fusionner cette requête avec un autre?

Fondamentalement, si je fais cela:

$number1 = new WP_Query($multisitequery);

Puis-je le fusionner avec:

$number2 = new WP_Query($normalquery);

$normalquery conserve les paramètres tels que la pagination, par page, extrait, titre, etc. sur un shortcode de portefeuille.

Je voudrais qu'il inclue les posts interrogés de ma nouvelle requête $multisite.

Cela peut-il être réalisé? Voulant juste me sauver de la création d'une toute nouvelle configuration de shortcode lol

Merci d'avance. Rory

EDIT ========

Ce que j'ai c'est:

$portfolio = array();
$portfolio = $settings;

Plus loin dans ma fonction de portefeuille "après tous les $ settings ['options']" "j'ai:

$portfolio_query = new WP_Query( $portfolio );

le $portfolio_query utilise une boucle sur un modèle de page.

Je veux ajouter une requête supplémentaire dans ceci comme ceci:

global $wpdb, $blog_id, $post;

$blogs = $wpdb->get_results( $wpdb->prepare( "SELECT * FROM wp_blogs ORDER BY blog_id" ) );

$globalcontainer = array();

foreach ($blogs as $blog){

   switch_to_blog($blog->blog_id);

   $globalquery = query_posts($args);

   $globalcontainer = array_merge( $globalcontainer, $globalquery );

   restore_current_blog();
}

où je suppose que $globalcontainer serait le tableau à fusionner dans le wp_query();.

Donc, en prenant en compte ce que vous avez répondu, en théorie, je pourrais simplement:

$mergedqueryargs = array_merge($portfolio , $globalcontainer);
$portfolio_query = new WP_query($mergedqueryargs);

Cela serait-il correct?

Deuxièmement, en ce qui concerne le remplacement de la clé du tableau array_merge ..... Comment pourrais-je m'arrêter pour arrêter un écrasement?

8
Rory Rothon

Vous ne ferez pas beaucoup de bien en fusionnant les arguments, vous aurez besoin de fusionner le tableau posts résultant et le nombre post_count. Cela fonctionne pour moi:

//setup your queries as you already do
$query1 = new WP_Query($args_for_query1);
$query2 = new WP_Query($args_for_query2);

//create new empty query and populate it with the other two
$wp_query = new WP_Query();
$wp_query->posts = array_merge( $query1->posts, $query2->posts );

//populate post_count count for the loop to work correctly
$wp_query->post_count = $query1->post_count + $query2->post_count;
23
guidod

Je fusionne généralement leurs tableaux d'identifiants et effectue une troisième requête. Pour que le premier ensemble de requêtes reste bon marché, je ne retourne que leurs identifiants à l'aide du paramètre de champ suivant:

//setup your queries with extra parameter fields => ids
$query1 = new WP_Query(array('fields' => 'ids','other_parameters' => 'etc'));
$query2 = new WP_Query(array('fields' => 'ids','other_parameters'=>'etc'));

//now you got post IDs in $query->posts
$allTheIDs = array_merge($query1->posts,$query2->posts);

//new query, using post__in parameter
$finalQuery = new WP_Query(array('post__in' => $allTheIDs));

J'espère que cela t'aides

---MODIFIER---

Après ma réponse, la question initiale est modifiée pour des détails multisites. En cas de fusion multisite, cela ne fonctionne pas.

14
Bora Yalcin

Donc, si vous avez ceci:

$number1 = new WP_Query($multisitequery);

$number2 = new WP_Query($normalquery);

Je suppose que vous définissez ces quelque part précédent?

$multisitequery = array();
$normalquery = array();

... auquel cas, pour fusionner les deux requêtes, il suffit de array_merge() les deux tableaux avant de les transmettre à new WP_Query():

$merged_query_args = array_merge( $normalquery, $multisitequery );

$merged_query = new WP_Query( $merged_query_args );

Notez que l'ordre est important dans l'appel array_merge(). Si les deux ont la même clé de tableau, le deuxième tableau remplacera le premier.

3
Chip Bennett