Der folgende Code enthält alle Posts aus dem Netzwerk. Was ich versuche zu erreichen:
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();
}
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.
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>';