由 add_user_meta() 函数说一说 WordPress 的存储方式

作者猫斯基 2022-03-08 227 人读过

最新文章

今天有个网友问我一个问题:

// 给用户id为2的用户插入一个名称为 maometa ,数据为 ... 的数据
add_user_meta( 2, 'maometa', array('ID'=>'123') );
// 这是获取用户id为2 名称为 maometa 的数据
$maometa = get_user_meta( 2, 'maometa' );
// 这是又想给这个数组中添加了一个元素
$maometa['time'] = '2019';
// 又更新到数据表中了
update_user_meta( 2, 'maometa', $maometa );

// 问题来了:
//网友说,正常存储后应该是这样:
array( 'ID'=>123, 'time'=>2019 );
// 但是打印出来其实是这样的:
Array( [0]=>array( 'ID'=>123, 'time'=>2019 ) );

打开数据表,看看这组数据在 WordPress 中是怎么存储的。

// 执行
add_user_meta( 2, 'maometa', array('ID'=>'123'), true );
// 数据库中显示
a:1:{s:2:"ID";s:3:"123";}

解释一下:
a 后面的 1,表示一共有 1 个数组元素。
大括号里面的数据,表示这个数组元素的 keyvalue

// 执行
add_user_meta( 2, 'maometa', array('ID'=>'123','time'=>'2019'), true );
// 数据库
a:2:{s:2:"ID";s:3:"123";s:4:"time";s:4:"2019";}

同理,a 后面的 2 就是一共有 2 个数组元素了。

由此可见,WordPress 中保存数据如果是字符串,则直接保存;如果是数组,则把数组转化为字符串保存。

而且,get_user_meta() 函数获取到的也是二维数组,不可以直接 $maometa['time'] 以这样的形式添加。一般给用户添加多个用户自定义字段时,会创建多个自定义字段,而不是用数组的方式添加;因为 WordPress 没有给出对应的函数。当然,如果非要这样也可以,只是会麻烦很多。

另外,update_user_meta() 这个函数,是更新用户自定义字段的函数,这里的更新指的是将现有数据替换掉原来的数据,而不是在原来的数据基础上追加现有数据。

最后,这里有 update_user_meta() 函数的详细介绍。

本文由 猫斯基 原创发布。

著作权均归用户本人所有。独家文章转载,请联系本站管理员。获得授权后,须注明本文地址! 本文地址:https://maosiji.com/wordpress/wordpress_add_user_meta_2.html