WordPress站点开启了多站点模式,想在网站首页调用所有子站点的最新文章,方法如下:
在网站的主题functions.php文件中加入下面的函数:
function get_my_last_posts($num = 10){
//本函数用以返回wordpress多站点下获取全部站点的最新发布的文章,返回结果是一个数组,包括了post的所有字段,外加一个blog_id字段
global $wpdb,$table_prefix;
$sql = '';
$mu_last_posts = array();
$blog_post_tables = array();
$blogs = $wpdb->get_results("SELECT * FROM {$wpdb->blogs} WHERE public='1';",ARRAY_A);//从blogs表中获取目前已经成功发布的博客信息
foreach($blogs as $blog){
//根据从blogs表中获取的信息,得到所有的博客文章数据表名,将表名存放在$blog_post_tables数组中
$blog_id = $blog['blog_id'];
if($blog_id == 1)$blog_post_table[$blog_id] = $table_prefix.'posts';//由于第一个博客数据表wp_posts中间没有数字,所以需要做排除
else $blog_post_table[$blog_id] = $table_prefix.$blog['blog_id'].'_posts';//从$blog_post_tables数组中的表中进行下面的查询,由于这是在循环中,把整个数据库的各个posts表都查遍了
$sql = "
SELECT * FROM {$blog_post_table[$blog_id]}
WHERE post_type = 'post'
AND post_status = 'publish'
ORDER BY post_date DESC
LIMIT 0,{$num}
";
$last_posts_in_blog[$blog_id] = $wpdb->get_results($sql,ARRAY_A);
//将查询的文章保存在$last_posts_in_blog数组中,这是一个三维数组,键值分别是[博客ID,该博客下对应的序列数,文章的字段]
}
foreach($last_posts_in_blog as $blog_id => $last_posts){
foreach($last_posts as $last_post){
//将上面得到的三维文章数组转化为一维数组
//将博客的ID放在增加的一个blog_id字段中,可以用get_blog_permalink($blog_id, $post_id)获取文章链接
$last_post['blog_id'] = $blog_id;
$mu_last_posts[] = $last_post;
}
}
//下面使用冒泡法处理上面得到一个按照时间排序的数组,同时用到本函数中的$num限制要得到的文章条数
$tmp_mu_last_posts = array();
for($i = 0;$i < count($mu_last_posts);$i ++){
if($i >= $num){
//去除大于规定数字的元素
unset($mu_last_posts[$i]);
continue;
}
for($j = 0;$j < count($mu_last_posts);$j ++){
//冒泡法排序
if($mu_last_posts[$i]['post_date'] > $mu_last_posts[$j]['post_date']){
$tmp_mu_last_posts = $mu_last_posts[$i];
$mu_last_posts[$i] = $mu_last_posts[$j];
$mu_last_posts[$j] = $tmp_mu_last_posts;
}
}
}
return $mu_last_posts;
}
function my_last_posts($num = 10,$style = 'list'){
$mu_last_posts = get_mu_last_posts($num);
foreach($mu_last_posts as $mu_last_post){
>
< php if($style == 'list'){ >
<li><a href="< php echo get_blog_permalink($mu_last_post['blog_id'],$mu_last_post['ID']); >">< php $mu_last_post['title']; ></a></li>
< php } >
< php
}
}
在模板需要调用的位置,添加下面的代码即可,默认调用10条,可以通过传参数的方式修改调用数量。
<?php my_last_posts(); ?>