WordPress最近访客小工具纯代码实现方法
经过不断的努力,每天更新文章,收录越来越多,我的博客访问人数也越来越多了。
当初看到别人博客都有最近访客的效果,感觉好厉害。
我想我的博客也应该实现这样的功能,下面是我的博客效果:
多说一直有一个最近访客的小工具,显示最近访问的访客列表,比较不错,但是多说是登陆用户,有数据可以操作。
原生wp函数就无法做到了,所以只能退居其次,调用最近留言的访客,当然,每个人只会显示一次。
把下面代码放到functions.php中:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | //获取最近读者 function visitors($tim,$lim){ global $wpdb; $query="SELECT COUNT(comment_ID) AS cnt, comment_author, comment_author_url, comment_author_email FROM (SELECT * FROM $wpdb->comments LEFT OUTER JOIN $wpdb->posts ON ($wpdb->posts.ID=$wpdb->comments.comment_post_ID) WHERE comment_date > date_sub( NOW(), INTERVAL $tim day ) AND comment_author_email != '' AND post_password='' AND comment_approved='1' AND comment_type='') AS tempcmt GROUP BY comment_author_email ORDER BY comment_date DESC LIMIT $lim"; $wall = $wpdb->get_results($query); foreach ($wall as $comment) { if( $comment->comment_author_url ) $url = $comment->comment_author_url; else $url="#"; $r="rel='external nofollow'"; $tmp = "<li><a href='".$url."' ".$r." title='".$comment->comment_author." 留下".$comment->cnt."条信息'>".get_avatar($comment->comment_author_email, 40)."</a></li>"; $output .= $tmp; } echo $output ; } |
上面是核心函数,然后需要做成小工具就可以了:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | //注册 Widget 小工具 add_action('widgets_init', create_function('', 'return register_widget("mk_visitors");')); class mk_visitors extends WP_Widget { //注册一个WordPress小工具 function mk_visitors(){ $this->WP_Widget('mk_visitors', '读者墙', array( 'description' => '显示近期评论最多的读者头像' )); } //前端显示小工具 function widget($args, $instance) { extract($args, EXTR_SKIP); echo $before_widget; $title = apply_filters('widget_name', $instance['title']); $limit = $instance['limit']; $timer = $instance['timer']; echo $before_title.$title.$after_title; echo '<ul class="visitors">'; echo visitors($tim=$timer, $lim=$limit ); echo '</ul><div class="clear"></div>'; echo $after_widget; } //保存小工具设置选项 function update($new_instance, $old_instance) { $instance = $old_instance; $instance['title'] = strip_tags($new_instance['title']); $instance['limit'] = strip_tags($new_instance['limit']); $instance['timer'] = strip_tags($new_instance['timer']); return $instance; } //后台小工具表单 function form($instance) { $instance = wp_parse_args( (array) $instance, array( 'title' => '最近读者', 'limit' => '15', 'timer' => '30' ) ); $title = strip_tags($instance['title']); $limit = strip_tags($instance['limit']); $timer = strip_tags($instance['timer']); echo '<p><label>标题:<input class="widefat" id="'.$this-/>get_field_id('title').'" name="'.$this->get_field_name('title').'" type="text" value="'.$instance['title'].'" /></label></p><p><label>显示数目:<input class="widefat" id="'.$this-/>get_field_id('limit').'" name="'.$this->get_field_name('limit').'" type="number" value="'.$instance['limit'].'" /></label></p><p><label>几天内:<input class="widefat" id="'.$this-/>get_field_id('timer').'" name="'.$this->get_field_name('timer').'" type="number" value="'.$instance['timer'].'" /></label></p>'; } } |
上面的说明已经很仔细了,然后就是样式的问题了,这个可以自由发挥,下面是明凯博客的样式了:
1 2 3 4 5 6 7 8 9 10 11 12 | .sidebar ul { list-style: none; margin: 1.5em 0; padding: 0; } .sidebar ul li { margin: 0; padding: 5px 0; border-top: 1px solid #ddd; color: #969696; } .visitors li{float:left;} |
其实大部分是主题自带的。
用border-radius做圆和奥运五环的的效果 SQL对汉字月份进行排序的两种方法
logo 是怎改的
主题我已经转载到www.yayacw.com