WordPress博客文章页实现相关文章推荐的几种方法

  • A+
所属分类:wordpress建站

在网上查找了相关资料,参考了几个wordpress博客的文章,马找钱整理了有关WordPress博客文章页实现相关文章推荐的几种方法。

WordPress博客文章页实现相关文章推荐的几种方法

一、标题/缩略图样式

1.添加标题列表样式的相关文章

WordPress博客文章页实现相关文章推荐的几种方法
这种相关文章的获取思路是:Tags标签相关>同分类下文章,也就是说,先获取标签相同的文章,如果还达不到数量,就调用该分类下的文章补足。

将下面的代码添加到 single.php 要显示相关文章的位置即可:

  1. <h3>相关文章</h3>
  2. <ul class="related_posts">
  3. <?php
  4. $post_num = 8;
  5. $exclude_id = $post->ID;
  6. $posttags = get_the_tags(); $i = 0;
  7. if ( $posttags ) {
  8.     $tags = ''; foreach ( $posttags as $tag ) $tags .= $tag->term_id . ',';
  9.     $args = array(
  10.         'post_status' => 'publish',
  11.         'tag__in' => explode(',', $tags),
  12.         'post__not_in' => explode(',', $exclude_id),
  13.         'caller_get_posts' => 1,
  14.         'orderby' => 'comment_date',
  15.         'posts_per_page' => $post_num,
  16.     );
  17.     query_posts($args);
  18.     while( have_posts() ) { the_post(); ?>
  19.         <li><a rel="bookmark" href="<?php the_permalink(); ?>" title="<?php the_title(); ?>" target="_blank"><?php the_title(); ?></a></li>
  20.     <?php
  21.         $exclude_id .= ',' . $post->ID; $i ++;
  22.     } wp_reset_query();
  23. }
  24. if ( $i < $post_num ) {
  25.     $cats = ''; foreach ( get_the_category() as $cat ) $cats .= $cat->cat_ID . ',';
  26.     $args = array(
  27.         'category__in' => explode(',', $cats),
  28.         'post__not_in' => explode(',', $exclude_id),
  29.         'caller_get_posts' => 1,
  30.         'orderby' => 'comment_date',
  31.         'posts_per_page' => $post_num - $i
  32.     );
  33.     query_posts($args);
  34.     while( have_posts() ) { the_post(); ?>
  35.         <li><a rel="bookmark" href="<?php the_permalink(); ?>"  title="<?php the_title(); ?>" target="_blank"><?php the_title(); ?></a></li>
  36.     <?php $i++;
  37.     } wp_reset_query();
  38. }
  39. if ( $i  == 0 )  echo '<li>没有相关文章!</li>';
  40. ?>
  41. </ul>

PS:第四行$post_num = 8;表示显示8篇文章,请根据自己的需要修改。显示样式需要自己写css,可以参考一下下面的:

  1. .related_posts{margin-top:5px;margin-left:10px;margin-bottom:20px;height:150px;list-style-position: inside;}
  2. .related_posts li{margin-left:20px;color:#444;list-style:circle;font-size:14px;line-height:26px;padding:0 0 0 5px;float:left;width:45%;padding-right:9px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}

2、添加含缩略图的相关文章

WordPress博客文章页实现相关文章推荐的几种方法
1)在主题的 functions.php 的最后一个 ?> 前添加下面的代码:

  1. //添加特色缩略图支持
  2. if ( function_exists('add_theme_support') )add_theme_support('post-thumbnails');
  3. //输出缩略图地址 From wpdaxue.com
  4. function post_thumbnail_src(){
  5.     global $post;
  6.     if( $values = get_post_custom_values("thumb") ) {   //输出自定义域图片地址
  7.         $values = get_post_custom_values("thumb");
  8.         $post_thumbnail_src = $values [0];
  9.     } elseif( has_post_thumbnail() ){    //如果有特色缩略图,则输出缩略图地址
  10.         $thumbnail_src = wp_get_attachment_image_src(get_post_thumbnail_id($post->ID),'full');
  11.         $post_thumbnail_src = $thumbnail_src [0];
  12.     } else {
  13.         $post_thumbnail_src = '';
  14.         ob_start();
  15.         ob_end_clean();
  16.         $output = preg_match_all('/<img.+src=[\'"]([^\'"]+)[\'"].*>/i', $post->post_content, $matches);
  17.         $post_thumbnail_src = $matches [1] [0];   //获取该图片 src
  18.         if(empty($post_thumbnail_src)){ //如果日志中没有图片,则显示随机图片
  19.             $random = mt_rand(110);
  20.             echo get_bloginfo('template_url');
  21.             echo '/images/pic/'.$random.'.jpg';
  22.             //如果日志中没有图片,则显示默认图片
  23.             //echo '/images/default_thumb.jpg';
  24.         }
  25.     };
  26.     echo $post_thumbnail_src;
  27. }

PS:第四行$post_num = 4; 表示调用4篇文章,请根据自己需要修改。css样式自己写,也可参考一下:

  1. .related_posts{margin-top:5px;}
  2. .related_img{width:600px;height:210px;}
  3. .related_box{float:left;overflow:hidden;margin-top:5px;width:148px;border-right:1px #eee solid}
  4. .related_box:hover{background:#f9f9f9}
  5. .related_box .r_title{width:auto;height:72px;font-weight:400;font-size:14px;margin:0 10px;overflow:hidden;}
  6. .related_box .r_pic{margin:6px}
  7. .related_box .r_pic img{width:130px;height:100px;border:1px  solid #e1e1e1;background:#fff;padding:2px}

二、五种不同添加(仅标题)方法

1、标签相关

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

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

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

2、分类相关

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

  1. <ul id="cat_related">
  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.   if (have_posts()) {
  14.     while (have_posts()) {
  15.       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
  18.     }
  19.   }
  20.   else {
  21.     echo '<li>* 暂无相关文章</li>';
  22.   }
  23.   wp_reset_query();
  24. }
  25. else {
  26.   echo '<li>* 暂无相关文章</li>';
  27. }
  28. ?>
  29. </ul>

3、标签相关,SQL获取

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

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

4、分类相关,SQL获取

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

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

5、作者相关

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

  1. <ul id="author_related">
  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.   if (have_posts()) {
  14.     while (have_posts()) {
  15.       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
  18.     }
  19.   }
  20.   else {
  21.     echo '<li>* 暂无相关文章</li>';
  22.   }
  23.   wp_reset_query();
  24. ?>
  25. </ul>

以上就是马找钱整理总结的WordPress博客文章页实现相关文章推荐的几种方法,希望此文章可以对使用WordPress的站长有所帮助。如有问题可以在下方给我评论留言。

  • 我的微信
  • 技术咨询
  • weinxin
  • 微信公众号
  • 营销技巧分享
  • weinxin
马找钱

发表评论

:?::razz::sad::evil::!::smile::oops::grin::eek::shock::???::cool::lol::mad::twisted::roll::wink::idea::arrow::neutral::cry::mrgreen: