it-swarm.dev

Obter postagens da rede (Multisite)

O código a seguir fornece todas as postagens da rede. O que estou tentando alcançar:

  • Selecione quais blogs exibir (por ID)
  • Selecione quantos post para exibir (Meu código seleciona quantos post por blog )
  • Encomendar por data ou aleatório

    $blogs = get_last_updated();
    
     foreach ($blogs AS $blog)    {    
    
      switch_to_blog($blog["blog_id"]);
      $lastposts = get_posts('numberposts=3');
    
      foreach($lastposts as $post) : ?>
    
        <a href="<?php echo get_permalink(); ?>"><?php the_title(); ?></a></h3>
    
      <?php endforeach;
    
      restore_current_blog();
      }
    
6
Noob

Eu criei um plugin que faz algo semelhante (chamado Multisite Post Display https://wordpress.org/plugins/multisite-post-reader/ ). Ele exibe postagens de todos os sub-sites multisite.

O código ali pode ser útil para o que você está fazendo. Você está convidado a investigar e usar o código para ajudar no seu projeto. (Afinal, eu usei trechos de código de outras pessoas para desenvolvê-lo.)

Eu escrevi depois de fazer o Multisite Media Display, já que eu queria uma maneira de exibir mídias de subsites em uma página, e não encontrei nenhum plugin que fizesse isso. Ambos foram úteis para monitorar mídia e conteúdo postados do meu multi-site.

Livre, código aberto e tudo isso. Espero que seja útil.

1
Rick Hellewell

Ricks Answer é certamente útil, mas eu queria compartilhar minha abordagem, que é uma adoção ou extensão do seu código:

Primeiro, obtenha uma lista de blogs selecionados em sua rede .:

$args = array('site__in' => array(2, 3, 6))
$sitesObj = get_sites($args);
$sites = object_to_array($sitesObj);

Você também pode excluir sites usando 'site__not_in' nos argumentos de get_sites().

Converta o objeto $sitesObj em uma matriz:

$sites = object_to_array($sitesObj);

object_to_array($object) {
  if (!is_object($object) && !is_array($object)) {
    return $object;
  }
  return array_map('object_to_array', (array) $object) ;
}

Em seguida, inicialize um contador para controlar o total de postagens a serem exibidas e alterne para cada blog selecionado para disparar o loop com seus argumentos personalizados:

$postCounter = 0;
$maxPosts = 5; // total number of posts to show

foreach ($sites as $site) {
  switch_to_blog($site['blog_id']);

  $args = array(
    'post_type' => 'post', // or custom post type
    'posts_per_page' => 2, // number of posts per blog
    'order' => 'DESC',
    'orderby' => 'date' // you could also use 'Rand' here
  );

  $loop = new WP_Query($args);

  if ($loop->have_posts()) :
    while ($loop->have_posts() && $counter < $maxPosts) : $loop->the_post();
      // your output
    endwhile;
  endif;

  restore_current_blog();
}

Espero que ajude :)

1
Bastian Immanuel André

Este

function wolpostcount_shortcode($atts) {

  function object_to_array($object) {
    if (!is_object($object) && !is_array($object)) {
      return $object;
    }
    return array_map('object_to_array', (array) $object) ;
  }

  $args = array('site__in' => array(1,7,8,12,14,15,20,21,22,25,32,33,36,41,42,46,47,48,49));
  $sitesObj = get_sites($args);
  $sites = object_to_array($sitesObj);

  foreach ($sites as $site) {
    switch_to_blog($site['blog_id']);

    $postcount = wp_count_posts('post')->publish;
    $pagecount = wp_count_posts('page')->publish;
     echo 'Posts:'.$postcount.' Pages:'.$pagecount.'<br>';
    $totalpostcount = $totalpostcount + $postcount;
    $totalpagecount = $totalpagecount + $pagecount;
    restore_current_blog();
  }

  echo 'number of posts '.$totalpostcount.'<br>';
  echo 'number of pages '.$totalpagecount.'<br>';
0
Skeffonics