我一直试图用Wordpress update_user_meta和数组来解决这个问题。
这就是我目前所拥有的:
add_action('wp_login','user_last_logins', 0, 2);
function user_last_logins($login, $user) {
$user = get_user_by('login',$login);
// Get the existing meta for 'meta_key'
$meta = get_user_meta($user->ID, 'last_logins');
// Do some defensive coding - if it's not an array, set it up
if ( ! array($meta) ) {
$meta = array();
}
$month = date('m');
// Push a new value onto the array
$meta[] = $month;
// Write the user meta record with the new value in it
update_user_meta($user->ID, 'last_logins', $meta);
}
因此,每次用户登录时,都应将当前月份保存在数据库中的数组中。
首次登录数据库:
a:1:{i:0;s:2:"07";}
第二次登录数据库:
a:2:{i:0;a:1:{i:0;s:2:"07";}i:1;s:2:"07";}
正如您所看到的,它将下一次登录保存为前一个数组。
如何将其保存为原始数组或类似内容:
a:2{
i:0;s:2:"07", //First login
i:1;s2:"07" //Second login etc.
}
我尝试过更改$meta = get_user_meta($user->ID, 'last_logins');
到$meta = get_user_meta($user->ID, 'last_logins', true);
但是数据库中的更新会保存在之前的数组中。
真的很感激帮助!
更新
更改以下内容修复了阵列问题
$meta = get_user_meta($user->ID, 'last_logins');
要
$meta = get_user_meta($user->ID, 'last_logins')[0];
答案 0 :(得分:0)
当你$meta = get_user_meta($user->ID, 'last_logins');
时,你会得到:
Array( [0] => Array ( [0] => 07 ) )
然后你做$meta[] = $month;
所以你现在有:
Array( [0] => Array ( [0] => '07' ), [1] => '07')
由于get_user_meta()
返回一个内部有数组的数组,要附加另一个值,您应该调用:$meta = get_user_meta($user->ID, 'last_logins')[0];
。