2011-04-06 42 views
2

我想通過wp_update_post函數更新我的帖子之一的帖子內容。我已閱讀這裏的文檔:http://codex.wordpress.org/Function_Reference/wp_update_postwp_update_post使自定義字段值消失(WordPress的)

如果我得到它的權利,我只需要發送帖子ID和我想更新的帖子內容 - 就像在示例中 - 這應該是唯一的會改變。儘管我附加到這篇文章中的自定義字段消失了,但還是很奇怪。

我有以下我傳遞代碼:

if(isset($_POST['submit'])){ 
    $the_post = array(); 
    $the_post['ID'] = $_POST['id']; 
    $the_post['post_content'] = $_POST['recension']; 

    // Update the post into the database 
    wp_update_post($the_post); 
} 

怎麼會出現這種情況,如何解決呢?

回答

4

這是因爲當您更新帖子時,會使用* wp_insert_post *函數,並且存在通常用於保存自定義字段數據的「save_post」(1)動作鉤子。

的標準方法來添加/更新後的元是這樣的:

$post_meta['_mymeta'] = $_POST['_mymeta']; 

// Add values of $events_meta as custom fields 

foreach ($events_meta as $key => $value) { // Cycle through the $post_meta array! 
    if($post->post_type == 'revision') return; // Don't store custom data twice 
    if($value && $value != get_post_meta($post->ID, $key, TRUE)) { // If the custom field already has a value 
     update_post_meta($post->ID, $key, $value); 
    } elseif($value && get_post_meta($post_id, $key, TRUE) == "") { // If the custom field doesn't have a value 
     add_post_meta($post->ID, $key, $value, TRUE); 
    } 
    if(!$value) delete_post_meta($post->ID, $key, get_post_meta($post->ID, $key, TRUE)); // Delete if blank 
} 

...你可以看到它正在檢查* $ _ POST *數據,如果是空的,或者沒有設置用空數據更新您的元值或完全刪除它。

我想你應該使用database update function或其他一些API函數來更新後場......比如這段代碼將更新後的菜單命令:

$wpdb->update($wpdb->posts, array('menu_order' => 5), array('ID' => $post->ID)); 

(1)運行時後或頁面已創建或更新,可能來自導入,發佈/頁面編輯表單,xmlrpc或通過電子郵件發佈。動作函數參數:帖子ID。

+0

我認爲你的解決方案可能是我需要更新我現有的職位。我所做的是將變量的值反映到自定義字段中。面臨的挑戰是,該值顯示在編輯屏幕中,但在更新帖子之前,不會在前端生效。我有1,800多個帖子,這需要很長時間才能手動更新。您的其中一個解決方案可以幫助我更新現有的帖子嗎?雖然我不想刪除空白字段。感謝您的幫助。 – gdinari 2011-06-22 21:12:54

+0

我希望函數在任何時候創建或導入帖子時運行,等等。請讓我知道你是否有任何想法。謝謝。 – gdinari 2011-06-22 21:21:52