Skip to content

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

2009 十二月 2

无插件实现“相关日志”的显示,代码为本人修改自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填写您的邮件地址,订阅我们的精彩内容:,欢迎点击这里捐赠以支持荒野无灯转播到腾讯微博 转播到腾讯微博

作者:荒野无灯
出处:Hacklog【Hacklog】

声明: 本站遵循 署名-非商业性使用-相同方式共享 3.0 共享协议. 转载请注明转自Hacklog【荒野无灯weblog】

本文链接: http://ihacklog.com/?p=3331

54 Responses Post a comment
  1. beiz permalink
    五月 17, 2012

    用方法二安装成功了,谢谢分享哈,厉害厉害!
    还有就是想请教一下,如果要在其他地方调用,要怎么弄呢?

  2. 八月 23, 2011

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

  3. 八月 23, 2011

    可以实现图文并茂吗?

  4. 八月 3, 2011

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

  5. 二月 22, 2011

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

  6. 十二月 23, 2010

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

  7. 十一月 9, 2010

    压缩包坏了……

  8. 十月 27, 2010

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

  9. 十月 24, 2010

    没有functions.php咋整哦 :?:

  10. 九月 10, 2010

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

    • 九月 10, 2010

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

      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’);
  11. 八月 19, 2010

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

  12. 七月 2, 2010

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

  13. 五月 10, 2010

    按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

  14. 五月 9, 2010

    博主:
    您好!
      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.按方法一,我前边试验时在无相关日志时不显示随机日志,又该改哪里的什么东东呢?
      谢谢!

  15. 五月 8, 2010

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

    • 五月 9, 2010

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

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

      修改为

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

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

      1
        'wp_no_rp'=>'random',

      就行了。

  16. 五月 8, 2010

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

  17. 五月 2, 2010

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

    • 五月 3, 2010

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

  18. 四月 25, 2010

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

  19. 四月 25, 2010

    成功!感謝作者的劳动!

  20. 四月 25, 2010

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

    谢谢

    • 四月 25, 2010

      一,第一个问题,去掉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,
  21. 四月 18, 2010

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

  22. 四月 18, 2010

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

  23. 四月 17, 2010

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

  24. 四月 8, 2010

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

  25. 四月 4, 2010

    又可以少一个插件了

    • 四月 7, 2010

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

  26. 一月 19, 2010

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

  27. 一月 19, 2010

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

  28. 一月 2, 2010

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

    • 一月 5, 2010

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

  29. 十二月 2, 2009

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

  30. 十二月 2, 2009

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

  31. 十二月 2, 2009

    沙发。我去改用你的哈哈

Trackbacks & Pingbacks

  1. 用到过的wordpress资料汇总 | 小鬼的个人博客
  2. 速强的翅膀 » wordpress非插件实现显示“相关文章”的体验(图文)
  3. Hacklog » 也折腾不用WordPress Related Posts实现相关日志 | 漠天网摘
  4. 两种实现 WordPress 相关日志代码 | 浩子部落格
  5. 技术帖现身 | 嘿,我说
  6. 非插件实现Wordpress多种功能 - 小伟博客
  7. 关于近期RSS的调整 - iSouth
  8. 我采用的插件列表 « 枫之居
  9. 我采用的插件列表 | 枫之居
  10. 我采用的插件列表 | 枫之居

Leave a Reply

Allowed Tags - You may use these HTML tags and attributes in your comment.

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

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

Note: You may use basic HTML in your comments. Your email address will not be published.

Subscribe to this comment feed via RSS