gpt4 book ai didi

php - 无法使用 add_post_meta() 函数保存关联数组

转载 作者:行者123 更新时间:2023-11-28 23:27:05 26 4
gpt4 key购买 nike

在将关联数组保存到 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 meta key,也没有产生错误。元键在 postmeta 表中不存在,但 add_post_meta() 返回 false 并且键/值永远不会被添加。

有人看到我做错了什么吗?

我不知道怎么说,但我认为 [0] 是命名键而不是索引键。我这么说是因为我可以创建多个元素并删除 [0] 元素,而剩余的单个元素仍然使用 print_r 显示 [1]。

最佳答案

In your if ( ! add_post_meta( $post_id, '_my_data', $my_data, true ) ) { you are using add_post_meta() function and last argument is set to true.
It should be false instead, because you are inserting an array and NOT a string.
For this reason your if statement is not working properly.

相反,您的代码应该是(因为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 );
}

引用资料:

关于php - 无法使用 add_post_meta() 函数保存关联数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38860081/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com