使用save_post挂钩时,管理区域中的自定义字段显示问题

时间:2013-09-18 11:23:30

标签: php wordpress custom-post-type custom-fields

我在自定义字段中使用Meta-Box插件,我也有自定义帖子类型。当用户在自定义字段中输入内容然后保存自定义帖子类型时,我会根据计算出的值计算某些内容,然后将内容写入另一个自定义字段。由于这不能正常工作,我将其分解为更简单的功能来测试行为并找到问题。这就是更简单的功能:

- 自定义帖子类型显示2个下拉列表(自定义字段) - 用户在第一个下拉列表中选择一些内容,然后保存/更新帖子 - 然后,该功能从第二个下拉列表中的第一个下拉列表中选择相同的选定值/项目

我正在使用save_post钩子,然后使用update_post_meta()函数正确获取所选值并为第二个自定义字段设置相同的值。保存和更新帖子后,该值正确写入数据库,但管理界面中的自定义字段未显示正确的值。这是代码:

add_action( 'save_post', 'update_second_custom_field' );

function update_second_custom_field( $post_id ) {
    $firstCustomFieldValue=get_post_meta($post_id, 'first_custom_field', true);
    update_post_meta($post_id, 'second_custom_field', $firstCustomFieldValue);
    $test = get_post_meta($post_id, 'second_custom_field', true);
    _log($test);
}

第二个自定义字段似乎未在管理视图中更新。无论我做什么,重新打开帖子,再次更新。它将始终显示标准值,即使db似乎具有正确的值。

我在这里缺少什么?

EDIT 好的,我必须纠正我的初始帖子。似乎值没有写入DB。我只是不明白为什么。为什么get_post_meta显示正确的值,但DB保存旧值。 get_post_meta不是从DB获取值吗?我完全糊涂了^^。

1 个答案:

答案 0 :(得分:1)

好的,我自己找到了这个问题。

我认为当所有内容都已写入数据库时​​会调用save_post,但似乎不是。在我的例子中,我按代码设置了第二个自定义字段值,但是在我的函数之后首先保存了帖子。因此,我设置的值被管理区域中的选择覆盖,这是标准值。

我的解决方案是使用wp_insert_post而不是save_post。