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

如何获取含日期/时间的用户角色变更历史

获取WordPress用户角色变更历史的方法

默认情况下,WordPress不会自动记录用户角色的变更历史(含日期/时间),但可以通过以下两种方式实现需求:

一、自定义开发实现记录

通过WordPress的钩子函数,在角色发生变更时触发日志记录操作,推荐将数据存储到自定义数据库表中:

  1. 创建自定义日志表
    执行以下SQL语句(可通过phpMyAdmin或代码执行)创建存储角色变更记录的表:
CREATE TABLE wp_user_role_history (
    id INT AUTO_INCREMENT PRIMARY KEY,
    user_id INT NOT NULL,
    old_roles TEXT NOT NULL,
    new_roles TEXT NOT NULL,
    change_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (user_id) REFERENCES wp_users(ID) ON DELETE CASCADE
);
  1. 添加钩子函数记录变更
    在主题的functions.php文件或自定义插件中添加以下代码:
// 记录角色添加操作
add_action('user_role_added', 'log_user_role_change', 10, 2);
// 记录角色移除操作
add_action('user_role_removed', 'log_user_role_change', 10, 2);

function log_user_role_change($role, $user_id) {
    $user = get_userdata($user_id);
    $old_roles = implode(',', $user->roles);
    
    // 延迟获取新角色,确保变更已生效
    wp_schedule_single_event(time() + 1, 'log_final_role_change', array($user_id, $old_roles));
}

add_action('log_final_role_change', 'log_final_role_change_callback', 10, 2);
function log_final_role_change_callback($user_id, $old_roles) {
    $user = get_userdata($user_id);
    $new_roles = implode(',', $user->roles);
    
    global $wpdb;
    $table_name = $wpdb->prefix . 'user_role_history';
    
    $wpdb->insert(
        $table_name,
        array(
            'user_id' => $user_id,
            'old_roles' => $old_roles,
            'new_roles' => $new_roles,
            'change_time' => current_time('mysql')
        ),
        array('%d', '%s', '%s', '%s')
    );
}
  1. 查询角色变更记录
    使用以下代码可以获取指定用户的角色变更历史:
function get_user_role_history($user_id) {
    global $wpdb;
    $table_name = $wpdb->prefix . 'user_role_history';
    
    $results = $wpdb->get_results($wpdb->prepare(
        "SELECT * FROM $table_name WHERE user_id = %d ORDER BY change_time ASC",
        $user_id
    ));
    
    return $results;
}

// 示例:获取用户ID为1的角色历史
$role_history = get_user_role_history(1);
foreach ($role_history as $record) {
    echo "用户{$record->user_id} 在 {$record->change_time} 从【{$record->old_roles}】变更为【{$record->new_roles}】<br>";
}

二、使用现成插件

如果不想自定义开发,可以使用成熟的活动日志插件自动记录角色变更:

  • Simple History:轻量级插件,会记录用户角色变更、用户创建等操作,自带日志查看界面
  • WP Activity Log:功能更全面的日志插件,支持详细的角色变更追踪,可按用户筛选记录

这些插件会自动处理日志存储和展示,无需编写代码即可查看带时间戳的角色变更历史。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 20:55:19