【问题标题】:Change custom post title before publishing发布前更改自定义帖子标题
【发布时间】:2016-08-10 09:18:50
【问题描述】:

我有一个名为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:在管理面板中,如果我点击“直接发布”自定义帖子的更新,其永久链接和标题采用“正确”形式。

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

发布自定义帖子“会话”时,可能未调用过滤器。如何强制调用它?

【问题讨论】:

    标签: wordpress custom-post-type


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢,我添加了这段代码,但我仍然有同样的问题:如果我直接发布会话,永久链接是 id,并且只有 id。标题还是空的。
    • 只是管理员中的永久链接显示不正确,还是您根本无法使用生成的永久链接访问帖子?
    • 我仍然可以通过具有以下形式的永久链接访问帖子:www.mysite.com/session/432/
    • 如果你尝试使用 slug(做一些var_dump 以在 wp_instert_post_data 上获取生成的 slug),它会给你一个 404 吗?
    猜你喜欢
    • 2012-01-20
    • 1970-01-01
    • 1970-01-01
    • 2013-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多