wordpress无插件随机显示相关文章

一般来说,Wordpress中的文章都会写有相关Tag,方便辨识属于什么类型文章。很多Wordpress相关文章都是根据Tag来实现,显示方式大多是以文章id来排序。这样一来,就会产生一个问题,就是只显示最近的几篇相关文章,而我想实现的,则是在相同Tag下的所有文章随机展现。

翻墙后,万能的Google帮助我找到了答案,记录下,以便日后主题更新时使用。这是一种根据文章标签随机显示指定数目相关文章的实现方法,可以控制标题长度,也可以添加不同的CSS样式。
首先打开function.php文件,添加代码:

/****************************************************
功能:根据当前文章的标签生成相关文章的连接。必须处于主循环当中。
参数:$post_id: 当前文章的ID
$count: 相关文章的数量
$text_len: 链接字符的最大长度,-1表示不限制
返回:链接的HTML代码。格式...
****************************************************/
function related_posts_tags($post_ID,$count,$text_len){
global $wpdb;
$post_tags = wp_get_post_tags($post_ID); // 获取标签列表
if ($post_tags) {
$tag_list = '';
foreach ($post_tags as $tag){
$tag_list .= $tag->term_id.',';
}
$tag_list = substr($tag_list, 0, strlen($tag_list)-1);
//根据获取到的标签随机获取指定数目的文章
$related_posts = $wpdb->get_results("
SELECT post_title, ID
FROM {$wpdb->prefix}posts, {$wpdb->prefix}term_relationships, {$wpdb->prefix}term_taxonomy
WHERE {$wpdb->prefix}term_taxonomy.term_taxonomy_id = {$wpdb->prefix}term_relationships.term_taxonomy_id
AND ID = object_id
AND taxonomy = 'post_tag'
AND post_status = 'publish'
AND post_type = 'post'
AND term_id IN (" . $tag_list . ")
AND ID != '" . $post_ID . "'
group by ID
ORDER BY RAND()
LIMIT " . $count);
$link = "";
if ( $related_posts ) {
foreach ($related_posts as $related_post) {
$p_link = get_permalink($related_post->ID);
$p_title = $related_post->post_title;
$short_title = $p_title;
//根据指定长度截断标题
if(mb_strlen($short_title,"UTF-8")>$text_len && $text_len>0 ){
$short_title = trim(mb_substr($short_title ,0,$text_len - 4,"UTF-8"));
$short_title .= '...';
}
//$text = strlen($p_title) > $text_len ? phsy_sub_str($p_title,0,$text_len): $p_title;
$link .= '

  • ' . $short_title. '
  • ';
    }
    } else {
    $link .= "暂时没有相关文章。";
    }
    return $link;
    }
    }

    然后,在需要显示相关文章的地方插入调用代码:
    调用代码可以使用DIV自定义格式。
    代码前台显示总是有问题,看样子有必要使用代码高亮插件,好烦!