我在自定义字段中使用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获取值吗?我完全糊涂了^^。
答案 0 :(得分:1)
好的,我自己找到了这个问题。
我认为当所有内容都已写入数据库时会调用save_post,但似乎不是。在我的例子中,我按代码设置了第二个自定义字段值,但是在我的函数之后首先保存了帖子。因此,我设置的值被管理区域中的选择覆盖,这是标准值。
我的解决方案是使用wp_insert_post而不是save_post。