wp_update_post

Обновляет запись (пост) в Базе Данных WordPress.

Для того, чтобы функция работала правильно, необходимо указать идентификатор (ID) поста, который будет обновляться.

Функция ожидает (ей нужно передавать) экранированные данные. Т.е. нельзя использовать wp_unslash() для полученных $_POST данных. Если это сделать, будет двойное удаление экранируемых слэшей!

Если ревизии записей включены, при обновлении прошлые данные не удаляются, а становятся ревизией. При этом, все связи (с произвольными полями, категориями, метками) переходят к основной записи.

Хуков нет.

Возвращает

ID обновленной записи, при удачной операции или 0, если обновить запись не удалось.

Использование

wp_update_post( $post );
$post(объект)
Ассоциативный массив данных, содержащий данные о посте, которые нужно вставить. Ключи массива идентичны полям таблицы wp_posts в Базе Данных WordPress. Указывать ID в массиве обязательно! (пример: $my_post[‘ID’] = 37;).
По умолчанию: array()

Примеры

Перед тем как использовать функцию нужно собрать массив данных, который затем передать в качестве параметра. Массив должен содержать те данные, которые мы хотим обновить. Отличие этой функции от wp_insert_post() в том, что здесь нет необходимости передавать все данные, можно указать только те, которые нужно обновить, остальные данные будут скопированы из уже имеющихся в Базе Данных.

#1. Обновим контент у записи 37:

// Создаем массив данных
  $my_post = array();
  $my_post['ID'] = 37;
  $my_post['post_content'] = 'Здесь новый контент записи';

// Обновляем данные в БД
  wp_update_post( $my_post );
Поля, которые можно изменить

Это массив полей, которые содержит любая запись WordPress.

function my_function(){
	if ( ! wp_is_post_revision( $post_id ) ){
		// удаляем этот хук, чтобы он не создавал бесконечного цикла
		remove_action('save_post', 'my_function');

		// обновляем пост, когда снова вызовется хук save_post
		wp_update_post( $my_args );

		// снова вешаем хук
		add_action('save_post', 'my_function');
	}
}
add_action('save_post', 'my_function');
Будущая публикация поста

Если вы планируете публикацию черновика в будущем и используете для этого функцию wp_update_post(), то функция не будет работать, если не указать параметр $my_post->edit_date = true. WP игнорирует параметр post_date, если обновляется черновик, но не в случае, когда указан параметр edit_date = true.

Заметки

Использует: wp_restore_post_revision()

Код из


wp-includes/post.php

WP 4.7.2

<?php
function wp_update_post( $postarr = array(), $wp_error = false ) {
	if ( is_object($postarr) ) {
		// Non-escaped post was passed.
		$postarr = get_object_vars($postarr);
		$postarr = wp_slash($postarr);
	}

	// First, get all of the original fields.
	$post = get_post($postarr['ID'], ARRAY_A);

	if ( is_null( $post ) ) {
		if ( $wp_error )
			return new WP_Error( 'invalid_post', __( 'Invalid post ID.' ) );
		return 0;
	}

	// Escape data pulled from DB.
	$post = wp_slash($post);

	// Passed post category list overwrites existing category list if not empty.
	if ( isset($postarr['post_category']) && is_array($postarr['post_category'])
			 && 0 != count($postarr['post_category']) )
		$post_cats = $postarr['post_category'];
	else
		$post_cats = $post['post_category'];

	// Drafts shouldn't be assigned a date unless explicitly done so by the user.
	if ( isset( $post['post_status'] ) && in_array($post['post_status'], array('draft', 'pending', 'auto-draft')) && empty($postarr['edit_date']) &&
			 ('0000-00-00 00:00:00' == $post['post_date_gmt']) )
		$clear_date = true;
	else
		$clear_date = false;

	// Merge old and new fields with new fields overwriting old ones.
	$postarr = array_merge($post, $postarr);
	$postarr['post_category'] = $post_cats;
	if ( $clear_date ) {
		$postarr['post_date'] = current_time('mysql');
		$postarr['post_date_gmt'] = '';
	}

	if ($postarr['post_type'] == 'attachment')
		return wp_insert_attachment($postarr);

	return wp_insert_post( $postarr, $wp_error );
}

Комментарии:


Оставить комментарий

Your email address will not be published. Required fields are marked *