【问题标题】:Wordpress wp_insert_post_data from frontend problems getting id来自前端问题的 Wordpress wp_insert_post_data 获取 id
【发布时间】:2018-11-29 21:09:38
【问题描述】:

在我的模板中,我使用 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.
}

我做错了什么?

【问题讨论】:

  • 不带`$data->ID`试试看:$id = get_post_field ('ID');get_post_field
  • 同样的问题。它仍然从我使用 acf_form 的页面获取 id,而不是新创建的帖子本身的 id。

标签: wordpress


【解决方案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;
        };
    }

【讨论】:

  • save_post 过滤器在调用wp_update_post 时应用,因此这段代码将引入无限循环。
猜你喜欢
  • 1970-01-01
  • 2021-03-13
  • 1970-01-01
  • 1970-01-01
  • 2021-07-16
  • 1970-01-01
  • 2011-06-21
  • 1970-01-01
  • 2014-03-10
相关资源
最近更新 更多