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

时间:2016-08-09 20:43:17

标签: php mysql wordpress wordpress-theming associative-array

我需要在关联数组的每个成员上保存到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]。

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 );
}

参考文献: