2016-04-12 5 views
0

メタフィールドで同じ名前のカスタムフィールドを作成します.DBから値を復元し、それらをシリアル化して私のパターンとして保存します。このよう複数のメタフィールド値をワードプレスの配列として保存する場合

Array 
(
    [job] => 'sdfsdf' 
    [image] => Array 
     (
      [attachment_id] => '2121' 
      [url] => 'http://siteurl.com/wp-content/uploads/2016/04/image.jpg' 
     ) 

    [popup_text] => 'A quick brown fox jumps over the lazy dog.' 
) 

しかし、私は値を保存する場合、すべての値が空として復元します。

は今ここに私のメタフィールドコードです:必要にあたりとして

global $wpdb; 

    $dsl_fw_options = get_post_meta($post->ID, 'dsl_fw_options', true); 

    $dsl_staff_qry = $wpdb->get_row("Select * From ". $wpdb->posts . " Where ID = ".$post->ID); 

    $dsl_staff_parent = $wpdb->get_row("Select * From ". $wpdb->posts . " Where post_parent = " . $post->ID . " And post_type = 'attachment' And (post_mime_type = 'image/jpeg' Or post_mime_type = 'image/png')"); 

?> 
    <table width="100%" cellspacing="2" cellpadding="2" border="0"> 
     <tr> 
      <td width="20%"> 
       <strong>Job Title</strong> 
      </td> 
      <td width="80%"> 
       <input type="text" name="dsl_txt_fw_options['job']" value="<?php echo $dsl_fw_options['job'] ?>" style="width: 50%;"> 
      </td> 
     </tr> 
     <tr> 
      <td> 
       <input type="text" name="dsl_txt_fw_options['attachment_id']" value="<?php echo $dsl_staff_parent->ID; ?>" style="width: 50%;"> 
       <br> 
       <input type="text" name="dsl_txt_fw_options['url']" value="<?php echo $dsl_staff_parent->guid; ?>" style="width: 50%;"> 
       <br> 
       <textarea name="dsl_txt_fw_options['popup_text']"><?php echo $dsl_staff_qry->post_content; ?></textarea> 
      </td> 
     </tr> 
    </table> 

私がDBから値を取得し、それは完全に表示されます。

そして、ここで私の更新のメタ値コードです:

add_action('save_post', 'dr_save_staff_post'); 
function dr_save_staff_post() { 
    global $post; 

    $dsl_arr = array(); 

    $dsl_arr_val = $_POST['dsl_txt_fw_options']; 

    foreach ($dsl_arr_val as $dsl_key => $dsl_val) { 
     $dsl_arr['job'] = $dsl_val->job; 
     $dsl_arr['image'] = array(
           'attachment_id' => $dsl_val->attachment_id, 
           'url' => $dsl_val->url 
          ); 
     $dsl_arr['popup_text'] = $dsl_val->popup_text; 
    } 

    update_post_meta($post->ID, 'fw_options', $dsl_arr); 
} 

私は、これらの値を保存し、DBからの値をチェックすると、それは私にその結果を示します:私はどこか分からない

a:3:{s:3:"job";N;s:5:"image";a:2:{s:13:"attachment_id";N;s:3:"url";N;}s:10:"popup_text";N;} 

を私は間違っているので、私を案内してください。

答えて

0

まず、各入力タイプの名前を変更します。以下のような

<table width="100%" cellspacing="2" cellpadding="2" border="0"> 
     <tr> 
      <td width="20%"> 
       <strong>Job Title</strong> 
      </td> 
      <td width="80%"> 
       <input type="text" name="dsl_txt_fw_job" value="<?php echo $dsl_fw_options['job ?>" style="width: 50%;"> 
      </td> 
     </tr> 
     <tr> 
      <td> 
       <input type="text" name="dsl_txt_fw_attachment_id" value="<?php echo $dsl_staff_parent->ID; ?>" style="width: 50%;"> 
       <br> 
       <input type="text" name="dsl_txt_fw_url" value="<?php echo $dsl_staff_parent->guid; ?>" style="width: 50%;"> 
       <br> 
       <textarea name="dsl_txt_fw_popup_text"><?php echo $dsl_staff_qry->post_content; ?></textarea> 
      </td> 
     </tr> 
    </table> 

は、その後、あなたが望むどの形式で配列にこの値を変換することができ、この後

$dsl_val_job = $_POST['dsl_txt_fw_job']; 

$dsl_val_attachment_id = $_POST['dsl_txt_fw_attachment_id']; 

$dsl_val_url = $_POST['dsl_txt_fw_url']; 

$dsl_val_popup_text = $_POST['dsl_txt_fw_popup_text']; 

のように、これらの値を取得します。同様に

$dsl_val['job'] = $dsl_val_job; 

$dsl_val['image'] = array ('attachment_id' => $dsl_val_attachment_id, 

          'url'=> $dsl_val_url); 

$dsl_val['popup_text'] = $dsl_val_popup_text; 

これはそれです。 :-)

+0

私はそんなに愚かな.....どのようにこのような間違いをすることができます...ありがとうたくさん – deemi

関連する問題