摘要:笔者通过多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首页调用全站文章新方法》一文中的方法实现新的首页调用全站最新文章。
下面我简单说几句