乌徒帮技术范WordPressWordPress多站点 › wordpress开通多站点之后调用全站博客最新文章最热文章到网站首页

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

分类:WordPress多站点

wordpress multisite 多站点群站建设服务

更新:在《wordpress多站点调用全站所有子站点最新文章函数化》一文中,笔者已经更新了首页调用多站点子站点最新博客的方法,本文可以作为开发思路查看,文章中使用到的guid获取文章链接的方法不建议使用。

————————

wordpress进入3.0之后拥有了开通多站点的功能,wordpress mu从此退出舞台,mulitisite成为wordpress多站点的主角。但开通多站点之后,虽然可以建立很多博客,却不能将各个博客和博主的信息调用的首页,增加社区性。为此,出现了比较强大的buddypress插件,启动该插件之后,wordpress就可以一个社区一样,交换各个博客之间的数据了。但对于不喜欢华丽和功能太多插件的朋友来说,如果再启用buddypress,又要自己去熟悉buddypress的功能,还要研究其源码以实现自己的想法,这实在太痛苦了,不过我还是忍不住,研究了一下,最后写了一篇wordpress多站点buddypress首页调用全站文章新方法,希望对那些有强迫症的朋友有所帮助。

很多朋友对WordPress多站点可谓情有独钟,我个人认为对于热爱WP的朋友而言是很幸福的。而且WP官方提供了一套可以运行的函数,点击这里阅读。同时,我也发现很多朋友也专门来研究WPMU,这里就有一个。

为了让没有安装buddypress的朋友也能调用其他博客的文章和数据,我写了以下的代码,它包括了调用了其他站的最新最热博客,调用了新开通用户和新开通博客。你可以直接稍微修改后将这些代码放在现在的主题首页的适合的地方,也可以只截取其中的片段来使用,已达到自己的目的。好了,源码如下:

/*
* 作者:否子戈
* 代码来源:http://www.utubon.com/display-information-from-other-blogs-in-multisite/
* 使用方法:将下面的所有代码包含在一个你想打印出群站更新列表的模板中,一般是index.php或home.php
*/

require_once(ABSPATH.'/wp-config.php');

global $wpdb;

$mysql_connect = mysql_connect(DB_HOST,DB_USER,DB_PASSWORD);
if(!$mysql_connect)wp_die('Could not connect: '.mysql_error());
mysql_select_db(DB_NAME,$mysql_connect);

$db_tables = mysql_query('show tables');
$db_table_num = mysql_num_rows($db_tables);
$db_table_name = array();
for($i=0;$i<$num;$i++){
?? ?$db_table_name[] = mysql_tablename($db_tables,$i);
}//将所有表名存放在$table_name数组中;

$site_num = 1;
$post_table = array();
for($i=0;$i<$db_table_num;$i++){
?? ?if(in_array( $wpdb->prefix.$i.'_posts',$table_name )){
?? ??? ?$post_table[] = $wpdb->prefix.$i.'_posts';
?? ??? ?$site_num ++;
?? ?}
}

function showtable(){
??? global $site_num,$post_table;
??? $showtable='';
??? for($i=1;$i<$site_num;$i++){
?? ??? ?$showtable .= "SELECT * FROM {$post_table[$i]} WHERE post_status='publish' AND post_type='post' UNION ALL ";
??? }
??? return $showtable;
}

?>

<div id="mu_all_post">
??? <h3>最新博客</h3>
??? <?php
??? $sql = showtable()."SELECT * FROM wp_posts WHERE post_status='publish' AND post_type='post' ORDER BY `post_date` DESC LIMIT 0,30 ";
??? $result = mysql_query($sql,$mysql_connect);
??? $count = mysql_affected_rows();
??? for($i=0;$i<$count;$i++){
?? ???? $post_title = mysql_result($result,$i,'post_title');
?? ???? $post_date = mysql_result($result,$i,'post_date');
?? ???? $post_author_id = mysql_result($result,$i,'post_author');
?? ???? $post_date_gmt = mysql_result($result,$i,'post_date_gmt');
?? ???? $post_content = mysql_result($result,$i,'post_content');
?? ???? $post_excerpt = mysql_result($result,$i,'post_excerpt');
?? ???? $comment_count = mysql_result($result,$i,'comment_count');
?? ???? $guid = mysql_result($result,$i,'guid');
?? ???? ?><li><a href="<?php echo $guid; ?>"><?php echo $post_title; ?></a>(作者:<?php the_author_meta('user_nicename',$post_author_id); ?> 发表时间:<?php echo $post_date; ?> 评论数:<?php echo $comment_count; ?>)</li><?
??? }
??? ?>
??? <h3>最热博客</h3>
??? <?php
??? $sql = showtable()."SELECT * FROM wp_posts WHERE post_status='publish' AND post_type='post' ORDER BY `comment_count` DESC LIMIT 0,30 ";
??? $result = mysql_query($sql,$mysql_connect);
??? $count = mysql_affected_rows();
??? for($i=0;$i<$count;$i++){
?? ???? $post_title = mysql_result($result,$i,'post_title');
?? ???? $post_date = mysql_result($result,$i,'post_date');
?? ???? $post_author_id = mysql_result($result,$i,'post_author');
?? ???? $post_date_gmt = mysql_result($result,$i,'post_date_gmt');
?? ???? $post_content = mysql_result($result,$i,'post_content');
?? ???? $post_excerpt = mysql_result($result,$i,'post_excerpt');
?? ???? $comment_count = mysql_result($result,$i,'comment_count');
?? ???? $guid = mysql_result($result,$i,'guid');
?? ???? ?><li><a href="<?php echo $guid; ?>"><?php echo $post_title; ?></a>(作者:<?php the_author_meta('user_nicename',$post_author_id); ?> 发表时间:<?php echo $post_date; ?> 评论数:<?php echo $comment_count; ?>)</li><?
??? }
??? ?>
</div>

