WordPress几种实现相关文章的php代码

林继 WordPress 1,934 共写了622个字 (2012-06-24 1:45:00) 没有评论 打印 扫描二维码 百度已收录

WordPress获取相关文章的方法多种多样,一般情况下都是需要个性化才需要自己编写代码,如果不是特别需要使用摆弄模板,直接利用相关文章插件就可以了,也不需要折腾这么多了,荷荷。

方法一:标签相关

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

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

方法二:分类相关

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

  1. <ul id="cat_related_posts">
  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()) : the_post(); update_post_caches($posts); ?>
  16. <li>* <a href="<?php the_permalink(); ?>" rel="bookmark" title="<?php the_title_attribute(); ?>"><?php the_title(); ?></a></li>
  17. <?php endwhile; else : ?>
  18. <li>* 暂无相关文章</li>
  19. <?php endif; wp_reset_query(); } ?>
  20. </ul>

方法三:标签相关,SQL获取

获取相关文章的原理与方法一相似,不过在获取文章的时候是以SQL语句来直接读取数据库,从而随机获取6篇相关文章记录,而不是WordPress的函数query_posts().

  1. <ul id="tags_related_posts">
  2. <?php
  3. global $post;
  4. $post_tags = wp_get_post_tags($post->ID);
  5. if ($post_tags) {
  6.     $tag_list = '';
  7.     foreach ($post_tags as $tag)
  8.     {
  9.         // 获取标签列表
  10.         $tag_list .= $tag->term_id.',';
  11.     }
  12.     $tag_list = substr($tag_list, 0, strlen($tag_list)-1);
  13.  
  14.     $related_posts = $wpdb->get_results("
  15.         SELECT post_title, ID
  16.         FROM {$wpdb->prefix}posts, {$wpdb->prefix}term_relationships, {$wpdb->prefix}term_taxonomy
  17.         WHERE {$wpdb->prefix}term_taxonomy.term_taxonomy_id = {$wpdb->prefix}term_relationships.term_taxonomy_id
  18.         AND ID = object_id
  19.         AND taxonomy = 'post_tag'
  20.         AND post_status = 'publish'
  21.         AND post_type = 'post'
  22.         AND term_id IN (" . $tag_list . ")
  23.         AND ID != '" . $post->ID . "'
  24.         ORDER BY RAND()
  25.         LIMIT 6");
  26.         // 以上代码中的 6 为限制只获取6篇相关文章
  27.         // 通过修改数字 6,可修改你想要的文章数量
  28.  
  29.     if ( $related_posts ) {
  30.         foreach ($related_posts as $related_post) {
  31. ?>
  32.     <li><a href="<?php echo get_permalink($related_post->ID); ?>" rel="bookmark" title="<?php echo $related_post->post_title; ?>"><?php echo $related_post->post_title; ?></a></li>
  33. <?php  } } else { ?>
  34.     <li>暂无相关文章</li>
  35. <?php } } ?>
  36. </ul>

方法四:分类相关,SQL获取

获取相关文章的原理与方法二相似,不过在获取文章的时候是以SQL语句来直接读取数据库,从而随机获取6篇相关文章记录,而不是WordPress的函数query_posts().

  1. <ul id="cat_related_posts">
  2. <?php
  3. global $post;
  4. $cats = wp_get_post_categories($post->ID);
  5. if ($cats) {
  6.  
  7. $related = $wpdb->get_results("
  8. SELECT post_title, ID
  9. FROM {$wpdb->prefix}posts, {$wpdb->prefix}term_relationships, {$wpdb->prefix}term_taxonomy
  10. WHERE {$wpdb->prefix}posts.ID = {$wpdb->prefix}term_relationships.object_id
  11. AND {$wpdb->prefix}term_taxonomy.taxonomy = 'category'
  12. AND {$wpdb->prefix}term_taxonomy.term_taxonomy_id = {$wpdb->prefix}term_relationships.term_taxonomy_id
  13. AND {$wpdb->prefix}posts.post_status = 'publish'
  14. AND {$wpdb->prefix}posts.post_type = 'post'
  15. AND {$wpdb->prefix}term_taxonomy.term_id = '" . $cats[0] . "'
  16. AND {$wpdb->prefix}posts.ID != '" . $post->ID . "'
  17. ORDER BY RAND( )
  18. LIMIT 6");
  19.  
  20. if ( $related ) {
  21.     foreach ($related as $related_post) {
  22. ?>
  23.     <li>* <a href="<?php echo get_permalink($related_post->ID); ?>" rel="bookmark" title="<?php echo $related_post->post_title; ?>"><?php echo $related_post->post_title; ?></a></li>
  24. <?php  } } else { ?>
  25.     <li>* 暂无相关文章</li>
  26. <?php } }?>
  27. </ul>

方法五:作者相关

该方法是获取该文章作者的其他文章来充当相关文章,代码如下:

  1. <ul id="author_related_posts">
  2. <?php
  3. global $post;
  4. $post_author = get_the_author_meta( 'user_login' );
  5. $args = array(
  6.         'author_name' => $post_author,
  7.         'post__not_in' => array($post->ID),
  8.         'showposts' => 6,               // 显示相关文章数量
  9.         'orderby' => date,          // 按时间排序
  10.         'caller_get_posts' => 1
  11.     );
  12. query_posts($args);
  13.  
  14. if (have_posts()) :
  15.     while (have_posts()) : the_post(); update_post_caches($posts); ?>
  16. <li>* <a href="<?php the_permalink(); ?>" rel="bookmark" title="<?php the_title_attribute(); ?>"><?php the_title(); ?></a></li>
  17. <?php endwhile; else : ?>
  18.     <li>* 暂无相关文章</li>
  19. <?php endif; wp_reset_query();  ?>
  20. </ul>

如果觉得我的文章对您有用,请随意赞赏。您的支持将鼓励我继续创作!

发表评论

电子邮件地址不会被公开。 必填项已用*标注

< >