You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在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条

测试方法

你可以登录任意用户后,通过以下方式验证:

  1. 进入WordPress后台的用户编辑页面,查看自定义字段里是否有drick_login_times字段,里面会存储序列化后的数组
  2. 用代码测试获取记录:
// 替换为目标用户ID
$user_id = 1;
$login_records = get_user_meta($user_id, 'drick_login_times', true);
print_r($login_records);

内容的提问来源于stack exchange,提问作者Ultra Graphics

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:25:25