如何在数据库中保存用户最后登出时间?WordPress代码问题排查
代码失效原因
代码无法正常运行核心是WordPress钩子触发时机与API调用逻辑不匹配:
wp_logout钩子触发时,WordPress已经完成当前用户的会话清理、登录态销毁流程,此时调用get_current_user_id()无法获取到正在执行登出操作的用户ID,默认返回0,update_user_meta找不到ID为0的有效用户,自然不会写入有效数据- 你在挂载钩子时声明了要接收1个传入参数,但自定义的
user_last_logout函数没有设置形参接收参数——wp_logout钩子本身会把正在登出的用户ID作为第一个参数传入回调,你没有使用这个不受登录态影响的准确数据源。
正确实现方案
直接从钩子传入的参数获取登出用户ID,不要在回调里依赖当前登录态获取用户ID,参考代码如下:
function user_last_logout( $user_id ){ // 校验用户ID有效性,避免异常场景下写入脏数据 if ( empty( $user_id ) || ! get_user_by( 'id', $user_id ) ) { return; } update_user_meta( $user_id, '_last_logout', time() ); } add_action( 'wp_logout', 'user_last_logout', 10, 1 );
补充说明:如果站点使用了自定义登出逻辑、第三方单点登录插件,部分场景可能不会触发原生
wp_logout钩子,需要对应适配插件提供的登出钩子才能完整覆盖所有登出场景;原生WordPress核心登出流程下上述代码可正常运行。
内容的提问来源于stack exchange,提问作者Dominick Siqueira
相关产品推荐
相关产品推荐

