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(显示多站点最近文章) 

 




本文转自黄聪博客园博客,原文链接:http://www.cnblogs.com/huangcong/p/3718423.html,如需转载请自行联系原作者

相关文章
|
5天前
|
SQL 安全 关系型数据库
接上篇文章,在测试宝塔 WAF 的未授权访问漏洞时无意间还发现了一个 SQL 注入漏洞
接上篇文章,在测试宝塔 WAF 的未授权访问漏洞时无意间还发现了一个 SQL 注入漏洞,品相还不错,可执行任意 SQL 语句。 总之,吃了一惊,一个防 SQL 注入的工具居然也有 SQL 注入漏洞。 请看这段代码
437 1
|
5天前
|
SQL 数据可视化 Oracle
这篇文章教会你:从 SQL Server 移植到 DM(上)
这篇文章教会你:从 SQL Server 移植到 DM(上)
|
5天前
|
SQL 存储 网络协议
SQL Server详细使用教程
SQL Server详细使用教程
32 2
|
5天前
|
SQL 存储 关系型数据库
SQL Server详细使用教程及常见问题解决
SQL Server详细使用教程及常见问题解决
|
5天前
|
SQL Oracle Java
SQL 注入神器:jSQL Injection 保姆级教程
SQL 注入神器:jSQL Injection 保姆级教程
|
5天前
|
SQL 数据管理 关系型数据库
如何在 Windows 上安装 SQL Server,保姆级教程来了!
在Windows上安装SQL Server的详细步骤包括:从官方下载安装程序(如Developer版),选择自定义安装,指定安装位置(非C盘),接受许可条款,选中Microsoft更新,忽略警告,取消“适用于SQL Server的Azure”选项,仅勾选必要功能(不包括Analysis Services)并更改实例目录至非C盘,选择默认实例和Windows身份验证模式,添加当前用户,最后点击安装并等待完成。安装成功后关闭窗口。后续文章将介绍SSMS的安装。
15 0
|
5天前
|
SQL 数据库
sql server高级查询,看这篇文章就够了
sql server高级查询,看这篇文章就够了
38 0
|
5天前
|
关系型数据库 MySQL PHP
wordpress博客系统详细安装部署教程
wordpress博客系统详细安装部署教程
wordpress博客系统详细安装部署教程
|
5天前
|
域名解析 存储 网络安全
WordPress外贸建站教程
这篇WordPress外贸建站教程是以实操形式写给没有任何建站基础的新手,不管你是不是技术小白,都可以轻松学会如何使用WordPress来自己建立一个实用的外贸网站,而不需要深入了解复杂的代码编程。梳理了WordPress外贸建站主要步骤,从最初的成本分析开始,然后逐步介绍域名选择和注册、虚拟主机选择、建站程序安装等关键步骤。
128 1
|
5天前
|
关系型数据库 MySQL 数据库连接
百度搜索:蓝易云【使用docker部署Wordpress教程】
这就是使用Docker部署WordPress的简洁步骤。祝你顺利完成部署!
54 5