发布后标题_保存_预置

时间:2012-06-09 作者:Bdesign

我正在尝试使用post自定义字段中的值来构建自定义帖子的标题。问题是使用title_save_pre 仅在更新帖子时执行,而不是在创建帖子时执行。

当我创建帖子时,我会得到标题:(no title)如果我编辑并保存,我会得到正确的标题。

我需要在后端获得正确的标题。

这是我的代码:

function update_phone_title($title) {

global $post;

$type = get_post_type($post->ID);

if ( \'phone\' == $type) {
    $title = get_post_meta($post->ID, \'manufacturer\', TRUE);
    $title .= \' \'.get_post_meta($post->ID, \'model\', TRUE);
    $title .= \' \'.get_post_meta($post->ID, \'memory\', TRUE);
} 

return $title;
}
add_filter (\'title_save_pre\', \'update_phone_title\');
使用wp\\U insert\\U post\\U数据修复。我使用以下代码:

function filter_handler( $data , $postarr )
{
  global $post;
  $id = $post->ID;

  if(\'phone\' == $data[\'post_type\'] && isset($data[\'post_type\']))
    if($id) {
        $title = $_POST[\'fields\'][\'field_4fd2897fc0bfe\']. \' \' . $_POST[\'fields\'][\'field_4fd2897fc2328\'] . \' \' .$_POST[\'fields\'][\'field_4fd2897fc273a\'];
        $data[\'post_title\'] = $title;
    }
  return $data;
}

add_filter( \'wp_insert_post_data\' , \'filter_handler\' , \'99\', 2 );

1 个回复
最合适的回答,由SO网友:Stephen Harris 整理而成

过滤器title_save_pre 在将贴子写入数据库之前,以及在将其任何贴子元保存到数据库之前运行。所以get_post_meta 此时,第一次运行时将为空,并始终返回“旧”数据。

要更正此问题,您需要save_post 并从那里更新帖子。save_post 将帖子保存到数据库并保存内置“自定义字段”后运行。

为此,您可以使用wp_update_post. 但是,您需要小心:

当由连接到save\\u post(例如自定义元框)的操作执行时,wp\\u update\\u post()有可能创建无限循环。发生这种情况的原因是:(1)wp\\u update\\u post()导致激发save\\u post;(2)启用修订时调用save\\u post两次(首先是在创建修订时,然后是在更新原始帖子时,导致创建无休止的修订)。

如果必须从save\\u post调用的代码更新post,请确保post\\u类型未设置为“revision”,并且确实需要更新$post对象。

解决此问题的一种方法是删除save_post 从回调内部的挂钩回调,如图所示here.

结束