wp_update_post使自定义字段值消失(Wordpress)

时间:2011-04-06 21:33:25

标签: wordpress custom-fields

我正在尝试通过wp_update_post函数更新我的帖子中的帖子内容。我在这里阅读了文档:http://codex.wordpress.org/Function_Reference/wp_update_post

如果我做对了,我只需要发送帖子ID和我要更新的帖子内容 - 就像在示例中一样 - 这应该是唯一会改变的事情。虽然我附加到这篇文章的自定义字段消失了,但很奇怪。

我传递了以下代码:

if(isset($_POST['submit'])){
    $the_post = array();
    $the_post['ID'] = $_POST['id'];
    $the_post['post_content'] = $_POST['recension'];

    // Update the post into the database
    wp_update_post( $the_post );
}

为什么会发生这种情况,我该如何解决?

1 个答案:

答案 0 :(得分:4)

这是因为当您更新帖子时,使用了* wp_insert_post *函数,并且存在“save_post”(1)动作挂钩,通常用于保存自定义字段数据。

添加/更新post meta的标准方法是这样的:

$post_meta['_mymeta'] = $_POST['_mymeta'];

// Add values of $events_meta as custom fields

foreach ($events_meta as $key => $value) { // Cycle through the $post_meta array!
    if( $post->post_type == 'revision' ) return; // Don't store custom data twice
    if($value && $value != get_post_meta($post->ID, $key, TRUE)) { // If the custom field already has a value
        update_post_meta($post->ID, $key, $value);
    } elseif($value && get_post_meta($post_id, $key, TRUE) == "") { // If the custom field doesn't have a value
        add_post_meta($post->ID, $key, $value, TRUE);
    }
    if(!$value) delete_post_meta($post->ID, $key, get_post_meta($post->ID, $key, TRUE)); // Delete if blank
}

...正如您所看到的那样,它正在检查* $ _ POST *数据,如果它为空或未设置,则会使用空数据更新元值或将其完全删除。

我认为您应该使用database update function或其他一些API函数来更新帖子字段...例如,这段代码会更新您的帖子菜单顺序:

$wpdb->update( $wpdb->posts, array( 'menu_order' => 5 ), array( 'ID' => $post->ID ) );

(1)每当创建或更新帖子或页面时都会运行,这可以来自导入,帖子/页面编辑表单,xmlrpc或通过电子邮件发布。动作函数参数:帖子ID。