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(1,?10);
  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 篇文章就是與該文章相關的文章了?,F在可以見到的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
  • 我的QQ二維碼
  • 教程下載請掃二維碼
  • weinxin
馬找錢

發表評論

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