Это связано с тем, что при обновлении записи используется функция * wp_insert_post * и имеется хук действия save_post (1), который обычно используется для сохранения данных пользовательских полей.
Стандартный способдобавление / обновление мета-записи примерно так:
$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 * и, если оно пустое или не установлено, обновляет мета-значение с пустымданных или полностью удаляет их.
Я полагаю, вам следует использовать функцию обновления базы данных или какую-либо другую функцию API для обновления полей сообщений ... например, этот фрагмент кода обновит ваш порядок меню сообщений:
$wpdb->update( $wpdb->posts, array( 'menu_order' => 5 ), array( 'ID' => $post->ID ) );
(1) Запускается всякий раз, когда сообщение или страница создается или обновляется, что может быть из формы импорта, публикации / редактирования страницы, xmlrpc или сообщения по электронной почте.Аргументы функции действия: идентификатор сообщения.