我爱你不是因为你是谁,而是我在你面前可以是谁。

WordPress获取最热门文章

技术文档 6810浏览 0评论

WordPress安装了wp-postviews插件后,就可以记录文章的点击数,我们可以根据这个点击数来获取最热门的文章。

wp-postviews本身已经自带了get_most_viewed这个函数,可以获取最热门的文章,并且可以在后台设置样式。功能很强大,但是在有评论翻页的文章的时候,评论翻页那里会出现问题。会出现找不到评论或者评论跳到另外一片文章的问题。

翻阅了wp-postviews的相关代码,由于我在主题中直接使用了中文工具箱,而不是通过相关插件如wp-kit-cn来实现一些增强的功能,所以决定自己加一些代码实现获取最热门文章的功能。

代码如下:

// 获取最热门文章,必需有wp-postviews插件
function get_mostviewed($limit = 5,$before = '<li>', $after = '</li>') {

global $wpdb;

$most_viewed = $wpdb->get_results("SELECT DISTINCT $wpdb->posts.*, (meta_value+0) AS views FROM $wpdb->posts LEFT JOIN $wpdb->postmeta ON $wpdb->postmeta.post_id = $wpdb->posts.ID WHERE post_date < '".current_time('mysql')."' AND post_type <> 'page' AND post_status = 'publish' AND meta_key = 'views' AND post_password = '' ORDER BY views DESC LIMIT $limit");

if($most_viewed) {
foreach ($most_viewed as $post) {
$post_views = intval($post->views);
$post_title = htmlspecialchars(stripslashes($post->post_title));
$permalink = get_permalink($post->ID);
echo $before ."<a href=\"$permalink\">$post_title </a> ($post_views)". $after;
}
}
}

同时发现中文工具箱中获取最热门评论文章的函数也会出现上面所说的类似问题,原来的代码如下:

// Get Top Commented Posts
function get_mostcommented($limit = 5) {
global $wpdb, $time_difference, $post;
$mostcommenteds = $wpdb->get_results("SELECT $wpdb->posts.ID as ID, post_title, post_name, COUNT($wpdb->comments.comment_post_ID) AS 'comment_total' FROM $wpdb->posts LEFT JOIN $wpdb->comments ON $wpdb->posts.ID = $wpdb->comments.comment_post_ID WHERE comment_approved = '1' AND post_date < '".date("Y-m-d H:i:s", (time() + ($time_difference * 3600)))."' AND post_status = 'publish' AND post_password = '' GROUP BY $wpdb->comments.comment_post_ID ORDER BY comment_total DESC LIMIT $limit");
foreach ($mostcommenteds as $post) {
$post_id = (int) $post->post_id;
$post_title = htmlspecialchars(stripslashes($post->post_title));
$comment_total = (int) $post->comment_total;
$permalink = get_permalink($post->ID);
echo "+ <a href=\"$permalink\">$post_title</a> ($comment_total)<br />";
}
}

去掉红色部分的“, $post”即可解决问题,就是这个全局变量$post在捣乱了。这个函数对$post进行了重新赋值,造成了get_comments函数获取到的post_id不正确。因而造成了在文章的评论进行翻页时,找不到评论或者评论跳到另外一片文章的问题。

wp-postviews的代码也存在类似的问题,可以同样处理以解决问题。

转载请注明:自由的风 » WordPress获取最热门文章

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址