wp_update_post делает так, чтобы значения настраиваемых полей исчезали (Wordpress)

Я пытаюсь обновить содержимое сообщения в одном из своих сообщений с помощью функции wp_update_post. Я прочитал документацию здесь: http://codex.wordpress.org/Function_Reference/wp_update_post

И если я все сделаю правильно, мне просто нужно отправить идентификатор сообщения и содержимое сообщения, которое я хочу обновить, как в примере, и это должно быть единственное, что изменится. Хотя мои пользовательские поля, которые я прикрепил к этому сообщению, исчезают, как ни странно.

У меня есть следующий код, который я передаю:

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 );
}

Как это произошло и как мне это решить?


person Fredrik    schedule 06.04.2011    source источник


Ответы (1)


Это связано с тем, что когда вы обновляете сообщение, используется функция *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
comment
Я думаю, что ваши решения могут быть тем, что мне нужно, чтобы обновить мой существующий пост. Что я сделал, так это повторил значение переменной в настраиваемое поле. Проблема в том, что значение отображается на экране редактирования, но не вступает в силу во внешнем интерфейсе, пока я не обновлю сообщение. У меня более 1800 сообщений, и обновление каждого вручную займет много времени. Может ли одно из ваших решений помочь мне обновить мои существующие сообщения? Хотя я бы не хотел удалять пустые поля. Спасибо за любую помощь в этом. - person gdinari; 23.06.2011
comment
Я хотел бы, чтобы функция запускалась всякий раз, когда сообщение создается или импортируется и т. д. Пожалуйста, дайте мне знать, если у вас есть какие-либо идеи. Спасибо. - person gdinari; 23.06.2011