我使用wp_update_post以编程方式将标题和标签添加到前端的帖子中。我在这个过程中遇到了自定义字段的头发撕裂问题:在最初创建帖子时创建并填充的两个自定义字段之一的值已删除,而另一个完全正常。
这是我用来创建帖子的代码的一部分:
// Set the post ID so that we know the post was created successfully
$post_id = wp_insert_post(
array(
'comment_status'=> 'closed',
'ping_status' => 'closed',
'post_author' => $author_id,
'post_name' => $slug,
'post_status' => 'publish',
'post_type' => 'custom'
)
);
// If the post was created properly
if($post_id) {
// Add meta/custom field data to post
add_post_meta($post_id, 'custom_random_id', $randomId);
add_post_meta($post_id, 'viewcount', '1');
然后,这是我用来更新标题和标签的代码:
// Continue if untampered
if($new_hashed_value == $_POST['hash']) {
$updatePost = array();
$updatePost['ID'] = $post_id;
$updatePost['post_title'] = $title;
$updatePost['tags_input'] = $tags;
if(wp_update_post($updatePost)) {
totallyUnrelatedStuff();
}
我从other posts了解到wp_update_post可能会删除值 - 但在这种情况下,自定义字段' custom_random_id '始终完好无损,' viewcount '总是删除它的值。
我已尝试改变它以便:
if(wp_update_post($updatePost)) {
update_post_meta($post_id, 'viewcount', '1');
}
甚至:
if(wp_update_post($updatePost)) {
delete_post_meta($post_id, 'viewcount');
add_post_meta($post_id, 'viewcount', '1');
}
但 viewcount 字段的值继续被删除。
此外,只是向我扔另一把扳手,
if(wp_update_post($updatePost)) {
delete_post_meta($post_id, 'viewcount');
add_post_meta($post_id, 'new_field', 'new_value');
}
完美无缺。
有人知道发生了什么吗?
谢谢!
答案 0 :(得分:3)
我有类似的事情发生。
wp_update_post
调用操作save_post
。由于您使用的是自定义帖子类型,因此您可能需要在save_post
操作上运行自定义功能以保存元数据。
问题是,当您调用wp_update_post
自定义功能以保存元数据时,将这些值设置为空白,因为它找不到所查找的数据(通常位于$_POST
)。
您需要添加一些额外的检查,以查看您的save_post
动作函数是否应该运行,在某种程度上,测试是否从Wordpress的“编辑”屏幕调用,或者从前面调用结束形式。
就我而言,这解决了这个问题:
function save_metadata($postid) {
global $post;
if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) return false;
if ( !current_user_can( 'edit_page', $post->ID ) ) return false;
if ( empty($post->ID) || get_post_type( $post->ID ) != 'post_type_here' ) return false;
if ( !is_admin() ) return false;
updateMyMetas();
}