J'ai le code ci-dessous pour une installation multisite. Cela fonctionne bien, mais je dois fusionner ensemble chaque objet de boucle WP_Query de chaque multisite pour l'utiliser dans un autre modèle avec la boucle WordPress. Est-ce possible. J'ai essayé de fusionner les objets avec:
$obj_merged = (object) array_merge((array) $obj1, (array) $obj2);
Mais cela ne fonctionne pas car les objets contiennent des fonctions. Des idées?
<?php
// Set up global variables. Great
global $wpdb, $blog_id, $post, $merged_loop;
// Get a list of blogs in your multisite network
$blogs = $wpdb->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;
?>
Si vous avez juste besoin des publications de chaque objet WP_Query, vous pouvez faire quelque chose comme ceci:
<?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
}
Dans ce cas, il semble préférable d’utiliser simplement get_posts
plutôt que de créer manuellement un objet WP_Query. Vous voulez juste le tableau de résultats, ce que get_posts
fait - bien sûr, il utilise WP_Query
en coulisse.
<?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();
}
Vous devez savoir que des fonctions telles que get_post_meta
et autres ne fonctionneront pas comme vous le souhaitez lorsque vous parcourez les publications - vous ne disposerez généralement que de chaque objet de publication.