0

我正在为自定义字段使用 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 似乎具有正确的值。

我在这里想念什么?

编辑好的,我必须更正我最初的帖子。似乎该值未写入数据库。我只是不明白为什么。为什么 get_post_meta 显示正确的值但数据库保存旧值。get_post_meta 不是从数据库中获取值吗?我完全糊涂了^^。

4

1 回答 1

1

好的,我自己发现了问题。

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

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

于 2013-09-18T11:46:28.833 回答