WordPress 多站点建站教程(五): 调用子站点最新文章显示在主站上

四月 11
磊子 2012年 8 条评论

上一篇讲过调用子站点的方法说明,这篇为大家分享其中一个WordPress多站点调用显示方法即调用子站点最新文章显示在主站上面,也就是每一个站点显示一篇最新的文章。

显示子站点的最新文章,磊子总结了两种方法。第一种是从插件分解出来的,这个方法写的比较具体,但是代码量多一点,如下:

/*

参数说明

$how_many: 要显示的多少篇最新文章

$how_long: 显示时间区间0为禁止该功能

$titleOnly:如果是true(只显示文章标题)或false(显示文章标题和站点名称)

$begin_wrap: 自定义HTML标签,如:<li>

$end_wrap: 自定义HTML标签,如:</li>

使用方法: wpmu_recent_posts_mu(5, 30, true, '<li>', '</li>'); 

>> 在过去的30天显示最新的5篇文章, 并且只显示文章标题。
*/

function wpmu_recent_posts_mu($how_many=10, $how_long=0, $titleOnly=true, $begin_wrap="\n<li>", $end_wrap="</li>") {
	global $wpdb;
	global $table_prefix;
	$counter = 0;

	//首先通过判断是否显示时间区间来分别使用不同的SQl语句
	if ($how_long > 0) {
		$blogs = $wpdb->get_col("SELECT blog_id FROM $wpdb->blogs WHERE
			public = '1' AND archived = '0' AND mature = '0' AND spam = '0' AND deleted = '0'
			AND last_updated >= DATE_SUB(CURRENT_DATE(), INTERVAL $how_long DAY)
			ORDER BY last_updated DESC");
	} else {
		$blogs = $wpdb->get_col("SELECT blog_id FROM $wpdb->blogs WHERE
			public = '1' AND archived = '0' AND mature = '0' AND spam = '0' AND deleted = '0'
			ORDER BY last_updated DESC");
	}
        //如果存在多站点ID
	if ($blogs) {

		echo "<ul>";
		foreach ($blogs as $blog) {
			// 下面是需要使用的数据表
			$blogOptionsTable = $wpdb->base_prefix.$blog."_options";
		    	$blogPostsTable = $wpdb->base_prefix.$blog."_posts";
			$options = $wpdb->get_results("SELECT option_value FROM
				$blogOptionsTable WHERE option_name IN ('siteurl','blogname')
				ORDER BY option_name DESC");
		        // 为最新文章获取标题和ID号
			if ($how_long > 0) {
				$thispost = $wpdb->get_results("SELECT ID, post_title
					FROM $blogPostsTable WHERE post_status = 'publish'
					AND ID > 1
					AND post_type = 'post'
					AND post_date >= DATE_SUB(CURRENT_DATE(), INTERVAL $how_long DAY)
					ORDER BY id DESC LIMIT 0,1");
			} else {
				$thispost = $wpdb->get_results("SELECT ID, post_title
					FROM $blogPostsTable WHERE post_status = 'publish'
					AND ID > 1
					AND post_type = 'post'
					ORDER BY id DESC LIMIT 0,1");
			}
			// 如果存在将输入内容
			if($thispost) {
				// 获取子站点文章链接
				$thispermalink = get_blog_permalink($blog, $thispost[0]->ID);
				if ($titleOnly == false) {
					echo $begin_wrap.'<a href="'
					.$thispermalink.'">'.$thispost[0]->post_title.'</a> <br/> by <a href="'
					.$options[0]->option_value.'">'
					.$options[1]->option_value.'</a>'.$end_wrap;
					$counter++;
					} else {
						echo $begin_wrap.'<a href="'.$thispermalink
						.'">'.$thispost[0]->post_title.'</a>'.$end_wrap;
						$counter++;
					}
			}
			// 对文章数量进行判断。
			if($counter >= $how_many) {
				break;
			}
		}
		echo "</ul>";
	}
}

将上面的方法放到你使用主题的Functions.php文件里面,使用方法上面已有说明。如你有十个子站点。想显示这个十个子站点的最新文章,就可以使用上面的方法

<?php wpmu_recent_posts_mu(10, 0, true, '<li>', '</li>'); ?>

使用起来是不是比较简单呢! 呵呵。

下面介绍第二种方法,磊子是这么想的,假如你有50个子站点,而你控制显示的最新文章数量只是10篇,很有可能十几个用户在同时使用子站点发布文章,那这样的话有些最新文章得不到显示,所以考虑到随机显示子站点的最新文章。且每刷新一次页面都会随机显示不同的子站点文章代码如下:

/*
 *多站点函数方法
 *
 *$showpost 每个子站点显示的最新文章数量
 *
 *使用方法 lei_multsite_recent_post(1) >> 每个子站点显示一篇最新文章
*/

function lei_multsite_recent_post($showpost)
{
 global $wpdb, $post, $table_prefix;

 //首先将所有的子站点ID号显示出来
 $most_post = $wpdb->get_col("SELECT blog_id FROM $wpdb->blogs WHERE public = '1'
 AND archived = '0'
 AND mature = '0'
 AND spam = '0'
 AND deleted = '0'
 ORDER BY last_updated DESC");
 foreach ($most_post as $key => $v)
 {
    if($v !=1 ) //除主站点ID
    {
	$b_id[$key] = $v;
    }
 }
 $newid = array_flip($b_id); //php数组函数对换键值
 $new_post_id = array_rand($newid,2);
 //php数组函数随机显示2条,这里的数值不能大于你创建子站点的个数。
 foreach ( $new_post_id as $k => $vol )
 {
    $blogPostsTable = $wpdb->base_prefix.$vol."_posts";
    $recent_post = $wpdb->get_results("SELECT * from $blogPostsTable where post_status = 'publish' and post_type = 'post' ORDER BY post_date desc LIMIT 0,$showpost");
    foreach ($recent_post as $ks => $vs)
    {
	$thispermalink = get_blog_permalink($vol, $vs->ID);
	$count1 += 1;
	echo '<li><a href="'.$thispermalink.'">'.$vs->post_title.'</a></li>';
    }
 }
}

?>

将上面的方法同样放到你使用主题的Functions.php文件里面,使用方法只要

<?php lei_multsite_recent_post(1); ?>

就可以,比上面简洁了很多。

总结一下上面这两种方法,它们的区别一种是显示子站点的一篇最新文章,可以根据时间间隔来进行显示。第二种方法是随机显示子站点的个数,然后显示每一个子站点的最新文章,数量根据自己填写的数值来显示。也是说你可以显示对每个子站点显示的最新文章数量没有限制。

大家可以根据自己的需要来选择不同的方法,对代码熟悉的也可以发挥自己的点子将代码修改的更好一些,大家多多交流。希望大家多多支持!

» 版权所有©转载必须以链接形式注明作者和原始出处:磊子的博客 » WordPress 多站点建站教程(五): 调用子站点最新文章显示在主站上
» 地址:( Ctrl+C 复制 )
» 如果对本站感兴趣,请到网站右下方订阅本站,将为你带来更多精彩和实用的文章
» 如果您对这篇文章感兴趣,不妨小小的 捐助(Donate)一下博主吧,不管多少都是对博主最大的支持和鼓励哟,博主-磊子感谢大家的支持!!!

8 条留言 其中:访客:5 条, 博主:3 条

  1. 黑色幻云说:

    大哥 问下 你这是显示 那要搜索呢 我想主站也能搜索到子站的内容 不知道有没有这方面的插件 :?:

    • 磊子说:

      还没有见过这方面的插件呢,不过你要想搜索整个站点,这需要直接操作数据库。根据表单POST或者GET的值来检索数据库。这样是可以的,可以试一下看看。

  2. 谭说:

    我想问下
    这句应该填写在哪里 我添加在 首页或者独立分类里 都整个网站不能访问

  3. iioo说:

    磊哥,弄了很久,还是心碎。

    总是不能实现不知道为什么,代码就改了文章调用的数量。两种方法都是。

    ——————————
    另外,有个问题想请教磊哥。:)

    假设一个站点有很多M的数据库,是不是“用多站点建几个子目录,将这个大数据库分成几个不同ID的数据表,就可以降低一个数据库过大的弊端了呢?比如在数据库查询效率上。

    不知道想法是否很幼稚:) :oops: 我只是凭想象了

    多谢!!!

    • 磊子说:

      在多尝试下呢!你说的数据库这个问题,其实影响并不大,当然了如果你把里面的数据库分别放到其他表里面,这样在查询效率上面肯定会有提高。毕竟查询的次数变少了!

  4. 使用方法只要
    1

    就可以,比上面简洁了很多。

    这个代码放那里呢,是放模板首页文件index.php吗,放了没用呢

    • 磊子说:

      放哪里都是可以的! 记得修改里面的参数哦! 我估计是你的参数没有填好!

  5. 饭哆说:

    非常有用的说

说点什么吧




订阅本站