来自前端问题的Wordpress wp_insert_post_data获取ID

时间:2018-11-29 11:53:24

标签: wordpress

在我的模板中,我使用acf_form从前端创建帖子。创建的帖子是票证系统的一部分,因此它们需要自动生成的包含票证号的post_title。票证编号应等于帖子ID。

要自动生成帖子标题,请使用“ wp_insert_post_data”。这几乎完美。当我在后端创建帖子时,一切都很好,但是当我从前端创建帖子时,票证获得了错误的ID。表单位于页面ID为38的页面上。现在,当我从前端创建帖子时,帖子标题始终为“ ticket-38”,而不是所创建帖子本身的ID。

add_filter( 'wp_insert_post_data' , 'modify_post_title' , '99', 1 ); 


function modify_post_title( $data )
{
    if($data['post_type'] == 'tickets') { 
        $id = get_post_field ('ID', $data->ID);

        $title = 'tickets-'.$id;
        $data['post_title'] =  $title ; //Updates the post title to new title.
    }
    return $data; // Returns the modified data.
}

我在做什么错了?

1 个答案:

答案 0 :(得分:-1)

在插入帖子之前触发了过滤器'wp_insert_post_data',因此仍然没有ID,

您可以使用'save_post'动作挂钩(在插入函数之后触发),然后使用wp_update_post()更新标题

add_action( 'save_post' , 'modify_post_title' , '99', 3 ); 

    function modify_post_title( $post_id, $post, $update )
    {
        if($post->post_type == 'tickets' && ! $update ) {
            wp_update_post( array( 
              'ID'         => $post_id,
              'post_title' => 'tickets-' . $post_id;
        };
    }