让我们分析一下您的代码及其作用。
假设数据库中存储的当前水果是“菠萝”和“橘子”,get_user_meta(2, \'fruits\', false)
将返回如下内容:
array( array( \'pineapple\', \'orange\' ) )
这是因为你通过了
false
作为第三个论点,
$single
. 函数返回一个数组,如果
$single
是
false
以及元数据字段的值,如果
$single
是
true
(
docs). 那是因为可能有多个
fruits
数据库中的条目,因此如果没有明确告知WordPress不要,WordPress将返回所有条目。
由于您只有一个存储所有水果的元密钥,因此我们不需要所有条目的列表。背景$single
到true
将导致:
array( \'pineapple\', \'orange\' )
让我们将此与您的
$data
阵列:
$data = array(
get_user_meta(2, \'fruits\', false),
\'apple\',
\'pear\',
\'peach\'
);
// results in: array( array( array( \'pineapple\', \'orange\' ) ), \'apple\', \'pear\', peach\' )
$data = array(
get_user_meta(2, \'fruits\', true),
\'apple\',
\'pear\',
\'peach\'
);
// results in: array( array( \'pineapple\', \'orange\' ), \'apple\', \'pear\', peach\' )
还是不理想!您需要的是一个包含所有水果的单个数组。这意味着您需要合并这些阵列:
$data = array_merge(
get_user_meta(2, \'fruits\', true),
array(
\'apple\',
\'pear\',
\'peach\'
)
);
// results in: array( \'pineapple\', \'orange\', \'apple\', \'pear\', peach\' )
现在,我们终于可以相应地更新用户元了:
update_user_meta(2, \'fruits\', $data , false);
还有一个
false
在第四个位置。这是什么意思?这是
$prev_value
论点如果指定,该函数仅使用指定的值更新现有元数据条目。否则,它会更新所有条目(
docs). 通过
false
与不指定任何内容相同。
但如果我们通过了怎么办$prev_value
? 让我们看看!
update_user_meta( 2, \'fruits\', $data , array( \'pineapple\', \'orange\' ) );
// does update, because that\'s what\'s in the database.
update_user_meta( 2, \'fruits\', $data );
// does update as well
update_user_meta( 2, \'fruits\', $data , array( \'cherry\', \'banana\' ) );
// does not update, because that\'s not what is in the database.
就你而言,我只需要
update_user_meta( 2, \'fruits\', $data );
因为WordPress会自动将其转换为第三个示例。
让我们再次从数据库中获取更新的数据!记住,您不需要条目数组,所以我们使用get_user_meta( 2, \'fruits\', true )
get_user_meta(2, \'fruits\', false);
// results in array( \'pineapple\', \'orange\', \'apple\', \'pear\', peach\' )
就是这样!