以下代码给出了来自网络的所有帖子。 我想要实现的目标:
- 选择要显示的博客(按 ID)
- 选择要显示的帖子数(我的代码选择了多少帖子 每个博客)
-
按日期或随机排序
$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="https://wordpress.stackexchange.com/questions/257024/<?php echo get_permalink(); ?>"><?php the_title(); ?></a></h3> <?php endforeach; restore_current_blog(); }
我创建了一个执行类似操作的插件(称为 Multisite Post Display https://wordpress.org/plugins/multisite-post-reader/ )。 它显示来自所有多站点子站点的帖子。
那里的代码可能对您正在做的事情有帮助。 欢迎您深入研究并使用代码来帮助您的项目。 (毕竟我是用别人的代码片段开发的。)
我是在完成多站点媒体显示之后写的,因为我想要一种在一个页面上显示来自子站点的媒体的方法,但找不到任何插件可以做到这一点。 两者都有助于监控我的多站点发布的媒体和内容。
免费、开源等等。 希望对您有所帮助。
Ricks Answer 肯定有帮助,但我想分享我的方法,即采用或扩展您的代码:
首先获取网络中选定博客的列表:
$args = array('site__in' => array(2, 3, 6))
$sitesObj = get_sites($args);
$sites = object_to_array($sitesObj);
您还可以使用排除网站 'site__not_in'
在的论据中 get_sites()
.
转换 $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();
}
我希望这有帮助 :)