我正在尝试使用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 );
最合适的回答,由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.