scribble

守望的麦子

About Projects Tool Guestbook

14 Sep 2009
调用WP热评文章的SQL语句

WP调用热门评论文章的插件很多,这篇文章是为那些不希望额外使用插件就达成目的的朋友准备的。相关函数语句也都非常简单,整个安装调用过程分为2步,首先在你想要显示热评文章的地方添加以下代码:

1
2
3
4
本月热评   
<ul>   
<?php if (function_exists('simple_get_most_viewed')) { simple_get_most_viewed(7, 30); } ?>   
</ul>

其中函数 simple_get_most_viewed(7, 30); 有两个参数,第一个是要显示的文章数,第二个是时间段。

接下来是相关的SQL语句函数代码(你可以将其加入你的主题 function.php 文件中):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// 获得热评文章   
function simple_get_most_viewed($posts_num=10, $days=30){   
    global $wpdb;   
 
    $sql = "SELECT `ID` , `post_title` , `comment_count` FROM $wpdb->posts  
            WHERE `post_type` = 'post' AND TO_DAYS( now( ) ) - TO_DAYS( `post_date` ) < $days  
            ORDER BY `comment_count` DESC LIMIT 0 , $posts_num ";   
 
    $posts = $wpdb->get_results($sql);   
    $output = "";   
    foreach ($posts as $post){   
        $output .= "\n<li><a href= \"".get_permalink($post->ID)."\" rel=\"bookmark\" title=\"".$post->post_title."\" >".$post->post_title."</a> - ".$post->comment_count."个评论</li>";   
    }   
    echo $output;   
}   
// 函数 get_permalink($post->ID) 可以得到文章的URL

其中的核心代码就是这句SQL语句:

1
2
3
SELECT `ID` , `post_title` , `comment_count` FROM $wpdb->posts   
            WHERE `post_type` = 'post' AND TO_DAYS( now( ) ) - TO_DAYS( `post_date` ) < $days   
            ORDER BY `comment_count` DESC LIMIT  , $posts_num

同样我们可以衍生出更多通过留言数显示相关文章的SQL语句。

1.查找所有的日志,得到留言最多的10篇, 降序排列:

1
2
3
SELECT `ID` , `post_title` , `comment_count`   
            FROM `wp_posts` WHERE `post_type` = 'post'  
            ORDER BY `comment_count` DESC LIMIT  , 10

其中如果不加判断 post_type ,则会得到文章&页面的输出结果。

2.查找最近一个月的日志,得到留言最多的10篇:

1
2
3
SELECT `ID` , `post_title` , `comment_count`  FROM `wp_posts`   
            WHERE `post_type` = 'post'  AND TO_DAYS( now( ) ) - TO_DAYS( `post_date` ) < 31   
            ORDER BY `comment_count` DESC LIMIT  , 10

3.查找所有作者ID为2,且已经发表的日志,得到留言最多的10篇:

1
2
3
4
5
SELECT `ID` , `post_title` , `comment_count`  FROM `wp_posts`   
            WHERE `post_type` = 'post'  
            AND `post_status` = 'publish'  
            AND `post_author` = 2   
            ORDER BY `comment_count` DESC LIMIT  , 10

4.查找所有分类ID为 3 的日志,得到留言最多的10篇:

1
2
3
4
5
6
7
8
9
SELECT `ID` , `post_title` , `comment_count`  FROM `wp_posts`   
    INNER JOIN `wp_term_relationships` ON (`wp_posts`.`ID` = `wp_term_relationships`.`object_id`)   
    INNER JOIN `wp_term_taxonomy` ON (`wp_term_relationships`.`term_taxonomy_id` =  `wp_term_taxonomy`.`term_taxonomy_id`)   
    WHERE   1=1   
        AND `wp_term_taxonomy`.`taxonomy` = 'category'  
        AND `wp_term_taxonomy`.`term_id` = 3   
        AND `wp_posts`.`post_type` = 'post'  
    GROUP BY `wp_posts`.`ID`   
    ORDER BY `comment_count` DESC LIMIT  , 10

效果演示:

本月热评演示

本月热评演示

PS.Tab效果中要添加 Top posts viewed 的显示,但是通过调用 post view 插件的数据导致留言处不能与文章正常匹配,目前不知道如何解决……

Til next time,
Jason at 00:00

scribble

About Projects Tool Guestbook