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. 饭哆说:

    非常有用的说

说点什么吧




wireless earbuds moscow mule mugs bluetooth speakers waterproof camera best wireless earbuds best vacuum cleaner best drugstore foundation best dishwasher best waist trainer wireless headphones best vacuum 0594918 best bluetooth earbuds waterproof bluetooth speaker tattoo cover up action camera
订阅本站