1 回答
TA贡献1880条经验 获得超4个赞
add_post_meta
( https://developer.wordpress.org/reference/functions/add_post_meta/ ) 有一个$unique
默认为 false 的标志。这就是导致外部数组的原因 - 每次添加一个带有 id 和 ref 的新单元素数组时,它都会被附加到tmp
.
但是,如果启用$unique
,则每次都会覆盖现有数组 - 我认为这也不是您想要的。因此,add_post_meta
您应该执行以下操作,而不是使用 :
获取
tmp
帖子元并将其存储在变量中将用户 ID => 值对添加到变量
用于
update_post_meta
覆盖tmp
修改后的数组
对于get_post_meta
,请确保设置$single
为 true (第三个参数) - 否则您将再次将其包装在外部数组中):
// step 1: retrieve current value of 'tmp' meta
$user_list = get_post_meta($post_id, 'tmp', true);
if ($user_list === false) { // meta wasn't set yet
$user_list = []; // initialize array
}
// step 2: set information for current user
$user_list[ get_current_user_id() ] = [ 'id' => 1337, 'ref' => '...'];
// step 3: overwrite 'tmp' post meta with updated array
update_post_meta($post_id, 'tmp', $user_list);
然后要删除一个元素,请执行以下操作:
$user_list = get_post_meta($post_id, 'tmp', true);
if ($user_list === false) { // meta wasn't set yet
$user_list = []; // initialize array
}
// step 2: delete desired user using unset
$user_id_to_delete = 44;
unset($user_list[ $user_id_to_delete ]);
// step 3: overwrite 'tmp' post meta with updated array
update_post_meta($post_id, 'tmp', $user_list);
阅读将像这样工作(仅使用get_post_meta):
$user_list = get_post_meta($post_id, 'tmp', true);
if ($user_list === false) { // meta wasn't set yet
$user_list = []; // initialize array
}
// iterate over all entries
foreach ($user_id => $user_info) {
echo "User $user_id: ".json_encode($user_info).'<br/>'.PHP_EOL;
}
// read a single user's entry:
$user_id = 32;
echo "User ${user_id}'s entry: ".json_encode( $user_list[$user_id] ).
'<br/>'.PHP_EOL;
- 1 回答
- 0 关注
- 112 浏览
添加回答
举报