WordPress站点开启了多站点模式,想在网站首页调用所有子站点的最新文章,方法如下:

在网站的主题functions.php文件中加入下面的函数:

function get_my_last_posts($num = 10){
    //本函数用以返回wordpress多站点下获取全部站点的最新发布的文章,返回结果是一个数组,包括了post的所有字段,外加一个blog_id字段
    global $wpdb,$table_prefix;
    $sql = '';
    $mu_last_posts = array();
    $blog_post_tables = array();

    $blogs = $wpdb->get_results("SELECT * FROM {$wpdb->blogs} WHERE public='1';",ARRAY_A);//从blogs表中获取目前已经成功发布的博客信息
    foreach($blogs as $blog){
        //根据从blogs表中获取的信息,得到所有的博客文章数据表名,将表名存放在$blog_post_tables数组中
        $blog_id = $blog['blog_id'];
        if($blog_id == 1)$blog_post_table[$blog_id] = $table_prefix.'posts';//由于第一个博客数据表wp_posts中间没有数字,所以需要做排除
        else $blog_post_table[$blog_id] = $table_prefix.$blog['blog_id'].'_posts';//从$blog_post_tables数组中的表中进行下面的查询,由于这是在循环中,把整个数据库的各个posts表都查遍了
        $sql = "
            SELECT * FROM {$blog_post_table[$blog_id]}
            WHERE post_type = 'post'
            AND post_status = 'publish'
            ORDER BY post_date DESC
            LIMIT 0,{$num}
        ";
        $last_posts_in_blog[$blog_id] = $wpdb->get_results($sql,ARRAY_A);
        //将查询的文章保存在$last_posts_in_blog数组中,这是一个三维数组,键值分别是[博客ID,该博客下对应的序列数,文章的字段]
    }
    foreach($last_posts_in_blog as $blog_id => $last_posts){
        foreach($last_posts as $last_post){
            //将上面得到的三维文章数组转化为一维数组
            //将博客的ID放在增加的一个blog_id字段中,可以用get_blog_permalink($blog_id, $post_id)获取文章链接
            $last_post['blog_id'] = $blog_id;
            $mu_last_posts[] = $last_post;
        }
    }

    //下面使用冒泡法处理上面得到一个按照时间排序的数组,同时用到本函数中的$num限制要得到的文章条数
    $tmp_mu_last_posts = array();
    for($i = 0;$i < count($mu_last_posts);$i ++){
        if($i >= $num){
            //去除大于规定数字的元素
            unset($mu_last_posts[$i]);
            continue;
        }
        for($j = 0;$j < count($mu_last_posts);$j ++){
            //冒泡法排序
            if($mu_last_posts[$i]['post_date'] > $mu_last_posts[$j]['post_date']){
                $tmp_mu_last_posts = $mu_last_posts[$i];
                $mu_last_posts[$i] = $mu_last_posts[$j];
                $mu_last_posts[$j] = $tmp_mu_last_posts;
            }
        }
    }

    return $mu_last_posts;
}

function my_last_posts($num = 10,$style = 'list'){
    $mu_last_posts = get_mu_last_posts($num);
    foreach($mu_last_posts as $mu_last_post){
         >
        < php if($style == 'list'){  >
        <li><a href="< php echo get_blog_permalink($mu_last_post['blog_id'],$mu_last_post['ID']);  >">< php $mu_last_post['title'];  ></a></li>
        < php }  >
        < php
    }
}

在模板需要调用的位置,添加下面的代码即可,默认调用10条,可以通过传参数的方式修改调用数量。

<?php my_last_posts(); ?>