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