Wordpress save_post hook 有错post?

Wordpress save_post hook has the wrong post?

我使用 save_post 挂钩将元值保存到我的自定义 post 类型时得到了一些奇怪的结果。数据保存到不正确的post.

如果我使用下面的代码记录 post ID,我发现这是不正确的,也就是说,当我编辑 post 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);
    }

谢谢

基本上你都在正确使用它。 $post_id 应该是要保存的 post 的 ID。在这里阅读更多:https://codex.wordpress.org/Plugin_API/Action_Reference/save_post

但是,可能有多种原因导致您在此处收到错误的 post ID。

  • 保存 post 会触发另一个 post
  • 的保存过程
  • 您正在收到一些修订 ID
  • 您发送的表单 ID 数据有误
  • 也许其他人...

在保存 post 挂钩回调中,您应该检查 post 是否属于正确的 post 类型并且它不是修订版或其他内容。

$post = get_post($post_id);

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

if(wp_is_post_revision( $post_id ) {
return;
}

...也许还有一些其他检查。

什么是post3345?将它打印到您的控制台并检查。它很可能是不同的 post 类型,或者您提交了错误的 ID。

save_post 钩子有 3 个参数 ($post_id, $post, $update),它也可以附加到 post 类型:save_post_{$post->post_type}.
如果 $update === false 正在创建一个全新的 post。

在执行我们的自定义操作之前,还必须进行一些检查。您面临的错误很可能是正在保存 post 修订版。

假设 CPT 是 "jobs"。

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
}