次のコードは、ネットワークからのすべての投稿を示します。私が達成しようとしていること:
日付順またはランダムな順序
$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();
}
私は似たようなことをするプラグインを作成しました(Multisite Post Display https://wordpress.org/plugins/multisite-post-reader/ と呼ばれます)。すべてのマルチサイトサブサイトからの投稿が表示されます。
そこにあるコードはあなたがしていることに役立つかもしれません。あなたはそれを掘り下げることを歓迎し、あなたのプロジェクトを助けるためにコードを使う。 (結局、私はそれを開発するために他の人のコードスニペットを使いました。)
1つのページにサブサイトのメディアを表示する方法が必要で、それを実現するプラグインが見つからなかったため、Multisite Media Displayを実行した後に書きました。どちらも私のマルチサイトから投稿されたメディアやコンテンツを監視するのに役立ちました。
フリー、オープンソース、そしてそれがすべてです。それが役に立つことを願っています。
Ricks Answerはきっと役に立ちますが、私のアプローチを共有したいと思いました。それはあなたのコードの採用または拡張です。
まず、あなたのネットワークで選ばれたブログのリストを入手してください。
$args = array('site__in' => array(2, 3, 6))
$sitesObj = get_sites($args);
$sites = object_to_array($sitesObj);
get_sites()
の引数に'site__not_in'
を使ってサイトを除外することもできます。
$sitesObj
オブジェクトを配列に変換します。
$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) ;
}
次に、表示する投稿の総数を制御するカウンタを初期化し、選択した各ブログに切り替えてカスタム引数でループを開始します。
$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();
}
それが役立つことを願っています:)
この
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>';