在WordPress插件里记录地区、设备和时间条件,核心是“采集—存储—展示”三件事:前端或服务端拿到地区、设备类型、访问时间后,写入自定义数据库表或自定义字段,再用后台列表或报表展示。时间和人手有限时,先确保记录字段完整、时区统一、写入不拖慢页面,再考虑展示和分析。
地区、设备、时间这三类条件,落到数据上要具体:
字段定好后,存储方式也要选。自定义表适合数据量大、需要按条件筛选的场景;自定义字段(post meta或user meta)适合数据量小、和已有内容绑定的场景。判断依据是:预计记录条数和查询频率。如果每天只有几十条,自定义字段够用;如果每天上千条,建议用独立表并加索引。
地区、设备、时间的采集位置不同,可靠性也不同。
服务端采集更可靠:时间用服务器时间,设备从HTTP请求头解析,地区从IP解析。但服务端拿不到纯前端才能获取的信息,比如屏幕分辨率、浏览器时区。
前端采集更灵活:可以用JavaScript读取浏览器时区、屏幕尺寸、语言。但前端数据可以被篡改,也不能作为唯一依据。
实际做法是两者结合:服务端记录请求时间、IP、User-Agent;前端补充浏览器时区和屏幕信息,通过接口回传。如果人手有限,先做服务端采集,保证基础字段不缺失,前端补充可以后置。
写入环节最容易出问题,建议按下面顺序检查:
wp_timezone()转换。如果直接存current_time('mysql'),要明确它返回的是站点时区时间,不要和UTC混用。wp_schedule_single_event()异步写入,或者先写日志再批量入库。判断标准是:记录逻辑是否增加了页面响应时间。短例子(假设场景):一个插件需要在用户提交表单时记录地区、设备和时间。服务端在提交处理函数里获取IP、解析国家代码、读取User-Agent判断设备类型、写入UTC时间戳,存入自定义表。前端在提交前用JavaScript补充浏览器时区,一并发送。这样即使IP解析失败,时间和设备字段仍然完整。
记录的目的是能查、能看。时间和人手有限时,后台先做一个按时间倒序的列表,显示地区、设备、时间三列即可。查询条件先支持按日期范围和设备类型筛选。
如果要做统计,注意区分“记录数”和“独立访客数”。同一访客多次访问会产生多条记录,统计时要去重。去重依据可以是用户ID、Cookie标识或IP加User-Agent组合,但每种方式都有误差,需要根据实际场景选择。
另外,地区解析服务的结果可能随数据库更新而变化。如果发现同一IP在不同时间解析出不同地区,先检查解析库版本,再确认IP是否属于动态分配。这类差异属于正常现象,不必当作插件故障。
如果现在就要动手,先列出必须记录的字段清单,确认每个字段的来源和存储位置,然后写一个最小写入函数,在测试环境验证时区转换和设备解析结果是否正确。展示和统计可以等基础记录稳定后再加。