搜索热词

WordPress中文社区 > 专栏 > WP终身学习者 > WordPress主题开发中用户登录时执行某个动作,且当天只执行1次的方法思路

WordPress主题开发中用户登录时执行某个动作,且当天只执行1次的方法思路

发布于09月14日 被浏览 818 次

如题所说,在WordPress主题开发过程中,我们有时会需要当用户登录的时候执行某个动作,而且限制当天这个动作只能执行1次,这样的场景最典型的一个就是,用户登录时奖励当前登录用户积分,且每天登录奖励只奖励一次。那么针对积分奖励这个问题,我们可以通过一下的一种思路去实现。

一、当用户登录时执行,那肯定是需要使用到wp_login这个钩子的,那么首先我们可以使用这个钩子创建一个自定义函数,比如:

add_action('wp_login','mx_user_login_prestige');
function mx_user_login_prestige($user_login){
    //这里面就是要具体执行的动作了
}

二、我们需要给用户创建一个自定义字段来保存用户最后一次登录的时间(可以不用单独去创建),然后每次登录的时候先去查询用户上次的登录时间,对比当天的日期,如果不等于当天的日期,然后执行相关操作就行了,参考代码如下:

//用户每天登陆奖励1个声望值
//来源:WordPress中文社区 https://www.wpshequ.cn
add_action('wp_login','mx_user_login_prestige');
function mx_user_login_prestige($user_login){
    $user_id = get_user_by('login',$user_login)->ID;//根据登录名获取当前登录用户的ID
    $latest_login = get_user_meta($user_id,'latest_login',true);//获取该用户自定义字段latest_login(最后登录时间)的值(获取到的时间格式是'Y-m-d H:i:s'),注意:如果用户是第一次登录,是没有这个自定义字段的,但是不用管他,这样写就行了
    $last_login_time = substr($latest_login,0,10);//把时间格式变换为'Y-m-d',这样方便比较是否是当天
    $today_date = date('Y-m-d');//获取当天的日期
    if($last_login_time !== $today_date){//判断,如果数据库中用户的latest_login的日期不等于当天的日期,则执行以下内容
        //这里是具体执行的代码,根据自己的情况来写就行了
    }
    update_user_meta($user_id,'latest_login',date('Y-m-d H:i:s'));//更新用户最后登录时间,如果用户首次登录,则创建自定义字段latest_login,并更新登录时间
}

注意:参考代码中使用到了一个php函数substr(),这个函数的作用就是从一个字符串中截取指定内容,substr($latest_login,0,10)就表示从字符串$latest_login(这个变量对应的是一个字符串)中从0开始截取(也就是从第一个字符),截取10个字符,这样得到的结果正好是一个日期格式,如2020-09-14。当然,如果嫌麻烦,上面代码中最后的update_user_meta($user_id,'latest_login',date('Y-m-d H:i:s'));中的date('Y-m-d H:i:s')可以直接换成date('Y-m-d'),这样保存到数据库中的直接就是日期

点赞 收藏 打赏 分享

0 条评论

无意义的评论将很快被删除,账号将被禁止发言。 发表评论 0/500
 
  1. 还没有任何评论,你来说两句吧