北极寒流 » 网络资源 » wordpress相关文章代码强力版 - 2012.04.12

wordpress相关文章代码强力版

其实本博客是有安装wordpress相关文章插件的,而且据说还是相关文章插件中最强大的YARPP。(YARPP全称:yet another related posts)对于其强大性确实不可否认,但是强大的代价也就是影响网站的载人速度。加上本人的服务器实在不敢恭维,看来得找找性能比较好的相关文章代码来解决问题了。

网上搜索了很多相关文章的代码,大部分都是抄来抄去,基本上都是一个妈生的,唯一看这带相关日志代码还比较顺眼,搜集起来备忘一下。

wordpress相关文章核心代码

<?php
$post_tags=wp_get_post_tags($post->ID); //如果存在tag标签,列出tag相关文章
$pos=1;
if($post_tags) {
foreach($post_tags as $tag) $tag_list[] .= $tag->term_id;
$args = array(
'tag__in' => $tag_list,
'category__not_in' => array(NULL), // 不包括的分类ID,可以把NULL换成分类ID
'post__not_in' => array($post->ID),
'showposts' => 0, // 显示相关文章数量
'caller_get_posts' => 1,
'orderby' => 'rand'
);
query_posts($args);
if(have_posts()):while (have_posts()&&$pos<=10) : the_post(); update_post_caches($posts); ?>
<li><span class="title"><a href="<?php the_permalink(); ?>" rel="bookmark" title="<?php the_title_attribute(); ?>"><?php if(get_the_title())the_title();else the_time('Y-m-d'); ?></a></span> <span class="meta"><?php the_time('Y-m-d') ?> <?php the_category('/','') ?></span></li>
<?php $pos++;endwhile;wp_reset_query();endif; ?>
<?php } //end of rand by tags ?>
<?php if($pos<=10): //如果tag相关文章少于10篇,那么继续以分类作为相关因素列出相关文章
$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' => 0,
'caller_get_posts' => 1,
'orderby' => 'rand'
);
query_posts($args);
if(have_posts()): while (have_posts()&&$pos<=10) : the_post(); update_post_caches($posts); ?>
<li><span class="title"><a href="<?php the_permalink(); ?>" rel="bookmark" title="<?php the_title_attribute();?>"><?php if(get_the_title())the_title();else the_time('Y-m-d'); ?></a></span> <span class="meta"><?php the_time('Y-m-d');if($options['tags']):the_tags('', '/', '');endif; ?></span></li>
<?php $pos++;endwhile;wp_reset_query();endif; ?>
<?php } endif; //end of rand by category ?>
<?php if($pos<=10){ //如果上面两种相关都还不够10篇文章,再随机挑几篇凑成10篇 ?>
<?php query_posts('showposts=10&orderby=rand');while(have_posts()&&$pos<=10):the_post(); ?>
<li><span class="title"><a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>"><?php if(get_the_title())the_title();else the_time('Y-m-d') ?></a></span> <span class="meta">[ <?php the_category('/',''); ?>]</span></li>
<?php $pos++;endwhile;wp_reset_query();?>
<?php } ?>

wordpress相关文章思路讲解

1、相关性:标签(tag)相关+分类(category)相关。

我们采用这种相关方法,因为无法做到向搜索引擎一样检索全文确定相关性,我们只能通过标签、分类来进行判断。而在一般情况下,博客文章相关性也是靠这两者,有些相关文章虽然靠这两者不能被放出,但我们放出的肯定都是相关文章。

2、标签相关文章详解:

我们先用$post_tags=wp_get_post_tags($post->ID);获取文章的标签列表(数组),再通过foreach($post_tags as $tag) $tag_list[] .= $tag->term_id;获取这些标签的ID,并将这些ID组成数组$tag_list。使用函数query_posts();查询这些标签ID下的文章,通过while()显示出来。

3、分类相关文章详解

我们通过获取当前文章所在的分类,将这些分类中的文章挑选一些出来呈现给读者。其原理和上文标签相关文章一样。

4、文章数量的控制

为了让不同的页面在格式上很整齐,我们规定这些相关文章是随机排列的,不是按某项属性顺序或倒序排列,我们使用了'orderby' => 'rand'。

同时为了让文章列表显得完整,我们希望每篇文章后的这些相关文章列表都输出10条。我们的思路是:用一个计数参数,其初始值为0,每显示一篇文章就增加1($pos++)。当$pos>=10时就不再输出文章。

如果根据标签而列出的文章数已经超过十篇,那么不再执行下面的分类和随机相关,如果不到10篇,则继续执行;当执行完分类相关之后仍然还不到10篇,我们调用一些随机文章,直到满10篇为止。

资料来源:http://www.utubon.com/391

发表评论 【登录·注册】

所有留言都会被审核,请勿发布垃圾评论!

(必填)*