2017-05-19 127 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 
}