0

ユーザーはフォームに記入し、投稿されると回答を変更することができます。私はそれをwordpressのオプションに投稿しました。多次元連想配列による並べ替えと更新されたオプションのみの変更

私はボタンに添付この更新プログラムを持っており、これはそれ

if(isset ($_POST['plugin-guide-info-update']) == 'Update') { 
    $hidden_field_updated = esc_html ($_POST['plugin-guide-info-form-updated']) ; 

     if($hidden_field_updated == 'Y') { 

      for ($i = 0; $i < sizeof($guide_info); $i++) { 

       if (!empty($_POST['wpt_guide_name_update_delete_' . $i])){ 

        $guide_name = esc_html($_POST['wpt_guide_name_update_delete_' . $i]); 

        $guide_description= esc_html($_POST['wpt_guide_description_update_delete_' . $i]); 

        $guide_info = array ('guide_name' => $guide_name, 'guide_description' => $guide_description); 

        $options = array_replace($options[$i], $guide_info); 

        update_option('assist', $options); 

       } 
      } 
     } 
    } 

ためのコードである私は、この何も起こりません行うと、何もオプションで変更されません。私は何が欠けていますか? var_dumpは何も出力

私は、foreachループを試してみた、と私はそこに何があるかと比べて異なっている各キーと値とシーイングの上に行くと、それを変更することについて考えてきましたしません

Update_option is a wordpress function

その変更はそこにあるものとは異なるため、新しいものに変更されます。

+0

あなたの質問を編集し、 'update_option()'が何をしているかを示してください。また、これをデバッグするためにどのような手順を取っていますか? 'var_dump()'はあなたの友人です... –

+0

@devlincarnate私はそれを編集しました –

+0

'var_dump($ options)'は期待した結果を返しますか? –

答えて

0

$guide_infoの配列を反復処理しています。それは問題だ。この問題は、$guide_infoを参照して$optionsにカスケードし、適切な場所にはないインデックス$iに頼って$optionsの配列を変更して、さらに問題を解決します。

for ($i = 0; $i < sizeof($guide_info); $i++) { 
    //..other stuff 
    $guide_info = array ('guide_name' => $guide_name, 'guide_description' => $guide_description); 
    $options = array_replace($options[$i], $guide_info); 
} 

解決策は、反復処理中の配列の変更を停止することです。配列を変更してループのインデックスが次の繰り返しで正しい場所を指していることを期待しないでください。

for ($i = 0; $i < sizeof($guide_info); $i++) { 
    //..other stuff 
    $guide_info_new = array ('guide_name' => $guide_name, 'guide_description' => $guide_description); 
    $options_new = array_replace($options[$i], $guide_info_new); 
    update_option('assist', $options_new); 
} 

これはそのまま元$guide_info$options配列を残しますので、あなたの反復:これを行うには

一つの方法は、あなたのケースでは、このように、変更した結果セットのための別の配列を使用することです期待どおりのループ。


更新

$optionsとの意図ではなくarray_replace()array_push()を使用し、その後、アレイに追加する場合。配列に渡すので、あなたのループの外側でupdate_optionを呼び出します。つまり、ループ内に配列を作成し、ループの後にupdate_option関数に渡します。

for ($i = 0; $i < sizeof($guide_info); $i++) { 
    //..other stuff 
    $guide_info_new = array ('guide_name' => $guide_name, 'guide_description' => $guide_description); 
    array_push($options, $guide_info_new); 
} 
update_option('assist', $options); 
+0

それを実行すると、新しい編集された配列のみが出力され、それ以外はすべて削除されます。 –

+0

@ Sophie.J - I私の答えを更新しました。 –

関連する問題