也折腾不用WordPress Related Posts实现相关日志

无插件实现“相关日志”的显示,代码为本人修改自WordPress Related Posts插件 ,无相关日志时显示随机日志(或显示“无相关日志”,可配置)。
使用效果如本博所示。和我一样喜欢折腾的朋友拿去吧:-)
使用方法:
方法1
直接下载:

上传到你的主题目录,然后在目前使用的主题的functions.php文件的最后一个?>标签前面加上:

1
require_once('wp_related_posts_hywd.php');

或者
方法二:
将以下代码添加到你目前使用的主题的functions.php文件的最后一个?>标签前面即可:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
#######  START   ##########     显示相关日志    #################    START   #########
###########################   www.ihacklog.com    ######################################
   $wp_rp=array(
    'limit'=>6, //显示几条相关文章
    'wp_rp_rss'=>true, //在rss feed 中显示相关文章
    'wp_no_rp'=>'random', //无相关文章时的选择:text 或random (random为显示随机文章)
    'wp_rp_date'=>true, //显示日志发布日期
    'wp_rp_comments'=>true, //显示日志评论数
    'wp_rp_title_tag'=>'h3',//相关日志标题标签(h2 ,h3 ,h4 ,p ,div)
    );
function wp_get_random_posts ($limitclause="") {
    global $wpdb, $post;
       
    $q = "SELECT ID, post_title, post_content,post_excerpt, post_date, comment_count FROM $wpdb->posts WHERE post_status = 'publish' AND post_type = 'post' AND ID != $post->ID ORDER BY RAND() $limitclause";
    return $wpdb->get_results($q);
}

    function wp_get_related_posts()
    {  
    global $wpdb, $post,$wp_rp;
    $limit =$wp_rp["limit"];
    $wp_rp_title='相关日志';  
    if(!$post->ID){return;}
    $now = current_time('mysql', 1);
    $tags = wp_get_post_tags($post->ID);
   
    $taglist = "'" . $tags[0]->term_id. "'";
   
    $tagcount = count($tags);
    if ($tagcount > 1) {
        for ($i = 1; $i < $tagcount; $i++) {
            $taglist = $taglist . ", '" . $tags[$i]->term_id . "'";
        }
    }
   
    if ($limit) {
        $limitclause = "LIMIT $limit";
    }   else {
        $limitclause = "LIMIT 10";
    }
   
    $q = "SELECT p.ID, p.post_title, p.post_content,p.post_excerpt, p.post_date,  p.comment_count, count(t_r.object_id) as cnt FROM $wpdb->term_taxonomy t_t, $wpdb->term_relationships t_r, $wpdb->posts p WHERE t_t.taxonomy ='post_tag' AND t_t.term_taxonomy_id = t_r.term_taxonomy_id AND t_r.object_id  = p.ID AND (t_t.term_id IN ($taglist)) AND p.ID != $post->ID AND p.post_status = 'publish' AND p.post_date_gmt < '$now' GROUP BY t_r.object_id ORDER BY cnt DESC, p.post_date_gmt DESC $limitclause;";
   
    $related_posts = $wpdb->get_results($q);
   
    $output = "";
    //不存在相关日志则显示随机日志
    if (!$related_posts)
    {
        if($wp_rp['wp_no_rp'] == "text")
        {
            $output  .= '<li>无相关日志</li>';
        }
        else
       
        {
            if($wp_rp['wp_no_rp'] == "random")
            {
            $wp_no_rp_text= '随机日志';
            $related_posts = wp_get_random_posts($limitclause);
            }  

            $wp_rp_title = $wp_no_rp_text;
        }
    }
   
    foreach ($related_posts as $related_post )
    {
        $output .= '<li>';
        if($wp_rp['wp_rp_date'])
        {
        $dateformat = get_option('date_format');
        $output .= mysql2date($dateformat, $related_post->post_date) . "  //  ";
        }
        $output .=  '<a href="'.get_permalink($related_post->ID).'" title="'.wptexturize($related_post->post_title).'">'.wptexturize($related_post->post_title).'</a>';
        if ($wp_rp["wp_rp_comments"])
        {
        $output .=  " (" . $related_post->comment_count . ")";
        }
    $output .=  '</li>';
    }
    $output = '<ul class="related_post">' . $output . '</ul>';
    $wp_rp_title_tag = $wp_rp["wp_rp_title_tag"];

        if(!$wp_rp_title_tag)
        $wp_rp_title_tag ='h3';
        if($wp_rp_title != '')
        $output =  '<'.$wp_rp_title_tag.'  class="related_post_title">'.$wp_rp_title .'</'.$wp_rp_title_tag.'>'. $output;
    return $output;
}

   
    function wp_related_posts_attach($content)
    {
       global $wp_rp;
          if (is_single()||(is_feed() && $wp_rp["wp_rp_rss"]))
          {
          $output = wp_get_related_posts();
          $content = $content . $output;
           }
   
    return $content;
    }

