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

林继 WordPress 2,137 共写了201个字 (2010-08-21 9:26:10) 没有评论 打印 扫描二维码 百度未收录

出处:Hacklog【荒野无灯weblog
无插件实现“相关日志”的显示,代码为本人修改自WordPress Related Posts插件 ,无相关日志时显示随机日志(或显示“无相关日志”,可配置)。
使用效果如本博所示。和我一样喜欢折腾的朋友拿去吧:-)
将以下代码添加到你目前使用的主题的functions.php文件的最后一个?>标签前面即可:

  1. #######     显示相关日志    #######
  2.    $wp_rp=array(
  3.     'limit'=>6, //显示几条相关文章
  4.     'wp_rp_rss'=>true, //在rss feed 中显示相关文章
  5.     'wp_no_rp'=>'random', //无相关文章时的选择:text 或random (random为显示随机文章)
  6.     'wp_rp_date'=>true, //显示日志发布日期
  7.     'wp_rp_comments'=>true, //显示日志评论数
  8.     'wp_rp_title_tag'=>'h3',//相关日志标题标签(h2 ,h3 ,h4 ,p ,div)
  9.     );
  10. function wp_get_random_posts ($limitclause="") {
  11.     global $wpdb, $post;
  12.  
  13.     $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";
  14.     return $wpdb->get_results($q);
  15. }
  16.  
  17.     function wp_get_related_posts()
  18.     {  
  19.     global $wpdb, $post,$wp_rp;
  20.     $limit =$wp_rp["limit"];
  21.     $wp_rp_title='相关日志';   
  22.     if(!$post->ID){return;}
  23.     $now = current_time('mysql', 1);
  24.     $tags = wp_get_post_tags($post->ID);
  25.  
  26.     $taglist = "'" . $tags[0]->term_id. "'";
  27.  
  28.     $tagcount = count($tags);
  29.     if ($tagcount > 1) {
  30.         for ($i = 1; $i < $tagcount; $i++) {
  31.             $taglist = $taglist . ", '" . $tags[$i]->term_id . "'";
  32.         }
  33.     }
  34.  
  35.     if ($limit) {
  36.         $limitclause = "LIMIT $limit";
  37.     }   else {
  38.         $limitclause = "LIMIT 10";
  39.     }
  40.  
  41.     $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;";
  42.  
  43.     $related_posts = $wpdb->get_results($q);
  44.  
  45.     $output = "";
  46.     //不存在相关日志则显示随机日志
  47.     if (!$related_posts)
  48.     {
  49.         if($wp_rp['wp_no_rp'] == "text")
  50.         {
  51.             $output  .= '<li>无相关日志</li>';
  52.         }
  53.         else
  54.  
  55.         {
  56.             if($wp_rp['wp_no_rp'] == "random")
  57.             {
  58.             $wp_no_rp_text= '随机日志';
  59.             $related_posts = wp_get_random_posts($limitclause);
  60.             }  
  61.  
  62.             $wp_rp_title = $wp_no_rp_text;
  63.         }
  64.     }
  65.  
  66.     foreach ($related_posts as $related_post )
  67.     {
  68.         $output .= '<li>';
  69.         if($wp_rp['wp_rp_date'])
  70.         {
  71.         $dateformat = get_option('date_format');
  72.         $output .= mysql2date($dateformat, $related_post->post_date) . "  //  ";
  73.         }
  74.         $output .=  '<a href="'.get_permalink($related_post->ID).'" title="'.wptexturize($related_post->post_title).'">'.wptexturize($related_post->post_title).'</a>';
  75.         if ($wp_rp["wp_rp_comments"])
  76.         {
  77.         $output .=  " (" . $related_post->comment_count . ")";
  78.         }
  79.     $output .=  '</li>';
  80.     }
  81.     $output = '<ul class="related_post">' . $output . '</ul>';
  82.     $wp_rp_title_tag = $wp_rp["wp_rp_title_tag"];
  83.  
  84.         if(!$wp_rp_title_tag)
  85.         $wp_rp_title_tag ='h3';
  86.         if($wp_rp_title != '')
  87.         $output =  '<'.$wp_rp_title_tag.'  class="related_post_title">'.$wp_rp_title .'</'.$wp_rp_title_tag.'>'. $output;
  88.     return $output;
  89. }
  90.  
  91.  
  92.     function wp_related_posts_attach($content)
  93.     {
  94.        global $wp_rp;
  95.           if (is_single()||(is_feed() && $wp_rp["wp_rp_rss"]))
  96.           {
  97.           $output = wp_get_related_posts();
  98.           $content = $content . $output;
  99.            }
  100.  
  101.     return $content;
  102.     }
  103.  
  104. add_filter('the_content', 'wp_related_posts_attach',100);
  105. #######    END     ##########

如果觉得我的文章对您有用,请随意赞赏。您的支持将鼓励我继续创作!

发表评论

电子邮件地址不会被公开。 必填项已用*标注

< >