前几天boke112导航推出了投稿作者等级及相应福利,其中涉及到一个就是经验值排行榜,很多博主站长都想了解这个排行榜是如何实现的,所以今天boke112特意将这个实现方法分享给大家,希望集合大家的智慧进一步优化这个代码。
准备工作:
- 懂得建立自定义页面(不懂的请移步:《如何建立WordPress自定义页面》);
- 想好作者等级及经验值是如何计算的;
- 安装有统计阅读数的插件WP-PostViews,如果是其他方式统计浏览数,请自行修改第一步的代码。
多作者的WordPress站点经验值排行榜实现方法:
1、打开自定义页面(如排行榜页面)模板,找到以下代码:
- <?php the_content(); ?>
然后在它下方添加以下代码:
- <div id=“zzphbbg” style=“text-align:center;vertical-align:middle;”>
- <table width=“100%”>
- <tbody>
- <tr>
- <td width=“10%”><strong>排名</strong></td>
- <td width=“20%”><strong>作者</strong></td>
- <td width=“10%”><strong>等级</strong></td>
- <td width=“20%”><strong>经验值</strong></td>
- <td width=“10%”><strong>文章数</strong></td>
- <td width=“20%”><strong>阅读数</strong></td>
- <td width=“10%”><strong>评论数</strong></td>
- </tr>
- <?php
- global $wpdb, $post;
- $zzphb = ”;
- $zuozhe_viewed = $wpdb->get_results(“SELECT count($wpdb->posts.ID) as wzzs,sum($wpdb->posts.comment_count) as plzs, sum(meta_value+0) AS ydzs,(count($wpdb->posts.ID)*100+sum(meta_value+0)+sum($wpdb->posts.comment_count)*5) as jyz,$wpdb->posts.post_author as userid FROM $wpdb->posts LEFT JOIN $wpdb->postmeta ON $wpdb->postmeta.post_id = $wpdb->posts.ID WHERE post_author!=’1′ AND post_status = ‘publish’ AND meta_key = ‘views’ AND post_password = ” GROUP BY userid order by jyz DESC”);
- if($zuozhe_viewed) {
- $i = 0;
- foreach ($zuozhe_viewed as $post) {
- $zzwzs = $post->wzzs;
- $zzydzs = $post->ydzs;
- $zzplzs = $post->plzs;
- $zzjyz = $post->jyz;
- $i++;
- $zznc = get_the_author_meta( ‘nickname’, $post->userid);
- if($zzjyz>=1 && $zzjyz<10000){$zzdj='<a class=“vip1” title=“作者等级LV.1为基础级,距离下级还差’.(10000-$zzjyz).'”></a><br/>【基础级】’;}
- if($zzjyz>=10000 && $zzjyz<100000){$zzdj='<a class=“vip2” title=“作者等级LV.2为入门级,距离下级还差’.(100000-$zzjyz).'”></a><br/>【入门级】’;}
- if($zzjyz>=100000 && $zzjyz<500000){$zzdj='<a class=“vip3” title=“作者等级LV.3为职业级,距离下级还差’.(500000-$zzjyz).'”></a><br/>【职业级】’;}
- if($zzjyz>=500000 && $zzjyz<1000000){$zzdj='<a class=“vip4” title=“作者等级LV.4为大神级,距离下级还差’.(1000000-$zzjyz).'”></a><br/>【大神级】’;}
- if($zzjyz>=1000000){$zzdj='<a class=“vip5” title=“作者等级LV.5为宗师级”></a><br/>【宗师级】’;}
- if ($i == 1) {
- $tt = “<i class=’novel-rank-icon novel-rank-1′></i>”;
- }
- else if ($i == 2) {
- $tt = “<i class=’novel-rank-icon novel-rank-2′></i>”;
- }
- else if ($i == 3) {
- $tt = “<i class=’novel-rank-icon novel-rank-3′></i>”;
- }
- else {
- $tt = $i;
- }
- $zzphb .= “<tr><td width=’10%’><span class=’fz16 red’>$tt</span></td>
- <td width=’20%’><span class=’fz16 red’><a href=\”https://boke112.com/page/author/”. $post->userid . “/\” title=\””. $zznc . “在boke112导航的专栏\” rel=\”nofollow\” target=\”_blank\”>$zznc</a></span></td>
- <td width=’10%’><span class=’fz16 red’>$zzdj</span></td>
- <td width=’20%’><span class=’fz16 red’>$zzjyz</span></td>
- <td width=’10%’><span class=’fz16 red’>$zzwzs</span></td>
- <td width=’20%’><span class=’fz16 red’>$zzydzs</span></td>
- <td width=’10%’><span class=’fz16 red’>$zzplzs</span></td>
- </tr>”;
- }
- }
- echo $zzphb;
- ?>
- </tbody>
- </table>
- </div>
其中,代码中的作者等级及对应的经验值请自行修改,经验值计算代码:
- (count($wpdb->posts.ID)*100+sum(meta_value+0)+sum($wpdb->posts.comment_count)*5)
的意思是作者文章总数乘以100加上文章总阅读加上文章总评论数乘以5。其中的倍数或经验值计算方式请自行修改。
2、添加以下CSS代码到主题的style.css文件中
- #zzphbbg td{text-align:center;vertical-align:middle;}
- .novel-rank-icon {
- width: 17px;
- height: 22px;
- display: inline–block;
- background-image: url(images/zzdj.png);
- background-repeat: no-repeat;
- }
- .novel-rank-icon.novel-rank-1 {
- background-position: 0 0;
- }
- .novel-rank-icon.novel-rank-2 {
- background-position: 0 –36px;
- }
- .novel-rank-icon.novel-rank-3 {
- background-position: 0 –74px;
- }
- /*作者VIP等级显示功能的样式*/
- .vp,.vip,.vip1,.vip2,.vip3,.vip4,.vip5,.vip6,.vip7{background: url(images/vip.png) no-repeat;display: inline–block;overflow: hidden;border: none;}
- .vp{background-position:-515px –2px;width: 16px;height: 16px;margin-bottom: –3px;}
- .vp:hover{background-position:-515px –22px;width: 16px;height: 16px;margin-bottom: –3px;}
- .vip{background-position:-494px –3px;width: 16px;height: 14px;margin-bottom: –2px;}
- .vip:hover{background-position:-494px –22px;width: 16px;height: 14px;margin-bottom: –2px;}
- .vip1{background-position:-1px –2px;width: 46px;height: 14px;margin-bottom: –1px;}
- .vip1:hover{background-position:-1px –22px;width: 46px;height: 14px;margin-bottom: –1px;}
- .vip2{background-position:-63px –2px;width: 46px;height: 14px;margin-bottom: –1px;}
- .vip2:hover{background-position:-63px –22px;width: 46px;height: 14px;margin-bottom: –1px;}
- .vip3{background-position:-144px –2px;width: 46px;height: 14px;margin-bottom: –1px;}
- .vip3:hover{background-position:-144px –22px;width: 46px;height: 14px;margin-bottom: –1px;}
- .vip4{background-position:-227px –2px;width: 46px;height: 14px;margin-bottom: –1px;}
- .vip4:hover{background-position:-227px –22px;width: 46px;height: 14px;margin-bottom: –1px;}
- .vip5{background-position:-331px –2px;width: 46px;height: 14px;margin-bottom: –1px;}
- .vip5:hover{background-position:-331px –22px;width: 46px;height: 14px;margin-bottom: –1px;}
- .vip6{background-position:-441px –2px;width: 46px;height: 14px;margin-bottom: –1px;}
- .vip6:hover{background-position:-441px –22px;width: 46px;height: 14px;margin-bottom: –1px;}
- .vip7{background-position:-611px –2px;width: 46px;height: 14px;margin-bottom: –1px;}
- .vip7:hover{background-position:-611px –22px;width: 46px;height: 14px;margin-bottom: –1px;}
3、将以下图片存放到主题的images文件夹中,如果不是这个文件夹,注意修改CSS代码中的图片路径哦。
总结
其实这个排行榜的实现方法就跟我们那些读者墙的实现方法差不多,通过SQL语句查询出相应的数据后展示出来即可,剩下的就是调整一下CSS样式而已。如果担心通过SQL实时查询显示数据有压力,或担心被别人刷数据,可以为这个排行榜页面增加一个验证码之类的,只有验证码正确后才可以显示。具体怎么折腾就看大家的想法了,本文只是以boke112导航的投稿作者排行榜来说明一下思路而已。