it-swarm-id.com

Dapatkan pos dari Jaringan (Multisite)

Kode berikut memberikan semua posting dari jaringan. Apa yang saya coba capai:

  • Pilih blog mana yang akan ditampilkan (berdasarkan ID)
  • Pilih berapa banyak posting untuk ditampilkan (Kode saya memilih berapa banyak posting per blog )
  • Dipesan berdasarkan tanggal atau acak

    $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

Saya membuat sebuah plugin yang melakukan hal serupa (disebut Multisite Post Display https://wordpress.org/plugins/multisite-post-reader/ ) Ini menampilkan posting dari semua sub-situs multisite.

Kode di sana mungkin bermanfaat untuk apa yang Anda lakukan. Anda dipersilakan untuk Menggali itu dan menggunakan kode untuk membantu proyek Anda. (Lagi pula, saya menggunakan cuplikan kode orang lain untuk mengembangkannya.)

Saya menulisnya setelah saya melakukan Tampilan Media Multisite, karena saya ingin cara untuk menampilkan media dari subsitus pada satu halaman, dan tidak dapat menemukan plugin yang melakukan itu. Keduanya bermanfaat untuk memantau media yang diposting dan konten dari multisite saya.

Gratis, open source, dan semua itu. Semoga bermanfaat.

1
Rick Hellewell

Jawaban Ricks tentu membantu tetapi saya ingin membagikan pendekatan saya, yang merupakan adopsi atau perpanjangan kode Anda:

Pertama, dapatkan daftar blog yang dipilih di jaringan Anda .:

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

Anda juga dapat mengecualikan situs dengan menggunakan 'site__not_in' dalam argumen get_sites().

Ubah objek $sitesObj menjadi 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) ;
}

Kemudian inisialisasi penghitung untuk mengontrol total pos yang ditampilkan dan beralih ke setiap blog yang dipilih untuk menjalankan loop dengan argumen khusus Anda:

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

Saya harap itu membantu :)

Ini

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