2016-08-09 9 views
1

連想配列の各メンバーに暗号化関数を実行してから、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に設定されて

+0

'(もし! add_post_meta .... '、' else'条件を入れて何か処理します。 –

+0

@JeremyHarris 'add_post_meta'は既に存在する場合にfalseを返します。追加が成功するとtrueを返します。私はあなたのポイントを逃していますか? – rwkiii

+0

'しかし、ポストメタキーは作成されず、エラーも生成されません。 'unique'引数がtrue(最後のもの)に設定されているので、重複した値になっている可能性があります。どのようにそれを処理したいですか? 'else'条件を追加してそれを処理します:-) –

答えて

1


あなたは、NOTstringarrayを挿入しているので、代わりにfalseでなければなりません。
ifステートメントが正しく動作していません

代わりに、あなたのコードが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); 
} 

参考:条件ブロックで

+0

私の2つの質問は同じ問題に関連していると思います。ありがとう! – rwkiii

関連する問題