PHP:Wordpress update_user_meta没有正确更新数组

时间:2017-07-05 08:17:49

标签: php arrays wordpress

我一直试图用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];

1 个答案:

答案 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];