WordPress无插件查询tags和categories实现相关文章

相关文章标签tags

首先获取文章的所有标签,接着获取这些标签下的 n 篇文章,那么这 n 篇文章就是与该文章相关的文章了。现在可以见到的WordPress相关文章插件都是使用的这个方法。

  1. <ul>
  2. <?php
  3. global $post;
  4. $post_tags = wp_get_post_tags($post->ID);
  5. if ($post_tags) {
  6.   foreach ($post_tags as $tag) {
  7.     // 获取标签列表
  8.     $tag_list[] .= $tag->term_id;
  9.   }
  10.  
  11.   // 随机获取标签列表中的一个标签
  12.   $post_tag = $tag_list[ mt_rand(0, count($tag_list) - 1) ];
  13.  
  14.   // 该方法使用 query_posts() 函数来调用相关文章,以下是参数列表
  15.   $args = array(
  16.         'tag__in' => array($post_tag),
  17.         'category__not_in' => array(NULL),  // 不包括的分类ID
  18.         'post__not_in' => array($post->ID),
  19.         'showposts' => 6,                           // 显示相关文章数量
  20.         'caller_get_posts' => 1
  21.     );
  22.   query_posts($args);
  23.  
  24.   if (have_posts()) {
  25.     while (have_posts()) {
  26.       the_post(); update_post_caches($posts); ?>
  27.     <li>* <a href="<?php the_permalink(); ?>" rel="bookmark" title="<?php the_title_attribute(); ?>"><?php the_title(); ?></a></li>
  28. <?php
  29.     }
  30.   }
  31.   else {
  32.     echo '<li>* 暂无相关文章</li>';
  33.   }
  34.   wp_reset_query(); 
  35. }
  36. else {
  37.   echo '<li>* 暂无相关文章</li>';
  38. }
  39. ?>
  40. </ul>

使用说明:”不包括的分类ID” 指的是相关文章不显示该分类下的文章,将同行的 NULL 改成文章分类的ID即可,多个ID就用半角逗号隔开。因为这里限制只显示6篇相关文章,所以不管给 query_posts() 的参数 tag__in 赋多少个值,都是只显示一个标签下的 6 篇文章,除非第一个标签有1篇,第二个标签有2篇,第三个有3篇。。。。。。所以如果这篇文章有多个标签,那么我们采取的做法是随机获取一个标签的id,赋值给 tag__in 这个参数,获取该标签下的6篇文章

相关文章调用分类categories

本方法是通过获取该文章的分类id,然后获取该分类下的文章,来达到获取相关文章的目的。

  1. <ul>
  2. <?php
  3. global $post;
  4. $cats = wp_get_post_categories($post->ID);
  5. if ($cats) {
  6.     $args = array(
  7.           'category__in' => array( $cats[0] ),
  8.           'post__not_in' => array( $post->ID ),
  9.           'showposts' => 6,
  10.           'caller_get_posts' => 1
  11.       );
  12.   query_posts($args);
  13.  
  14.   if (have_posts()) {
  15.     while (have_posts()) {
  16.       the_post(); update_post_caches($posts); ?>
  17.   <li>* <a href="<?php the_permalink(); ?>" rel="bookmark" title="<?php the_title_attribute(); ?>"><?php the_title(); ?></a></li>
  18. <?php
  19.     }
  20.   } 
  21.   else {
  22.     echo '<li>* 暂无相关文章</li>';
  23.   }
  24.   wp_reset_query(); 
  25. }
  26. else {
  27.   echo '<li>* 暂无相关文章</li>';
  28. }
  29. ?>
  30. </ul>

本站采用了网上的这两种方式实现了你感兴趣的文章和相关文章的功能。


发布日期:

所属分类: Wordpress, Wordpress 综合 标签: