填写您的邮件地址,订阅我们的精彩内容:

wordpress多站点调用全站所有子站点最新文章函数化

677

wordpress开通多站点之后调用全站博客最新文章最热文章到网站首页

摘要:笔者通过多wordpress多站点开通后的数据库表的研究,专门写了这样一个函数,用以调用全站所有子站点最新文化的函数化。本函数解决的最关键问题是通过多次的数组转化,为每篇文字增加了blog_id属性,通过冒泡法对获取的文章函数进行排序,得到最终的按照时间排序的结构。

在《wordpress开通多站点之后调用全站博客最新文章最热文章到网站首页》一文和《wordpress多站点下调用固定博客的最新文章》一文中,笔者已经涉及到wordpress多站点的一些调用问题,这里再给出一个比较官方的链接作为阅读本文的一个参考:http://codex.wordpress.org/Function_Reference#Multisite_functions 希望读者通过这些文章的阅读,可以自己上手解决自己的wordpress多站点调用问题。

在开通多站点之后,请在主题文件中尝试下面的代码,它将让你惊喜:

function get_mu_last_posts($num = 10){
??? //本函数用以返回wordpress多站点下获取全部站点的最新发布的文章,返回结果是一个数组,包括了post的所有字段,外加一个blog_id字段,利用这个字段,我们可以利用http://codex.wordpress.org/Category:WPMU_Functions 的函数进行文章相关信息的调用 http://www.utubon.com wordpress多站点调用全站所有子站点最新文章函数化
??? global $wpdb,$table_prefix;
??? $sql = '';
??? $mu_last_posts = array();
??? $blog_post_tables = array();

??? [payfor price="5"]$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;
}[/payfor]
//$my_site_blogs = get_mu_last_posts();
//print_r($my_site_blogs);

而读者通过修改源码,还能得到按照评论数排序的结果,即修改冒泡排序地方的if()判断,将post_date修改为comment_count,并修改判断条件即可得到按照评论数排序的文章数组。

更新

朋友非要我写点怎么调用的,那么我就写一盘调用的吧,下面这个函数允许你调用所有站点下的最新文章

function the_mu_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
?? ?}
}

这下,你只需要在主题中使用<?php the_mu_last_posts(); ?>就可以调用到一个含有全站最新文章的列表了。

如果你安装了buddypress插件,使博客成为一个社区,那么可以使用《wordpress多站点buddypress首页调用全站文章新方法》一文中的方法实现新的首页调用全站最新文章。

下面我简单说几句