2014-03-03 53 views
0

我正在嘗試使用自定義帖子類型將後期元數據保存在數據庫中。問題是我無法存儲meta_key,唯一存儲的是元值。我有兩個文本框,其中一個用於事件日期,另一個用於事件名稱。我試圖在元鍵上存儲日期,並在值上存儲事件。問題在於它只存儲在元值上,而我不確定元鍵。另外你如何在同一篇文章中存儲多個元鍵和元值?任何想法這個語法的哪一部分是錯誤的?謝謝:)在wp_postmeta中保存自定義字段

function add_calendar_metaboxes() { 
    add_meta_box('wpt_calendar_location', 'Event Date', 'wpt_calendar_location', 'calendar_holiday', 'normal', 'default'); 

} 

// The Event Location Metabox 
function wpt_calendar_location() { 
    global $post; 

    echo "<form method=\"POST\">"; 
    // Noncename needed to verify where the data originated 
    echo '<input type="hidden" name="eventmeta_noncename" id="eventmeta_noncename" value="' . 
    wp_create_nonce(plugin_basename(__FILE__)) . '" />'; 
    // Get the location data if its already been entered 
    $event_name = get_post_meta($post->ID, '_event_name', true); 
    $event_date = get_post_meta($post->ID, '_event_date', true); 

    echo '<label>Event Date</label><input type="text" name="_event_date" value="' . $event_date . '" />'; 
    echo '<label>Event Name</label><input type="text" name="_event_name" value="' . $event_name . '" />'; 
    echo '<input type="submit" name="Submit">'; 
    echo '</form>'; 

} 


// Save the Metabox Data 
function wpt_save_events_meta($post_id, $post) { 

     if (!wp_verify_nonce($_POST['eventmeta_noncename'], plugin_basename(__FILE__))) { 
     return $post->ID; 
     } 

     if (!current_user_can('edit_post', $post->ID)) 
      return $post->ID; 

     $events_meta[] = array($_POST['_event_date'] => $_POST['_event_name']); 

     foreach ($events_meta as $key => $value) 
     { 
      if($post->post_type == 'revision') return; 
      $value = implode(',', (array)$value); 
      if(get_post_meta($post->ID, $key, FALSE)) 
      { 
       update_post_meta($post->ID, $key, $value); 
      } 

      else 
      { 
       add_post_meta($post->ID, $key, $value); 
      } 
      if(!$value) delete_post_meta($post->ID, $key); 
     } 

} 
add_action('save_post', 'wpt_save_events_meta', 1, 2); 
+0

我真的不明白這個問題..你是什麼意思它只保存meta_value? –

+0

是的,先生。我認爲我的儲蓄功能是錯誤的。我如何使用自定義字段保存自己的meta_key和meta_value?你可以看到我有兩個文本框。但我只能保存一個價值。任何想法先生? – user2901740

回答

0

爲什麼你把它當作數組?

試試這個功能簡單第一

function wpt_save_events_meta() { 
global $post; 

update_post_meta($post->ID, "_event_date", $_POST["_event_date"]); 
update_post_meta($post->ID, "_event_name", $_POST["_event_name"]); 
} 

如果這是爲你工作,那麼你可以把你的所有驗證的東西。

(如果仍然發現問題,請嘗試$post_id,而不是$post->ID)評論編輯我後

當你update_post_meta($post->ID, $_POST["_event_date"], $_POST["_event_name"]);

你實際上是節省了_event_dateKEY_event_name作爲VALUE

除非你明確知道你在做什麼 - 這是錯誤的 重點是保存2個字段。

一位叫"_event_date"舉行dates

一位叫"_event_name"舉行names

在你,你會碰到這樣的評論中寫道的情況下(我不知道實際數據結構.. )

(post_id=1) 2014.03.04 => my_event_name 
(post_id=2) 2014.03.05 => my_event_name2 
(post_id=3) 2014.03.06 => my_event_name3 

在正確的代碼,你將有

(post_id=1) _event_date => 2014.03.04 
       _event_name => my_event_name 
(post_id=2) _event_date => 2014.03.05 
       _event_name => my_event_name2 
(post_id=3) _event_date => 2014.03.06 
       _event_name => my_event_name3 

您可以看到,在第一個代碼中,實際上很難在搜索中實際使用數據,例如在第二個代碼中 - 它有一個結構。

你要對每個表單字段(meatbox場)作爲一套獨立的keyvalue - 分別由it's自己..只要試試上面貼的代碼。

+0

我還沒試過,但我想要的是將meta_key字段保存爲事件日期,並將meta_value字段保存爲事件名稱。我希望你明白我的觀點。謝謝 – user2901740

+0

是的,我明白了。試試這個簡單的回調。 –

+0

這就是我所做的,update_post_meta($ post-> ID,$ _POST [「_ event_date」],$ _POST [「_ event_name」]);我可以修改meta_key嗎? – user2901740

相關問題