应网友的要求,奉上Wordpress整站热门文章及分类热门文章的实现代码.其实这段代码也是Dream最开始也从网络搜索而来的,经过修改可以支持分类热门文章功能..实现原理是通过读取某篇文章的评论数来调用相关的文章,其实准确来说应该是"热评文章".
/*
$termId:分类目录ID,为0时是检索所有分类目录
$posts_num:显示热评文章的数量
$days:检索多少天内的热评文章
*/
// 获得热评文章
function simple_get_most_review($termId=0,$posts_num=10, $days=30){
global $wpdb;
//所有热评文章
if($termId==0){
$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 ";}
//分类热评文章
else {
$sql="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` = $termId
AND `wp_posts`.`post_type` = 'post'
GROUP BY `wp_posts`.`ID`
ORDER BY `comment_count` DESC LIMIT 0 , 10 ";}
$posts = $wpdb->get_results($sql);
$output = "";
foreach ($posts as $post){
$overPost=$post->post_title;
$output .= "\n<li><a href= \"".get_permalink($post->ID)."\" rel=\"bookmark\" title=\"".$post->post_title."\" >".$overPost."</a></li>";
}
echo $output;
}
将上面代码加到你的functions.php文件里,然后在需要调用热门文章的地方函数就行了.
所有分类热评文章:
<?php if (function_exists('simple_get_most_viewed')) {simple_get_most_review(0,10,31); } ?>
单个分类文章热评:
<?php if (function_exists(''simple_get_most_viewed')) {simple_get_most_review($category->term_id,10,31); } ?>
2010-02-05补充内容...........................................
再补充一下,今天用了下wordpress的文章定时发布功能,发现不是很好用,预发布的文章虽然不会出现在文章列表中,但还是可以通过文件的链接访问,就是说实际上文章已经发布出来了,只是没有输出并显示出来而非.
所以上面的代码也是要相应的改动改动,增加一个查询条件:
AND `wp_posts`.`post_status` <> 'future'
即分别在下面这两句查询语句后面新增一行查询条件来过滤掉未发布出来的文章.
WHERE `post_type` = 'post' AND TO_DAYS( now( ) ) - TO_DAYS( `post_date` ) < $days
和
AND `wp_posts`.`post_type` = 'post'
OK,这样在输出的热门文章里,就不会出现之前未到定时时间发布的文章了.
还是有点问题的,应该再加一个条件把博客刚生成的那个自动草稿给过滤掉。。
就是博客刚刚建好后,会有一个示例文章,即便把这篇文章删除后,根据你给的代码还是会出现在list里面。所以,应该在sql语句里再加一句判断条件。
刚试了,没发现你说的这种情况哦。
会哦,还是有问题的。。你可以看我刚弄的一个站。
http://www.wuyuezs.com/
边栏上的热点聚焦栏位。
有一个自动草稿,这篇文章其实就是我刚搭建博客时自动生成的那篇日志
还有最后一个叫测试的文章
其实这俩文章都已经被我在后台删除了,“自动草稿”那篇是彻底删除,“测试”那篇是放在了回收站。
而事实上根据你这篇日志提供的代码,这两片文章都被搜索出来啦。
我对wordpress后台数据库不是很熟,所以还是麻烦博主看一下哈。
另外,好像草稿状态的日志也被搜了出来。
估计还是sql语句有问题。
问题已经解决啦。加个判断条件就可以了。
AND `wp_posts`.`post_status` 'trash'
AND `wp_posts`.`post_title` '自动草稿'
是主题的fuctions.php还是wp的啊
主题Function
不错,搞设计的,主题都显得漂亮。
不过你说的,定时发布文章,能够能过网址访问?
这个是在作者在线时,才能看到,实际别人是看不到的?
比如这个网址:www.yimeitu.com/hzz/295.html
你在3月1日前就没法访问。可以试下。
关于定时发布的问题,多谢纠正!
不过我发现前阵子我设置的定时发布的文章到时间后并没有发布,后台显示发布失败,郁闷!
不错 呵呵 支持 楼主
来支持下博主,加油更新,多多互动O(∩_∩)O~
多谢支持...你的站不错.
我的装了十几个插件,多了人容易迷糊
很好啊,比插件方便