网上搜索了很多相关文章的代码,大部分都是抄来抄去,基本上都是一个妈生的,唯一看这带相关日志代码还比较顺眼,搜集起来备忘一下。
核心代码,加到主题的内容页
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
<?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><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><?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><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><?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><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>[ <?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.521php.com/archives/471/
程序本天成,妙手偶得之!我们只是代码的搬运工!
转载请注明:http://www.521php.com/archives/471/