WordPress代码实现相关文章的两种方法

WordPress有很多实现相关⽂章功能的插件,的优点是配置简单,但是可能会对⽹站的速度造成⼀些⼩的影响,所以很多⼈还是⽐较喜欢⽤代码实现需要的功能,但是话⼜说回来了,代码实现也有缺点,就是配置复杂,不懂代码的⼈完全摸不着头脑或者只能照搬别⼈的代码,还不如⽤插件。

这⾥我整理编写了⼏种⽤实现相关⽂章的⽅法,这其中会详细标明各部分代码的作⽤,以及如何⾃定义你想要的功能,希望对⼤家有所帮助,有什么问题可以给本⽂发表评论,我会及时给你回复。开始之前,说明⼀点,以下所有⽅法输出的HTML代码格式都是以下形式,你可以根据需要进⾏修改:

<ul id="xxx">
<li>* <a title="⽂章标题1" rel="bookmark" href="⽂章链接1">⽂章标题1</a></li>
<li>* <a title="⽂章标题2" rel="bookmark" href="⽂章链接2">⽂章标题2</a></li>
......
</ul>

⽅法⼀:标签相关

⾸先获取⽂章的所有标签,接着获取这些标签下的 n 篇⽂章,那么这 n 篇⽂章就是与该⽂章相关的⽂章了。现在可以见到的WordPres s相关⽂章插件都是使⽤的这个⽅法。下⾯是实现的代码:

<ul id="tags_related">
<?php
$post_tags = wp_get_post_tags($post->ID); if ($post_tags) {
foreach ($post_tags as $tag)
{
// 获取标签列表
$tag_list[] .= $tag->term_id;
}
// 随机获取标签列表中的⼀个标签
$post_tag = $tag_list[ mt_rand(0, count($tag_list) - 1) ];
// 该⽅法使⽤ query_posts() 函数来调⽤相关⽂章,以下是参数列表
$args = array(
'tag__in' => array($post_tag),
'category__not_in' => array(NULL), // 不包括的分类ID 'post__not_in' => array($post->ID),
'showposts' => 6,	// 显⽰相关⽂章数量'caller_get_posts' => 1
);
query_posts($args); if (have_posts()) :
while (have_posts()) : the_post(); update_post_caches($posts); ?>
<li>* <a href="<?php the_permalink(); ?>" rel="bookmark" title="<?php the_title_attribute(
); ?>"><?php the_title(); ?></a></li>
<?php endwhile; else : ?>
<li>* 暂⽆相关⽂章</li>
<?php endif; wp_reset_query(); } ?>
</ul>

使⽤说明:”不包括的分类ID” 指的是不显⽰该分类下的⽂章,将同⾏的 NULL 改成⽂章分类的ID即可,多个ID就⽤半⾓逗号隔开。因为这⾥限制只显⽰6篇相关⽂章,所以不管给 query_posts() 的参数 tag in 赋多少个值,都是只显⽰⼀个标签下的 6 篇⽂章,除⾮第⼀个标签有1篇,第⼆个标签有2篇,第三个有3篇。。。。。。

所以如果这篇⽂章有多个标签,那么我们采取的做法是随机获取⼀个标签的id,赋值给 tag in 这个参数,获取该标签下的6篇⽂章。

⽅法⼆:分类相关

本⽅法是通过获取该⽂章的分类id,然后获取该分类下的⽂章,来达到获取相关⽂章的⽬的。

<ul id="cat_related">
<?php
$cats = wp_get_post_categories($post->ID); if ($cats) {
$cat = get_category( $cats[0] );
$first_cat = $cat->cat_ID;
$args = array(
'category__in' => array($first_cat), 'post__not_in' => array($post->ID), 'showposts' => 6,
'caller_get_posts' => 1); query_posts($args);
if (have_posts()) :
while (have_posts()) : the_post(); update_post_caches($posts); ?>
<li>* <a href="<?php the_permalink(); ?>" rel="bookmark" title="<?php the_title_attribute(
);
?>"><?php the_title(); ?></a></li>
<?php endwhile; else : ?>
<li>* 暂⽆相关⽂章</li>
<?php endif; wp_reset_query(); } ?>
</ul>

应用实例:

如果有tag,则调用相关tag文章,如果没有tag,则调用同类别的文章。