Mehrere wp_query-Objekte zusammenführen

Ich habe den folgenden Code für eine Multisite-Installation. Es funktioniert gut, aber ich muss jedes WP_Query-Schleifenobjekt von jeder Multisite für die Verwendung in einer anderen Vorlage mit der WordPress-Schleife zusammenführen. Ist das möglich. Ich habe versucht, die Objekte zu merge mit:

$obj_merged = (object) array_merge((array) $obj1, (array) $obj2); 

Aber es funktioniert nicht, da die Objekte functionen enthalten. Ideen?

 get_results( $wpdb->prepare( "SELECT * FROM ftc_blogs ORDER BY blog_id" ) ); // Iterate through your list of blogs foreach ($blogs as $blog){ // Switch to the next blog in the loop. // This will start at blog_id == 1 because of the ORDER BY statement. switch_to_blog($blog->blog_id); // Get the 5 latest posts for the blog and store them in the $query variable. $args = array( 'post_type' => array('post', 'page'), 'category_name' => 'dashboard', 'posts_per_page' => 5 ); $loop = new WP_Query( $args ); // need to merge $loop data into $merged_loop for use in template. // Switch back to the main blog restore_current_blog(); } endif; ?> 

Solutions Collecting From Web of "Mehrere wp_query-Objekte zusammenführen"

Wenn Sie nur die Posts jedes WP_Query-Objekts benötigen, können Sie Folgendes tun:

 < ?php // fetch blogs here $all_posts = array() foreach($blogs as $b) { switch_to_blog($b->blog_id); $query = new WP_Query(/* your args here */); if($query->have_posts()) $all_posts = array_merge($all_posts, $query->posts); // posts are stored in the `posts` property restore_current_blog(); // FYI: this tends to slow things down } 

In diesem Fall scheint es besser, wenn Sie get_posts anstatt manuell ein WP_Query-Objekt zu erstellen. Sie wollen nur das Array von Ergebnissen, was get_posts tut – natürlich verwendet es WP_Query hinter den Kulissen.

 < ?php // fetch blogs here $all_posts = array() foreach($blogs as $b) { switch_to_blog($b->blog_id); $posts = get_posts(/* your args here */); if($posts) $all_posts = array_merge($all_posts, $posts); restore_current_blog(); } 

Sie sollten sich darüber im Klaren sein, dass functionen wie get_post_meta und Ähnliches nicht so funktionieren, wie Sie es möchten, wenn Sie schließlich die Posts durchlaufen – Sie werden praktisch nur mit jedem Post-Objekt arbeiten können.