我正在开发一个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会在一段时间不活动后自动注销用户。
帮帮我...... 感谢..
答案 0 :(得分:0)
我害怕你做不到。要跟踪用户活动,您应该将最后的用户操作(即浏览页面)写入自定义用户元(或自定义数据库表)。
答案 1 :(得分:0)
查看track online个用户的此WP脚本。我希望它对你有用
答案 2 :(得分:0)
Transients可能对您有用。因此,无论何时用户登录或打开页面,您都将存储一个名为“ active_user_ [user_id]”的瞬态,并且该瞬态将在大约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
并在它们返回非假值时增加计数器。
如果您的瞬变存储在Memcached或其他内存数据库中,则此方法将不起作用,因为您必须在其中精确指定瞬变键..而从MySQL可以使用通配符查询它们:{{ }}