<samp id="obttc"></samp>
  • <span id="obttc"><output id="obttc"></output></span>
      <ruby id="obttc"><i id="obttc"><tbody id="obttc"></tbody></i></ruby><optgroup id="obttc"><li id="obttc"></li></optgroup>

      <legend id="obttc"></legend>
      <acronym id="obttc"></acronym>

    1. 自動外鏈工具 在線排版工具 搜索引擎提交入口 wordpress主題推薦 批量打開網址工具 【老域名購買】 思享SEO導航 【網站合作】

      wordpress代碼實現相關文章的幾種方法

      535
      文章目錄
      1. 方法一:標簽相關
      2. 方法二:分類相關
      3. 方法三:標簽相關,SQL獲取
      4. 方法四:分類相關,SQL獲取
      5. 方法五:作者相關
      6. 時間效率對比

      我們在制作wordpress主題的時候經常會為文章模板添加一些相關文章的功能豐富,他們有的時候出現在側欄,有的時候出現在文章的底部相關文章這塊,當然WordPress相關文章的插件也有很多,但是為了這么個小功能去用插件就有點大材小用了,其實我們可以通過代碼完成這樣的一個小功能!

      通過增加WordPress相關文章的功能,能夠讓訪客更多的瀏覽我們的網站,從而增加PV,友好體驗!

      下面我們就羅列幾個實現WordPress相關文章的幾種方法:

      方法一:標簽相關

      首先獲取文章的所有標簽,接著獲取這些標簽下的 n 篇文章,那么這 n 篇文章就是與該文章相關的文章了?,F在可以見到的WordPress相關文章插件都是使用的這個方法。下面是實現的代碼:

      1. <ul?id="tags_related">
      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. ??$post_tag?=?$tag_list[?mt_rand(0,?count($tag_list)?-?1)?];
      12. ??//?該方法使用?query_posts()?函數來調用相關文章,以下是參數列表
      13. ??$args?=?array(
      14. ????????'tag__in'?=>?array($post_tag),
      15. ????????'category__not_in'?=>?array(NULL),??//?不包括的分類ID
      16. ????????'post__not_in'?=>?array($post->ID),
      17. ????????'showposts'?=>?6,???????????????????????????//?顯示相關文章數量
      18. ????????'caller_get_posts'?=>?1
      19. ????);
      20. ??query_posts($args);
      21. ??if?(have_posts())?{
      22. ????while?(have_posts())?{
      23. ??????the_post();?update_post_caches($posts);??>
      24. ????<li>*?<a?href="<?php?the_permalink();??>"?rel="bookmark"?title="<?php?the_title_attribute();??>"><?php?the_title();??></a></li>
      25. <?php
      26. ????}
      27. ??}
      28. ??else?{
      29. ????echo?'<li>*?暫無相關文章</li>';
      30. ??}
      31. ??wp_reset_query();
      32. }
      33. else?{
      34. ??echo?'<li>*?暫無相關文章</li>';
      35. }
      36. ?>
      37. </ul>

      使用說明:"不包括的分類ID" 指的是相關文章不顯示該分類下的文章,將同行的 NULL 改成文章分類的ID即可,多個ID就用半角逗號隔開。因為這里限制只顯示6篇相關文章,所以不管給 query_posts() 的參數 tag__in 賦多少個值,都是只顯示一個標簽下的 6 篇文章,除非第一個標簽有1篇,第二個標簽有2篇,第三個有3篇。。。。。。所以如果這篇文章有多個標簽,那么我們采取的做法是隨機獲取一個標簽的id,賦值給 tag__in 這個參數,獲取該標簽下的6篇文章。

      方法二:分類相關

      本方法是通過獲取該文章的分類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>

      方法三:標簽相關,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>

      方法四:分類相關,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>

      方法五:作者相關

      該方法是獲取該文章作者的其他文章來充當相關文章,代碼如下:

      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>

      時間效率對比

      我們將用之前的一個php代碼對以上各個相關文章代碼執行時間進行測算,以便對以上各個的方法進行效率,給你的選擇提供參考。以下是在同一篇文章中獲取6篇相關文章,以上各方法最終測算的時間如下:

      方法一:0.18067908287048 秒

      方法二:0.057158946990967 秒

      方法三:0.037126064300537 秒

      方法四:0.045628070831299 秒

      方法五:0.023991823196411 秒

      來源:本文由思享SEO博客原創撰寫,歡迎分享本文,轉載請保留出處和鏈接!
      seo培訓評論廣告

      1條評論

      昵稱*

      郵箱*

      網址

      国产学生粉嫩泬无套在线观看
      <samp id="obttc"></samp>
    2. <span id="obttc"><output id="obttc"></output></span>
        <ruby id="obttc"><i id="obttc"><tbody id="obttc"></tbody></i></ruby><optgroup id="obttc"><li id="obttc"></li></optgroup>

        <legend id="obttc"></legend>
        <acronym id="obttc"></acronym>