上一篇讲解了获取子站点用户信息,这一篇为大家分享根据子站点分类名称来显示文章内容。将这一篇是磊子做项目的时候遇到的一个问题。因为客户网站的主页有很多版块,每个版块都是一个分类,而且每个子站点里面都有这些版块的分类。所以客户就要求希望可以根据子站点的分类将内容显示出来,当时第一个想到的方法就是使用SQL语句进行获取,感觉是最快的,而且是每次都是随机显示10篇指定分类文章,下面就是具体的实现方法。

实现这一方法需要对WordPress数据库进行下分析了,磊子通过分析每个站点的分类名称都在terms表里面,而里面的term_id就是每个子站点的分类ID号,但是每个站点的分类ID不一定都是一样的,所以需要考虑用分类名称来获取分类ID,这样我就有思路了。

首先在你使用主题的Funtions.php里面添加下代码:

//根据时间显示最新的分类文章内容,每个站点显示一篇内容
//$blog_id   子站点ID
//$catid   分类ID

function get_cat_blogposts_wpmu($blog_id,$catid){
    wp_reset_query();
    switch_to_blog($blog_id);
    global $post;?>
<?php
 $my_query2 = new WP_Query('showposts=1&order=desc&orderby=date&cat='.$catid);
 while ($my_query2->have_posts()) : $my_query2->the_post();
?>
 <li class="post_link"><a href="<?php the_permalink() ?>" rel="bookmark"><?php the_title(); ?></a> </li>
   <?php endwhile; ?>
   <?php restore_current_blog();

}

上面的方法是用来显示子站点文章内容,里面用到了WP_Query这个函数,如果了解这个函数的应该知道这个函数是可以直接输入分类名称来显示的。但是貌似输入中文的分类名称不管用。所以磊子只好换了方法,获取分类ID来显示文章了,大家感兴趣的可以研究下看看,然后分享一下。
接下来获取分类ID号,使用方法是

global $wpdb;

$most_viewed_cat = $wpdb->get_results("SELECT * from $wpdb->blogs");
foreach ($most_viewed_cat as $keyc => $vc)
{
	if($vc->blog_id !=1)  //排除主站点ID
	{
		$id_cat[$keyc] = $vc->blog_id;
	}
}
$newid = array_flip($id_cat);
$new_array_cat = array_rand($newid,10);
$n_post = array_filter($new_array_cat);
foreach ($n_post as $ksc => $volsc)
{
     $most_cat = $wpdb->get_results("SELECT * from wp_".$volsc."_terms where name = '最新博文'");
     foreach ($most_cat as $ks => $vs)
     {
         get_cat_blogposts_wpmu($volsc,$vs->term_id); //方法调用
     }
 }

这个方法我在之前的文章中也有提到过,只不过换了个方式来显示。将以上的代码放到你要显示的地方,比如要放到首页,那么一般在index.php文件中,这个根据大家主题的不同,文件也不大相同。可能是home.php,也有可能是front-page.php等等。如果不清楚怎么放的可以在下面留言。

PS:如果大家有什么好的方法的,不要吝啬哦,和大家分享一下。