王尘宇
王尘宇

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

访客1180
上一篇讲过调用子站点的方法说明,这篇为大家分享其中一个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子站点调用

抱歉,评论功能暂时关闭!