it-swarm.com.de

Beiträge von Network (Multisite) abrufen

Der folgende Code enthält alle Posts aus dem Netzwerk. Was ich versuche zu erreichen:

  • Wählen Sie die anzuzeigenden Blogs aus (nach ID)
  • Wählen Sie aus, wie viele Posts angezeigt werden sollen (Mein Code gibt an, wie viele Posts pro Blog ).
  • Bestellung nach Datum oder Zufall

    $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

Ich habe ein Plugin erstellt, das etwas Ähnliches tut (Multisite Post Display https://wordpress.org/plugins/multisite-post-reader/ ). Es werden Posts von allen Untersites mit mehreren Standorten angezeigt.

Der darin enthaltene Code kann für Ihre Arbeit hilfreich sein. Gerne können Sie sich darin vertiefen und den Code verwenden, um bei Ihrem Projekt zu helfen. (Immerhin habe ich die Codefragmente anderer Leute verwendet, um sie zu entwickeln.)

Ich habe es nach der Multisite-Medienanzeige geschrieben, da ich Medien von Unterwebsites auf einer Seite anzeigen wollte und kein Plug-in finden konnte, das dies ermöglichte. Beides hat sich als nützlich erwiesen, um veröffentlichte Medien und Inhalte von meiner Multisite aus zu überwachen.

Kostenlos, Open Source und so weiter. Hoffe es ist hilfreich.

1
Rick Hellewell

Ricks Answer ist sicherlich hilfreich, aber ich wollte meinen Ansatz mitteilen, der eine Übernahme oder Erweiterung Ihres Codes darstellt:

Holen Sie sich zunächst eine Liste ausgewählter Blogs in Ihrem Netzwerk:

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

Sie können Sites auch ausschließen, indem Sie 'site__not_in' in den Argumenten von get_sites() verwenden.

Konvertieren Sie das $sitesObj-Objekt in ein Array:

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

Initialisieren Sie dann einen Zähler, um die Gesamtzahl der anzuzeigenden Beiträge zu steuern, und wechseln Sie zu jedem ausgewählten Blog, um die Schleife mit Ihren benutzerdefinierten Argumenten auszulösen:

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

Ich hoffe das hilft :)

Diese

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