在上一章WordPress CMS主题用户中心开发 7:author_write.php添加php处理代码 中,我们实现了用户在前台发表文章的功能。为了增加用户的粘性,以及实现wordpress CMS主题的其它一些需求,我们要为wordpress CMS主题添加用户积分体系,以此来体现用户在wordpress网站中的级别,对应相应的用户权限。
此处,WordPress主题的用户积分由几个部分组成:发表文章获取积分、发表评论获取积分、第天限制前5篇文章可以获取积分、每天前10个评论可以获取积分。即:用户积分=发表文章数+评论数。下面,我们就来完成wordpress CMS主题的用户积分体系。
第一步:每发表一篇文章增加积分
这个要在我们写好的author_write.php文件的php处理代码中添加积分代码,就是在发表文章成功的时候,我们增加该用的积分,每发表成功1篇,就增加2个积分。并限制每天只有前5篇文章可以获取积分。代码如下:
if ($status != 0){
//插入tags标签
wp_set_post_tags( $status, explode(",",$post_tags) );$num = get_today_posts($user_id);//获取今天发表文章的总数
$author_write_num = 5; //后台设置 每天获积分几次,当然这里可以直接写一个数字if($num <= $author_write_num){ //在今天发表的前 5 篇文章,记录积分
//发表成功,就记录一次当前用户的积分:积分=
$jifens_add = 2; //发表成功,就加2个积分
$jifen = get_user_meta($user_id,'user_jifen')[0] + $jifens_add;
update_user_meta($user_id,'user_jifen',$jifen);}
wp_die('文章发表成功!','文章发表成功!');
}else{
wp_die('文章发表失败!','文章发表失败!');
}
上面代码中的加粗的部分,就是我们添加的积分代码。
第二步:添加获取当前发表的文章数。
要想限制每天只有前5篇文章可以获取积分,就必须获取到每天所发表的文章数,在functions.php代码中添加如下代码:
//获取今天作者发表的文章数
function get_today_posts($uid,$post_type ='post') {global $wpdb;
$date = date("Y-m-d",time());
$sql = "SELECT COUNT(ID) FROM {$wpdb->posts} WHERE post_status='publish' AND post_author={$uid} AND post_type='post' AND (DATE_FORMAT(post_date,'%Y-%m-%d') = '{$date}')";
//return $sql;
$numposts = $wpdb->get_var($sql);
return $numposts;}
第三步:每评论一次获取积分。
这里,当用户每评论一次,就增加1个积分。并且限制每天只有前10个评论或以获取积分。在wordpress CMS主题的functions.php文件中添加如下代码:
//每天前10次评论 给 积分
function add_comment_difen( $commentdata ) {global $wpdb;
$currentUser = wp_get_current_user();
$uid = $currentUser->ID;
$sql = "SELECT comment_date FROM {$wpdb->comments} WHERE user_id={$uid} ORDER BY comment_date DESC LIMIT 1";
$last_post = $wpdb->get_var($sql);
// 间隔120秒,才能再次评论
if ( current_time('timestamp') - strtotime($last_post) < 120 ){wp_die("
");}
if(!empty($currentUser->roles)) {
$date = date("Y-m-d",time());
$sql = "SELECT COUNT(comment_ID) FROM {$wpdb->comments}
WHERE user_id={$uid} AND (DATE_FORMAT(comment_date,'%Y-%m-%d') = '{$date}')";
$num = $wpdb->get_var($sql); //获取当前用户的评论次数$author_commen_num = get_option("swt_author_commen_num"); //后台设置 每天评论获几次积分
if($num < $author_commen_num){ //如果当天评论次数 < 11$jifen = get_jefen($uid); //获取当前用户积分
update_user_meta($uid,'user_jifen',$jifen+1); //}
}
return $commentdata;}
add_action( 'preprocess_comment' , 'add_comment_difen', 20);
通过上面的3步,我们的wordpress CMS主题基本上就完成了积分体系。当然,在后期,我们还可以为积分体系添加新的成员,如:推为精品文章可以获10个积分、获取点赞就增加1个积分等等。