黄聪:WordPress 多站点建站教程(三):主站如何调用子站的文章内容、SQL语句如何写?

1、如果懂得编程的朋友可以SQL语句,然后加上PHP函数等操作就可以通过直接调用网站的数据库信息来实现想要达到的目的。

既然要用到SQL语句首先得对WordPress多站点数据库有一个了解,多站点激活后会多出这么几张表wp_site,wp_sitemeta,wp_blogs,wp_blog_versions其中最重要的是wp_blogs这张表,它将你创建的每一个子站点访问地址,以及创建和修改时间等等都存到了这张表里面。还有一点就是当你创建一个子站点后会多出一些中间带有数字的数据表,比如wp_2_posts,wp_2_options等等,中间的数字2其实就是你wp_blogs表里面的blog_id号。这就给我获取每个站点的数据提供了方便。

例如:


<?php
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篇,很有可能十几个用户在同时使用子站点发布文章,那这样的话有些最新文章得不到显示,所以考虑到随机显示子站点的最新文章。且每刷新一次页面都会随机显示不同的子站点文章代码如下:


<?php
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); ?>

2、而不懂编程的朋友们会想到使用插件来完成,虽然有时候能满足我们的要求,但毕竟使用插件有局限性,并不是每一款插件都适合(插件里面的代码也都是用SQL语句来完成)。比如有这么几款插件:Multisite Latest Posts
Widget(显示多站点最新文章) 和 Multisite Featured Blog
(显示多站点特色博客)和 WPMU
Recent Posts Widget(显示多站点最近文章)

时间: 2024-12-21 00:48:49

黄聪:WordPress 多站点建站教程(三):主站如何调用子站的文章内容、SQL语句如何写?的相关文章

黄聪:WordPress 多站点建站教程(六):使用WP_Query、switch_to_blog函数实现获取子站点分类中的文章

首先在你使用主题的funtions.php里面添加下代码: //根据时间显示最新的分类文章内容,每个站点显示一篇内容 //$blog_id 子站点ID //$catid 分类ID wp_reset_query(); switch_to_blog($blog_id); global $post;?> $my_query2 = new WP_Query('showposts=1&order=desc&orderby=date&cat='.$catid); while ($my_q

黄聪:WordPress 多站点建站教程(二):后台(管理网络)设置详解,如何管理子站的用户、主题、插件、设置等功能

建立好了子站,我们需要有个地方配置所有子站的主题.插件等功能,我们可以在后台看到 我的站点--管理网络 如下图: 在 管理网络--仪表盘 里面,我们可以创新用户和站点,也提供了查询功能. 要注意的是:当你新上传的主题或者插件,都需要在管理网络那边的主题和插件里面将你上传的主题和插件开启.这样才可以在你的子站点中查看的到. 黄聪:WordPress 多站点建站教程(二):后台(管理网络)设置详解,如何管理子站的用户.主题.插件.设置等功能

SQL语句教程

SQL指令 SELECT DISTINCT WHERE AND OR IN BETWEEN LIKE ORDER BY 函数 COUNT GROUP BY HAVING ALIAS 表格链接 外部链接 CONCATENATE SUBSTRING TRIM 表格处理 CREATE TABLE CONSTRAINT NOT NULL UNIQUE CHECK 主键 外来键 CREATE VIEW CREATE INDEX ALTER TABLE DROP TABLE TRUNCATE TABLE I

《黄聪:手机移动站SEO优化教程》4、如何实现手机移动网站和PC站点的自主适配

转载:http://blog.csdn.net/dog250/article/details/6896949 UDP协议疑难杂症全景解析 2011-10-22 19:26 2989人阅读 评论(4) 收藏 举报 tcp网络算法交通socket通讯 如今,但凡说精通网络的,第二个意思就是"精通TCP",事实上,很多自称精通TCP的家伙们只是精通socket接口而已,对TCP行为精通的并不多,笔者也不算精通,但绝对是中等以上水平.如果你真的精通TCP行为,那么本文不读也罢,直接发邮件给我,

黄聪:《跟黄聪学WordPress插件开发》

续<跟黄聪学WordPress主题开发>之后,又一个作品完成!<跟黄聪学Wordpress插件开发>,国内最好的Wordpress插件开发视频教程!! 目录预览: WordPress插件简介 WordPress插件的创建 认识钩子:动作(add_action与do_action) 认识钩子:带参数的动作 认识钩子:常用的动作实用案例 认识钩子:过滤器(add_filter与apply_filters) 认识钩子:带参数的过滤器 认识钩子:常用的过滤器实用案例 后台整合:创建菜单和子

黄聪:《跟黄聪学WordPress主题开发》

又一个作品完成!<跟黄聪学Wordpress主题开发>,国内最好的Wordpress主题模版开发视频教程!! 目录预览: WordPress官方源文件层式结构讲解 WordPress数据库表结构.字段详解 WordPress主题模版加载过程 WordPress主题模版开发:主题模版的安装及创建 WordPress主题模版开发:首页模版及调用options表数据 WordPress主题模版开发:如何循环输出文章列表 WordPress主题模版开发:文章元数据及多语言化 WordPress主题模版

零基础入门—网站建站教程

1. 服务器选择 不同网站类型需要的服务器配置不同,首先确认网站规模与访问人数,一般情况下,小型网站只需要选择基础配置即可.购买服务器流程可参考通过购买页面创建一台ECS实例. 想了解不同配置对应的价格,推荐使用ECS价格计算器. 云服务器ECS主要计费方式为预付(包括包年包月和按周付费)和按量付费,详细的计费规则可以参考产品计价. 阿里云1000元大礼包 2. 域名购买和备案 域名购买:输入想要的域名,未被占用即可注册,具体操作请参考域名注册流程.域名后缀通常为.COM或.CN,其它后缀介绍和

黄聪:如何删除wordpress登录之后wp_footer、wp_head自行加载的Open Sans字体、fonts.googleapis.com连接导致卡死的问题

有时候在浏览自己的WordPress网站时,发现网页长时间无响应, 卡在正在连接到fonts.googleapis.com ,如下图所示: 查看网页源码时,发现Head里面有如下一段代码: <link rel='stylesheet' id='open-sans-css' href='//fonts.googleapis.com/css?family=Open+Sans%3A300italic%2C400italic%2C600italic%2C300%2C400%2C600&subset=

黄聪:wordpress后台加载ajax.googleapis.com导致打开速度很慢的解决方案

打开wordpress后台,发现很卡,通过开发者工具看到是因为加载http://ajax.googleapis.com/ajax/libs/jqueryui/1.10.4/themes/smoothness/jquery-ui.css这个元素导致的. <link rel='stylesheet' id='jquery-ui-smoothness-css' href='http://ajax.googleapis.com/ajax/libs/jqueryui/1.10.4/themes/smoot