Wordpress save_post钩子有错误的帖子?

时间:2017-05-19 14:28:26

标签: php wordpress hook

我使用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);
    }

谢谢

2 个答案:

答案 0 :(得分: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 :(得分:0)

save_post挂钩需要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
}