我需要在关联数组的每个成员上保存到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' );
}
我可以看到数据正在加密。 print_r($my_data)
循环之后是 for
:
Array
(
[0] => Array
(
[username] => ®ØåÛâÏ0…"ë°?mˤÙ
[password] => xSFç„L¶·3z˜'J0ÖRÅÎj
)
)
但是没有创建post元键,也没有生成错误。 postmeta表中不存在元键,但add_post_meta()
返回false,并且永远不会添加键/值。
有谁看到我做错了什么?
我不知道怎么说,但我认为[0]是一个命名键而不是索引键。我这样说是因为我可以创建多个并删除[0]元素,剩下的单个元素仍然使用print_r
显示[1]。
答案 0 :(得分:1)
在
if ( ! add_post_meta( $post_id, '_my_data', $my_data, true ) ) {
您正在使用add_post_meta()
功能,最后一个参数设置为true
。
应该false
而不是,因为您要插入array
和不 {{1 }} 即可。
因此,string
声明无法正常运作。
相反,您的代码应为(如add_post_meta
最后一个参数默认值为 if
):
false
或者,你也可以使用它:
if ( ! add_post_meta( $post_id, '_my_data', $my_data ) ) {
update_post_meta( $post_id, '_my_data', $my_data );
}
参考文献: