在WordPress中利用get_user_meta存储数组追踪用户最近10次登录遇阻
解决WordPress用户最近10次登录记录追踪问题
我来帮你搞定这个WordPress用户登录记录追踪的问题!你的思路是对的——用用户元数据存储数组来记录最近10次登录,但大概率是数组初始化、数量限制或者钩子参数这些细节没处理好,我给你整理了完整的可运行代码,顺便拆解下关键步骤:
常见问题排查
你的代码可能踩了这些坑:
- 第一次登录时用户元数据不存在,直接操作非数组变量会报错
- 没有限制登录记录的数量,导致数组无限增长
- 钩子绑定时没指定参数数量,导致
$user对象无法正确获取
完整可运行代码
// 绑定wp_login钩子,注意要指定接受2个参数 add_action('wp_login', 'drick_track_user_login', 10, 2); function drick_track_user_login($user_login, $user) { // 定义存储登录记录的元键 $meta_key = 'drick_login_times'; // 获取现有登录记录,第三个参数true确保返回单个值(数组或false) $login_times = get_user_meta($user->ID, $meta_key, true); // 初始化数组:如果元数据不存在,就创建空数组 if (!is_array($login_times)) { $login_times = []; } // 添加最新的登录时间(用MySQL格式,可读性强;也可用current_time('timestamp')存时间戳) $latest_login = current_time('mysql'); // 把最新记录加到数组开头,这样最新的在最前面 array_unshift($login_times, $latest_login); // 限制只保留最近10条记录 if (count($login_times) > 10) { $login_times = array_slice($login_times, 0, 10); } // 更新用户元数据,WordPress会自动序列化数组 update_user_meta($user->ID, $meta_key, $login_times); }
关键细节说明
- 钩子参数:
wp_login钩子默认传递2个参数($user_login和$user对象),所以绑定钩子时第三个参数要设为2,否则$user变量会无法正确获取用户ID - 数组初始化:第一次登录时
get_user_meta会返回false,必须先转为空数组才能进行后续操作 - 记录排序:用
array_unshift把最新登录时间加到数组头部,这样后续读取时直接取数组前10个就是最近的记录 - 数量限制:每次添加新记录后用
array_slice截断数组,确保只保留最近10条
测试方法
你可以登录任意用户后,通过以下方式验证:
- 进入WordPress后台的用户编辑页面,查看自定义字段里是否有
drick_login_times字段,里面会存储序列化后的数组 - 用代码测试获取记录:
// 替换为目标用户ID $user_id = 1; $login_records = get_user_meta($user_id, 'drick_login_times', true); print_r($login_records);
内容的提问来源于stack exchange,提问作者Ultra Graphics
相关产品推荐
相关产品推荐

