无法使用 add_post_meta() 函数保存关联数组
Posted
技术标签:
【中文标题】无法使用 add_post_meta() 函数保存关联数组【英文标题】:Unable saving an associative array using add_post_meta() function 【发布时间】:2016-12-16 01:13:41 【问题描述】:在将关联数组的每个成员保存到wp_postmeta
表之前,我需要对其运行加密函数。我的表单允许动态添加/删除行。我一直在尝试使用array_walk()
让它工作。
这是表单的配置方式:
<input type="text" id="z_my_data[][username]" name="z_my_data[0][username]">
<input type="text" id="z_my_data[][password]" name="z_my_data[0][password]">
这是在“save_post”操作上运行的:
// Save encrypted data to post meta
if (isset($_POST['z_my_data']))
// Get posted form variables
$my_data = $_POST['z_my_data'];
// Encrypt each member of each row
for ($i = 0; $i < count($my_data); $i++)
$cryptKey = $this->cryptKey;
array_walk($my_data[strval($i)], create_function('&$val', 'global $cryptKey; $val = Crypto::encrypt($val, $cryptKey);'));
if ( ! add_post_meta( $post_id, '_my_data', $my_data, true ) )
update_post_meta( $post_id, '_my_data', $my_data);
else
delete_post_meta( $post_id, '_my_data' );
我可以看到数据正在被加密。这是for
循环之后的print_r($my_data)
:
Array
(
[0] => Array
(
[username] => ®ØåÛâÏ0…"ë°?mˤÙ
[password] => xSFç„L¶·3z˜'J0ÖRÅÎj
)
)
但是没有创建 post 元键,也没有生成错误。元键在 postmeta 表中不存在,但 add_post_meta()
返回 false 并且从未添加键/值。
有人看到我做错了吗?
我不知道该怎么说,但我认为 [0] 是命名键而不是索引键。我这么说是因为我可以创建多个并删除 [0] 元素,而剩下的单个元素仍然使用 print_r
显示 [1]。
【问题讨论】:
在条件块if ( ! add_post_meta....
中,放置一个else
条件并做一些处理。
@JeremyHarris add_post_meta
如果它已经存在则返回 false。如果添加成功,则返回 true。我错过了你的意思吗?
But the post meta key is not created and no error is generated
.... 很明显 if
语句返回 false 。您将unique
参数设置为true(最后一个),因此您可能遇到了重复值。你想怎么处理?添加else
条件并处理它:-)
@JeremyHarris 你是对的。添加失败并返回false,然后更新也失败。但是添加应该添加了帖子元。没有重复项。 postmeta 表只有 9 行,所以我可以看到它们。所以......添加失败,我接下来该怎么办?似乎 $my_data 的格式不正确,但我猜。
[0] is a named key
因为您使用的是$my_data[strval($i)]
。相反,只需使用$my_data[$i]
创建索引数组
【参考方案1】:
在您的
if ( ! add_post_meta( $post_id, '_my_data', $my_data, true ) )
中,您使用的是add_post_meta()
函数,最后一个参数设置为true
。应该是 @987654328 @ 而不是,因为您要插入array
而NOTstring
。 因此,您的if
声明无法正常工作。
相反,您的代码应该是(因为add_post_meta
最后一个参数默认值为false
):
if ( ! add_post_meta( $post_id, '_my_data', $my_data ) )
update_post_meta( $post_id, '_my_data', $my_data );
或者,你也可以使用这个:
if ( ( !empty( get_post_meta( $post_id, '_my_data' ) ) )
update_post_meta( $post_id, '_my_data', $my_data );
参考资料:
WordPress Code Reference - add_post_meta WordPress Code Reference - update_post_meta WordPress Code Reference - get_post_meta【讨论】:
我认为我的两个问题与同一个问题有关。我现在明白了,谢谢!以上是关于无法使用 add_post_meta() 函数保存关联数组的主要内容,如果未能解决你的问题,请参考以下文章
无法将来自 Alamofire GET 请求的 JSON 数据保存到函数的局部变量
如何从 R 中的 animate 函数中保存 GIF 图像?