注意:这段代码使用了guid字段,我们都知道,这个字段是被我们开发者所嫌弃的字段,一般都不会用到,只有特殊情况下会调用。它记录的是文章生成时产生的绝对可以访问地址URL。如果网站域名一旦更换,这个地址就不能访问了。所以这种方法是不严谨的,为此,我又写了wordpress多站点调用全站所有子站点最新文章函数化一文,使用php数组冒泡的方法,优化了这个功能。

需要强调的是该方法纯属调用数据库的范例,你可以将其中的某些片段换成wp函数,但我并不确定你能成功,因为wordpress多站点下的数据库表及其复杂,只能通过表名的相似性进行恰当的检索。

朋友写过一篇关于调用分站点信息的文章,请看这里:http://www.chinaapp.org/wordpress-mu-data.html

好了,wordpress开通多站点之后调用全站博客信息的方法先介绍到这里,希望对你有用。<完>

已有17条评论 快速评论
  1. frustigor #730楼 回复给@726楼 2012/01/20 19:53:27 回复

    调用文章固定链接有the_permalink(),get_the_permalink()等函数,可以了解一下这些函数

  2. 中国知识网 #726楼 2012/01/15 15:24:04 回复

    文章的链接是调用的guid字段中的,请问如何调用文章的固定链接

  3. hottest review #438楼 2011/09/21 23:23:45 回复

    如何将日志的日期输出为 只显示年月日 或者月和日

  4. frustigor #433楼 回复给@428楼 2011/09/21 18:03:47 回复

    如果有问题,可以用邮件和我联系哦

  5. hottest review #428楼 回复给@427楼 2011/09/21 14:01:45 回复

    博主能否加QQ,有问题想请教一下

  6. frustigor #427楼 回复给@426楼 2011/09/21 14:00:27 回复

    恩,就是这样。了解了数据库之后再学习$wpdb,可以实现一些调用了。如果要调用全站的数据,就需要掌握数据表增加的这个规律就可以了

  7. hottest review #426楼 回复给@421楼 2011/09/21 13:55:34 回复

    我看了,每添加一个子博客会增加9个表,比如第一个子博客会添加wp_1_posts这样一个,再添加的就会生成wp_2_posts以此类推。如果想调用子博客内容分别调用子博客对应表内容就可以了。应该是这样就能实现了。

  8. frustigor #421楼 回复给@416楼 2011/09/21 09:38:57 回复

    首先请你先研究下mu的数据库表结构,之后你就知道其实每个用户和博客只是在数据表名中增加了数字,所以调用子博客的内容只是操作对应的数据库表的内容就可以了。本文只是提供一种思路参考,不是最好的方法,希望读者自己研究哦。如果你有更好的方法,也请提出来一起交流

  9. hottest review #416楼 2011/09/20 22:04:51 回复

    能不能分别调用子博客的最新内容?如果调用?

  10. frustigor #343楼 回复给@331楼 2011/09/14 14:17:06 回复

    你好,代码已经共享,请到网盘下载http://dl.dbank.com/c0r2055adb

  11. 菜鸟圈 #331楼 2011/09/10 21:22:44 回复

    麻烦也发一份源码给我。 谢谢啦。

  12. frustigor #51楼 回复给@50楼 2011/07/31 21:58:59 回复

    不用客气

  13. 坏小子 #50楼 回复给@49楼 2011/07/31 19:20:27 回复

    已经收到,谢谢!

  14. frustigor #49楼 回复给@48楼 2011/07/25 10:27:18 回复

    已经通过邮件发送给你,注意查收哈

  15. 坏小子 #48楼 2011/07/23 18:30:53 回复

    大哥,麻烦你发我一份,谢谢。

  16. frustigor #47楼 回复给@46楼 2011/07/21 12:45:16 回复

    你好,出现上面的状况可能是由于你拷贝代码后没有将代码中的字符由中文修改为英文,特别注意,复制后的双单引号修改为英语的双单引号。如还出现问题,请联系我,我直接发源码给你

  17. 坏小子 #46楼 2011/07/21 11:20:28 回复

    没有成功……syntax error, unexpected T_VARIABLE in………………new_function.php on line 33

填写个人信息,赶快回复吧!