如何在wordpress站点中获取所有登录用户ID

时间:2015-03-19 07:44:45

标签: wordpress

我正在开发一个wordpress插件,需要获取当前登录网站的所有用户。我在尝试什么

function login($login, $user) {

    //add new option to check whos online
    $users = get_option( 'online-users', array() );

    if ( in_array( $user->ID, $users ) ){
        return;
    }

    $users[] = $user->ID;

    update_option(  'online-users', $users );
}
add_action('wp_login','login', 10, 2);


function logout() {
    $users = get_option( 'online-users', array() );

    $user_id = get_current_user_id();

    if ( ! in_array( $user_id, $users ) ){
        return;
    }

    update_option( 'online-users', array_diff( $users , array( $user_id ) ) );
}
add_action( 'clear_auth_cookie', 'logout' , 10 );

如果用户手动注销,这可以正常工作,但如果用户没有手动注销,则此逻辑失败,因为wordpress会在一段时间不活动后自动注销用户。

帮帮我...... 感谢..

3 个答案:

答案 0 :(得分:0)

我害怕你做不到。要跟踪用户活动,您应该将最后的用户操作(即浏览页面)写入自定义用户元(或自定义数据库表)。

答案 1 :(得分:0)

查看track online个用户的此WP脚本。我希望它对你有用

答案 2 :(得分:0)

如果您的WP设置将它们存储在数据库中,则

Transients可能对您有用。因此,无论何时用户登录或打开页面,您都将存储一个名为“ active_user_ [user_id]”的瞬态,并且该瞬态将在大约1分钟后过期。

然后,无论何时需要计数,您都可以计算瞬态。这只是两个警告:

  1. 除非您通过allAdminKeys查询瞬态,否则瞬态不会从数据库中消失,这是评估它们的到期时间的地方。因此,您可能需要两个查询,第一个查询从数据库中选择其名称,第二个查询将循环通过它们,对每个查询调用 var t = $('#adminKeysTable').DataTable( { "ajax": { "url": getKeysById, "dataSrc": function(json) { var rows = []; for (var i=0;i<json.keys.length;i++) { //skip rows "if a condition is met" //here just any rows except row #1 if (json.keys[i].privileges == '32') rows.push(json.keys[i]); } return rows; } }, "columns": [ { "data": null }, { "data": "name" }, { "data": "key" }, { "data": null } ], "columnDefs": [ { "targets": 0, "searchable": false, "orderable": false}, { "targets": 2, "name": "key"}, { "targets": -1, "defaultContent": '<div class="tb-btn regenerate-btn" id="btnRegenerateAdminKey" data-toggle="modal" data-target="#regenerateAdminKeyConfirmation"></div>'} ], "order": [[ 1, 'asc' ]], "paging": false, "ordering": false, "info": false, 'processing': true } ); var allAdminKeys = []; var rowData = t.rows().data(); //t is my table $.each($(rowData), function(key,value){ allAdminKeys.push(value["key"]); //filter by "Key" column }) console.log(allAdminKeys); // returning an empty array 并在它们返回非假值时增加计数器。

  2. 如果您的瞬变存储在Memcached或其他内存数据库中,则此方法将不起作用,因为您必须在其中精确指定瞬变键..而从MySQL可以使用通配符查询它们:{{ }}