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?
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;
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.
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.