WordPress : Afficher tous les messages sur un multisite vingt-treize
J’utilise le vingt-treize par défaut sur un site wordpress 4.0. J’ai un site dans le réseau en ce moment. J’en ajouterai peut-être un ou deux l’année prochaine. Les deux blogs utilisent vingt-treize. À l’heure actuelle, le blog « principal » ne diffuse que ses propres messages. Je veux qu’il inclue le blog enfant. Y at-il un bon moyen de le faire? Peu importe si je dois bricoler manuellement le code lorsque j’ajoute un blog au réseau, car je ne le ferai pas souvent.
Edit : je veux que les articles apparaissent dans la zone de contenu principale, comme les articles du blog principal. Dans le même style par défaut que vingt-treize.
Éditer 2 : Clarification. Le thème vingt-treize a « The Loop » dans index.php.
<?php while ( have_posts() ) : the_post(); ?>
<?php get_template_part( 'content', get_post_format() ); ?>
<?php endwhile; ?>
Si je pouvais obtenir cette boucle pendant que je récupérais aussi les blogs enfants, j’obtiendrais exactement ce que je recherche. Je sais que cela aura plus de conséquences qui doivent être traitées (la pagination par exemple) mais c’est essentiellement ce que je recherche.
Solution n°1 trouvée
Vous ne pouvez pas simplement parcourir tous les messages récents de votre installation réseau. Chaque site d’un réseau est conçu pour se sentir aussi loin que l’API et la plupart de l’interface utilisateur se présente comme un site wordpress autonome complet. C’est à la fois une force et une faiblesse du système, mais cela signifie que faire quoi que ce soit qui mélange le contenu de divers sites n’est pas anodin.
La clé est la fonction switch_to_blog et restore_current_blog qui vous permettent d’utiliser l’API wordpress dans le contexte de différents blogs
Puisque vous voulez que vos messages soient affichés chronologiquement, vous devez d’abord créer une liste de tous les messages récents sur tous les sites, quelque chose comme
$blogs_to_fetch = array( the blog ids of the blogs);
$posts = array();
// first we collect data
foreach ($blogs_to_fetch as $blogid) {
switch_to_blog($blogid);
$ps = get_posts(parameters to get N latest posts);
foreach $ps as $p) {
$posts[] = array('blogid' => $blogid, 'post' => $post);
}
restore_current_blog(); // not realy needed, but nicer to the eye
}
$posts = sort_posts($posts); // your own function that sorts the posts by time or by any other creiteria
// now we display
foreach ($posts as $p) {
switch_to_blog($p['blogid']);
setup_postdata( $p );
get_template_part( 'content', get_post_format() );
restore_current_blog();
}
// cleanup
wp_reset_postdata();
Solution n°2 trouvée
Si vous recherchez « facile », le moyen le plus simple est probablement d’utiliser le widget RSS pour cela. Obtenez deux widgets, un pour chaque blog et vous avez terminé. Une fois que vous avez un troisième blog, ajoutez simplement un autre widget.
0 commentaire