it-swarm.com.de

Kann ich 2 neue WP_Query ($ variable) zusammenführen?

Ich verwende ein Netzwerk mit mehreren Standorten und habe eine SQL-Abfrage eingerichtet, die swith_to_blog () verwendet. und fragt die Beiträge ab.

Gibt es eine Möglichkeit, die Abfrage in einer neuen WP_Query zu deklarieren und diese Abfrage tatsächlich mit einer anderen zusammenzuführen?

Grundsätzlich wenn ich das mache:

$number1 = new WP_Query($multisitequery);

Kann ich es zusammenführen mit:

$number2 = new WP_Query($normalquery);

$normalquery enthält Einstellungen wie Paginierung, pro Seite, Auszug, Titel usw. in einem Portfolio-Shortcode.

Ich möchte, dass abgefragte Posts aus meiner neuen $multisite-Abfrage hinzugefügt werden.

Kann das erreicht werden? Ich möchte mich nur davor retten, ein neues Shortcode-Setup zu erstellen. Lol

Vielen Dank im Voraus. Rory

EDIT ========

Was ich habe, ist:

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

Weiter unten in meinem Portfolio habe ich "nach all den $ settings ['options']":

$portfolio_query = new WP_Query( $portfolio );

der $portfolio_query verwendet eine Schleife in einer Seitenvorlage.

Ich möchte eine zusätzliche Abfrage wie folgt hinzufügen:

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();
}

dabei gehe ich davon aus, dass $globalcontainer das Array ist, das mit der wp_query(); zusammengeführt werden soll.

Wenn Sie also auf das eingehen, was Sie geantwortet haben, könnte ich theoretisch einfach:

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

Wäre das richtig?

Zweitens, in Bezug auf das Überschreiben des Array-Schlüssels array_merge ..... Wie würde ich vorgehen, um ein Überschreiben zu stoppen?

8
Rory Rothon

Sie werden nicht viel Gutes tun, wenn Sie nur die Argumente zusammenführen. Sie müssen das resultierende posts-Array und die post_count-Anzahl zusammenführen. Das funktioniert bei mir:

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

Im Allgemeinen füge ich ihre ID-Arrays zusammen und stelle eine dritte Abfrage. Um den ersten Satz von Abfragen billig zu halten, gebe ich nur die IDs zurück, die den folgenden fields-Parameter verwenden:

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

Hoffe das hilft

--- BEARBEITEN ---

Nach meiner Antwort wird die ursprüngliche Frage für mehrseitige Details bearbeitet. Bei Post Merges mit mehreren Standorten funktioniert dies nicht.

14
Bora Yalcin

Also, wenn du das hast:

$number1 = new WP_Query($multisitequery);

$number2 = new WP_Query($normalquery);

Ich nehme an, Sie definieren diese irgendwo vorher?

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

... in diesem Fall müssen Sie zum Zusammenführen der beiden Abfragen nur array_merge() die beiden Arrays eingeben, bevor Sie sie an new WP_Query() übergeben:

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

$merged_query = new WP_Query( $merged_query_args );

Beachten Sie, dass die Reihenfolge beim Aufruf von array_merge() wichtig ist. Wenn beide denselben Array-Schlüssel haben, überschreibt das zweite Array das erste Array.

3
Chip Bennett