it-swarm-eu.dev

Získat příspěvky ze sítě (více stránek)

Následující kód poskytuje všechny příspěvky ze sítě. Co se snažím dosáhnout:

  • Vyberte, které blogy se mají zobrazit (podle ID)
  • Vyberte, kolik příspěvků se má zobrazit (Můj kód vybere, kolik příspěvků na blog )
  • Pořadí podle data nebo náhodně

    $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

Vytvořil jsem plugin, který dělá něco podobného (tzv. Multisite Post Display https://wordpress.org/plugins/multisite-post-reader/ ). Zobrazuje příspěvky ze všech podstránek.

Kód tam může být užitečný pro to, co děláte. Jste vítáni kopat do něj a používat kód pomoci s vaším projektem. (Koneckonců jsem použil útržky kódů jiných lidí, abych to vytvořil.)

Napsal jsem to poté, co jsem udělal Multisite Media Display, protože jsem chtěl způsob, jak zobrazit média z podřízených stránek na jedné stránce, a nemohl jsem najít žádný plugin, který by to dělal. Oba programy byly užitečné pro sledování odeslaných médií a obsahu z mého multisite.

Volný, open source, a to vše. Doufám, že je to užitečné.

1
Rick Hellewell

Ricks Odpověď je jistě užitečná, ale chtěl jsem se podělit o svůj přístup, kterým je přijetí nebo rozšíření kódu:

Nejprve si vyberte seznam vybraných blogů ve své síti .:

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

Stránky můžete také vyloučit pomocí 'site__not_in' v argumentech get_sites().

Převést objekt $sitesObj do pole:

$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) ;
}

Poté inicializujte čítač pro kontrolu celkového počtu příspěvků, které chcete zobrazit, a přepněte do každého vybraného blogu, abyste vytvořili smyčku s vlastními argumenty:

$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();
}

Doufám, že to pomůže :)

Tento

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