2017-05-19 125 views
1

我收到了一些奇怪的結果,使用save_post鉤子將元值保存到我的自定義帖子類型中。數據保存到不正確的帖子。Wordpress save_post鉤子有錯誤的帖子?

如果我使用下面的代碼登錄後ID,我看到的就是不正確的,那就是當我編輯後7890,日誌條目是3345(以及其中保存的數據放在這就是)

我誤解了save_post鉤子的工作方式嗎?任何幫助表示讚賞:)

add_action('save_post','save_data'); 
function save_data($post_id){ 
     $file = 'log.txt'; 
     $copystring = $post_id ."\n"; 
     file_put_contents($file, $copystring, FILE_APPEND | LOCK_EX); 
    } 

謝謝

回答

0

基本上你是正確地使用它。 $ post_id應該是要保存的帖子的ID。在這裏閱讀更多:https://codex.wordpress.org/Plugin_API/Action_Reference/save_post

但是,可能有各種原因,爲什麼你在這裏收到錯誤的職位ID。

  • 保存後觸發
  • 您收到一些修改ID
  • 您從您的形式發送錯誤的ID數據
  • 也許其他人另一篇文章的保存過程中...

在保存帖子鉤子回調中,你應該檢查帖子是否是正確的帖子類型,並且它不是修訂版或其他東西。

$post = get_post($post_id); 

if($post->post_type != 'desired-post-type') { 
return; 
} 

if(wp_is_post_revision($post_id) { 
return; 
} 

...也許一些其他檢查。

什麼是帖子3345?打印到您的控制檯並檢查。很可能它是一種不同的帖子類型,或者您提交了錯誤的ID。

+1

非常感謝Blackbam, 後類型多種多樣,其wasnt修訂,以及我的表單是默認的WP之一。但是您的'保存帖子觸發另一個帖子的保存過程'的建議已經發布! 在另一個函數中有一些代碼,調用'wp_update_post',它沒有正常工作 - 謝謝你送我走了正確的道路:) v – Vauneen

0

save_post hook需要3個參數($post_id, $post, $update),它也可以附加到帖子類型:save_post_{$post->post_type}
如果$update === false正在創建一個全新的帖子。

在執行我們的自定義操作之前,還必須執行相應的檢查。您正面臨的錯誤很可能是保存後修訂。

假設CPT是「工作」。

add_action('save_post_jobs', 'save_data_so', 10, 3); 

function save_data_so($id, $post, $update) { 
    if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) 
     return; 

    # A wp_nonce_field is present, check for it 
    // if (!wp_verify_nonce($_POST['noncename'], plugin_basename(__FILE__))) 
    // return; 

    # Not sure if necessary when using save_post_POST-TYPE 
    if ('revision' == $post->post_type) 
     return; 

    # Do your thing 
}