发布前更改自定义帖子标题

时间:2016-04-18 14:47:16

标签: wordpress custom-post-type

我有一个名为session的自定义帖子,其中有一些自定义字段,例如dateevent_location

我想为此自定义帖子生成一个标题,其代码如下:

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

function modify_post_title( $data , $postarr )
{
  if($data['post_type'] == 'session') {

  //the id of the post
  $post_id = $postarr['ID'];

  //the date
  $date = get_post_meta( $post_id, 'session_date', true );

  //the location
  $event_location = get_post_meta( $post_id, 'session_location', true );

  //concatenating location and date
  $data['post_title'] = "$event_location-$date";
  }

  //returning the data
  return $data;
}

为了使其发挥作用,即为了正确地锻造"用作永久链接的标题(例如www.mysite.com/session/toronto-04282016),这是我必须做的:

  • 创建新会话并填写所需的自定义字段
  • 将其另存为草稿
  • 重新加载编辑会话的页面
  • 发布会话帖子

如果我尝试直接发布自定义帖子,则其永久链接会使用帖子的#id,例如:www.mysite.com/session/432。

编辑:自定义帖子标题为空

编辑#2:在管理面板中,如果我点击更新以及"直接发布"自定义帖子,其永久链接和标题采取"正确"形式。

如何在不使用草稿步骤的情况下发布具有自定义标题的新会话?

当自定义帖子"会话&#34>时,可能没有调用过滤器。发表。我怎么强迫它被召唤?

1 个答案:

答案 0 :(得分:0)

您可以使用wp_insert_post_data参数(页面slug)更改post_name内的固定链接(以下使用sanitize_title函数从帖子标题生成有效的永久链接):

$data['post_name'] = sanitize_title($data['post_title']);