add_filter('the_content', 'wp_related_posts_attach',100);
#######    END     ##########     显示相关日志    #################    END   #########
###########################   www.ihacklog.com    ######################################

喜欢这篇文章吗?

请订阅本站 RSS feed填写您的邮件地址,订阅我们的精彩内容:

相关日志

回复 (43)

  1. yangod  / 回复

    这个可以用在3.2上吗?还有能实现图文并茂吗?我会用这个取代无觅插件

  2. yangod  / 回复

    可以实现图文并茂吗?

  3. 速强的翅膀  / 回复

    按博主的方法2做了,成功!谢谢

  4. liveme  / 回复

    有空可以折腾一下,最近无觅的网络总是无法访问,还不知道他们出什么问题

  5. 天鹰剑  / 回复

    非常感谢,我成功了,希望大哥能教我如何玩转自己的WP博客

  6. 浩子  / 回复

    压缩包坏了……

  7. Twikker  / 回复

    终于找到了这段能用的代码,老大,来,天崩地裂啵一个。。。哈哈

  8. PP  / 回复

    没有functions.php咋整哦 :?:

  9. ylsnuha  / 回复

    请问怎样让文章下面左边显示相关日志,右边显示随机日志呢。。。因为这个代码也有随机日志的函数,怎样直接调用使用吗?

    • 荒野无灯  / 回复

      直接调用不行的,要自己写一个函数吧。

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      function output_random_posts($limitclause)
      {
                  $related_posts = wp_get_random_posts($limitclause);
      foreach ($related_posts as $related_post )
          {
              $output .= '<li>';

              $dateformat = get_option('date_format');
              $output .= mysql2date($dateformat, $related_post->post_date) . "  //  ";

              $output .=  '<a href="'.get_permalink($related_post->ID).'" title="'.wptexturize($related_post->post_title).'">'.wptexturize($related_post->post_title).'</a>';

              $output .=  " (" . $related_post->comment_count . ")";

          $output .=  '</li>';
          }
          $output = '<h3>随机日志</h3><ul class="related_post">' . $output . '</ul>';
      echo $output;
      }

      //调用 :
      output_random_posts(‘LIMIT 10’);
  10. NianQing  / 回复

    请教一下博主哈! 能否把相关日志放到指定位置? 谢谢哈!

  11. Mr.差不多  / 回复

    这个我用的Willin大叔的,很赞!! :idea:

  12. 快乐岛博客  / 回复

    按http://www.ihacklog.com/wordpress/wpskills/wordpress-related-posts-with-no-plugin.html/comment-page-3#comment-1753方法修改后出现:

    Fatal error: Call to undefined function wp_get_related_posts() in /home/yggcwx/domains/kuailedao.org/public_html/wp-content/themes/cleanblue/single.php on line 68

  13. 快乐岛博客  / 回复

    博主:
    您好!
      1.您在http://www.ihacklog.com/wordpress/wpskills/wordpress-related-posts-with-no-plugin.html/comment-page-3#comment-1753中的回复已学习:“去掉wp_related_posts_attach这个函数”,是指在您提供的方法一的php文件中删除那些字母吗?小白来了,别见怪~
      2.按方法一,我前边试验时在无相关日志时不显示随机日志,又该改哪里的什么东东呢?
      谢谢!

  14. aserlee  / 回复

    第一种方法很不错,请教一个问题,我用了之后发现“文章出处”只能排在相关文章的下面,怎么它让排在相关文章上面?也就是随意调用的问题……
    第二种如果没有相关的文章,就没有随机的文章,不好~!

    • 荒野无灯  / 回复

      对于你的第一个问题:如果你是看了《利用filter自动为wordpress文章添加版权说明》添加的版权,那么只要把其中的

      1
      add_filter ('the_content', 'add_mycopyright');

      修改为

      1
      add_filter ('the_content', 'add_mycopyright',101);

      就可以了。
      对于你提出的第二个问题:其实第一种和第二种方法都是一个方法。没有相关文章就显示随机的文章,

      1
        'wp_no_rp'=>'random',

      就行了。

  15. 快乐岛博客  / 回复

    博主啊,遇到疑难了:我喜欢方法一,但测试后无法控制相关日志的显示位置,很难看;详情已发邮件给您,请查收,烦请抽空指点一二。

    • 荒野无灯  / 回复

      呵呵,其实你的问题已经有人提出了:见 这里 :mrgreen:

  16. 快乐岛博客  / 回复

    博主你好:如果用第一种方法,如何进行各种设定?比如,按标签的相关性显示相关日志,而不是按分类?

    • 荒野无灯  / 回复

      :?: 请问你的“按标签的相关性显示相关日志”是什么 意思?还有,“按分类”是什么 意思?
      这里只是列出有相同标签的文章而已,何来分类?

  17. whoas123  / 回复

    :arrow: 相关日志我用非插件实现的效果一直不太理想,多数只显示第一个tag的相关文章

  18. pityonline  / 回复

    成功!感謝作者的劳动!

  19. 念青  / 回复

    挺好,三个问题希望帮忙解决:
    一、我的相关日志在“本文发表于 2009年11月25日,星期三 2:00 下午 | 归类:……”之上,我想让它出现在上述文字之下,不知道该怎样修改主题;
    二、加入此段代码后,后台出现错位的情况,后台登录页不居中,内页右侧跑到下方去了。大概应该修改哪里?
    三、将’wp_rp_comments’=>设为flase, 结果无效,仍然出现带括号的评论数。

    谢谢

    • 荒野无灯  / 回复

      一,第一个问题,去掉wp_related_posts_attach这个函数和

      1
      add_filter('the_content', 'wp_related_posts_attach',100);

      这一行代码,在你模板single.php中你需要的地方添加:

      1
      <?php echo wp_get_related_posts();?>

      二,第二个问题,我想这可能跟你使用本文中的代码无关,此代码并不对后台作任何操作,也没有添加相关样式信息,因此,你的后台错位很可能是你使用其它插件导致的。
      三,第三个问题,你可能添加了引号或其他东东,你用false或者 0都可以如:

      1
      'wp_rp_comments'=>false,

      1
      'wp_rp_comments'=>0,
  20. 朵未  / 回复

    嘿嘿,这个好,俺再去整下,多谢~

  21. 老饕  / 回复

    呵呵~效果不错~搬走了!

    • 荒野无灯  / 回复

      @老饕, 嗯 ,这个没有插件笨重,可配置,功能也不错。目前我一直在用。 :mrgreen:

  22. 三分微笑个人博客  / 回复

    刚才找见个精简版的代码 貌似不怎么好用 谢谢 LZ 试试这个了

  23. AnQ  / 回复

    其实也就是需要这么多内容,有tag的时候现在相关文章,没有就显示随机文章

  24. 若谷  / 回复

    又可以少一个插件了

    • 荒野无灯  / 回复

      @若谷, 其实这个和插件的原理 是差不多的。不过有些插件弄的东西太多了,如果我们只要其中部分功能,用这种方法就相当合适了。

  25. nan  / 回复

    ‘wp_rp_date’=>true,
    如果不显示怎么判断

  26. nan  / 回复

    ‘wp_rp_date’=>true, //显示日志发布日期,那如果不显示,true,应该改成啥?

  27. 叶子  / 回复

    反馈个问题,添加相关代码后单篇日志显示了相关日志,但是没有“相关日志”这样的标题,如果自行添加的话该如何操作?

    • 荒野无灯  / 回复

      @叶子, 今天更新了下代码,其实上面那个压缩包里的代码是有“相关日志”这样的标题的,上面的文章中没有加上,现在修改了。

  28. gil  / 回复

    现在流行不使用插件,咔咔!~~

  29. 万戈  / 回复

    我喜欢方法二~
    我现在用的simple tags有这功能,所以就暂时不用这个方法了

  30. licream  / 回复

    沙发。我去改用你的哈哈

发表评论 修改评论取消编辑

允许使用的标签 - 您可以在评论中使用如下的 HTML 标签以及属性。

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

 :wink:  :-|  :-x  :twisted:  :)  8-O  :(  :roll:  :-P  :oops:  :-o  :mrgreen:  :lol:  :idea:  :-D  :evil:  :cry:  8)  :arrow:  :-?  :?:  :!:

开灯