連想配列の各メンバーに暗号化関数を実行してから、wp_postmeta
テーブルに保存する必要があります。私のフォームは行の動的な追加/削除を可能にします。私はarray_walk()
を使用してこれを動作させるようにしてきました。add_post_meta()関数を使用して連想配列を保存できません
これは、フォームが設定されている方法です。これは、「save_post`行動に走っている
<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 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');
}
私は、データが暗号化されていることがわかります。
Array
(
[0] => Array
(
[username] => ®ØåÛâÏ0…"ë°?mˤÙ
[password] => xSFç„L¶·3z˜'J0ÖRÅÎj
)
)
しかし、ポストメタキーは作成されず、エラーは生成されません。ここでfor
ループの後print_r($my_data)
です。ポストメタテーブルにはメタキーは存在しませんが、add_post_meta()
はfalseを返し、キー/値は決して追加されません。
誰かが間違っているのを見ていますか?
わかりませんが、[0]は名前付きキーでインデックスキーではないと思います。私は複数の要素を作成して[0]要素を削除することができ、残っている要素1つでもprint_r
を使用して[1]を表示できるため、あなたのif (! add_post_meta($post_id, '_my_data', $my_data, true)) {
あなたがadd_post_meta()
機能を使用していて、最後の引数は、true
に設定されて
'(もし! add_post_meta .... '、' else'条件を入れて何か処理します。 –
@JeremyHarris 'add_post_meta'は既に存在する場合にfalseを返します。追加が成功するとtrueを返します。私はあなたのポイントを逃していますか? – rwkiii
'しかし、ポストメタキーは作成されず、エラーも生成されません。 'unique'引数がtrue(最後のもの)に設定されているので、重複した値になっている可能性があります。どのようにそれを処理したいですか? 'else'条件を追加してそれを処理します:-) –