WordPress : Afficher tous les messages sur un multisite vingt-treize

Publié par Jean-Michel le

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.

Catégories : Wordpress

Jean-Michel

Jean-Michel est en charge de la partie blog du site. Il met en place la stratégie de contenu et répond aux questions fréquentes sur Wordpress.

0 commentaire

Laisser un commentaire

Avatar placeholder

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *