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

Unable saving an associative array using add_post_meta() function

我需要在将关联数组的每个成员保存到 wp_postmeta table 之前对其进行 运行 加密函数。我的表单允许动态 add/delete 行。我一直在尝试使用 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 元键没有创建,也没有产生错误。 post元 table 中不存在元键,但 add_post_meta() returns 为假,并且从未添加 key/value。

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

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

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

参考文献: