作为一个网站的站长,有时候我们可能需要这样的一个功能:需要在首页或侧边栏展示网站的热门文章的排行榜。这种排行榜我们经常在一些门户网站看到过(如下图)。当然,在我们的WordPress CMS主题中我们同样可以实现这种排行榜功能,而且还可以进行时间限制,如:1年内热门文章排行榜、1个季度内热门文章排行榜、1个月的热门文章排行榜等。
下面,就一起来看看WordPress主题是怎样实现排行榜功能的。
第一步:为wordpress主题的文章添加记录浏览量功能
如何记录wordpress文章的用户浏览量,这个在我们发表的前面的文章中就已经介绍过了。这里,再把它贴出来:
//访问计数:必须 启用 wp_head();
function record_visitors(){
if(is_singular()){
global $post;
$post_ID = $post->ID;
if($post_ID){
$post_views = (int)get_post_meta($post_ID, 'views', true);
if(!update_post_meta($post_ID, 'views', ($post_views+1))){
add_post_meta($post_ID, 'views', 1, true);
}
}
}
}
add_action('wp_head', 'record_visitors');
注意:这段代码功能模块是添加到wp_head勾子里的,所以,我们要在wordpress主题怕header.php文件的标签内容调用wp_head()函数。否则,功能失效。
第二步:为wordpress主题添加文章排行榜功能函数。
给wordpress添加热门文章排行榜功能,这个在网上有非常多的介绍。不过,大多都是介绍如何通过wp-postview插件来实现排行榜功能。这不是本文所要介绍的。本文要介绍的是通过纯代码来实现这种功能。代码如下:
/// 函数作用:取得阅读最多的文章
//$time=1 时间1个月
function get_most_viewed_format($time=1,$limit=10, $mode = '', $term_id = 0) {
global $wpdb, $post;
$time = date("Y-m-d H:i:s",time()-$time*30*24*3600); //限制只显示最近3个月的文章
$output = '';
$mode = ($mode == '') ? 'post' : $mode;
$type_sql = ($mode != 'both') ? "AND post_type='$mode'" : '';
$term_sql = (is_array($term_id)) ? "AND $wpdb->term_taxonomy.term_id IN (" . join(',', $term_id) . ')' : ($term_id != 0 ? "AND $wpdb->term_taxonomy.term_id = $term_id" : '');
$term_sql.= $term_id ? " AND $wpdb->term_taxonomy.taxonomy != 'link_category'" : '';
$inr_join = $term_id ? "INNER JOIN $wpdb->term_relationships ON ($wpdb->posts.ID = $wpdb->term_relationships.object_id) INNER JOIN $wpdb->term_taxonomy ON ($wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id)" : '';$most_viewed = $wpdb->get_results("SELECT ID, post_date, post_title, (meta_value+0) AS views FROM $wpdb->posts LEFT JOIN $wpdb->postmeta ON ($wpdb->posts.ID = $wpdb->postmeta.post_id) $inr_join WHERE post_status = 'publish' AND post_password = '' $term_sql $type_sql AND post_date>'$time' AND meta_key = 'views' GROUP BY ID ORDER BY views DESC LIMIT $limit");
$aa = 1;
if($most_viewed) {
foreach ($most_viewed as $viewed) {
if($aa<10){ $aa = '0'.$aa; }
$post_ID = $viewed->ID;
$post_views = number_format($viewed->views);
$post_title = esc_attr($viewed->post_title);
$get_permalink = esc_attr(get_permalink($post_ID));
$output .= '
'.$aa.' '.$post_title.'
';
$aa++;
}
}else{
$output = "
N/A
\n";
}
echo $output;
}
上面的代码中,我为get_most_viewed_format()函数设置了1个时间限制参数和1个文章数量限制参数。这样,我们就可以调用一定时间内的固定数量的热门文章。把上面这段代码也在放到wordpress主题的functions.php文件中。
第三步:在前台调用排行榜。
上面2步,我们为wordpress主题实现了排行榜功能。这样,我们就可以在wordpress主题的前台页面调用这个get_most_viewed_format()函数来展示热门文章排行榜。示例如下:
调用1年内的热门文章排行榜,文章数量20篇:
get_most_viewed_format(12, 20);
调用1个季度的热门文章排行榜,10篇:
get_most_viewed_format(3, 10);
通过上面的3步,我们就为我们的wordpress CMS主题添加了热门文章排行榜的功能,并且可以灵活发调用不同时间段内的热门文章排行榜,适合不同的需求。