Это связано с тем, что когда вы обновляете сообщение, используется функция *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 или сообщения по электронной почте. Аргументы функции действия: ID поста.
person
Ján Bočínec
schedule
19.04.2011