# wp_update_post()

URL: https://chugunov.pro/api-wordpress/functions/wp_update_post/
Проверено на WordPress 6.9, обновлено 06.08.2026.
Источник: независимый русскоязычный справочник chugunov.pro. Не является официальной документацией WordPress.

Тип: функция.
Появился в версии: 1.0.0.

## Сигнатура

```php
wp_update_post( array|object $postarr = array(), bool $wp_error = false, bool $fire_after_hooks = true ): int|WP_Error
```

## Описание

Для черновиков дату задавать не обязательно. Вы можете задать дату, и она не будет перезаписана.

## Параметры

- `$postarr` `array|object` — необязательный, по умолчанию `array()`. Данные записи. Массивы ожидаются экранированными, объекты — нет. Принимаемые аргументы см. в wp_insert_post().
  
  По умолчанию — массив.
- `$wp_error` `bool` — необязательный, по умолчанию `false`. Возвращать ли WP_Error в случае сбоя.
- `$fire_after_hooks` `bool` — необязательный, по умолчанию `true`. Следует ли запускать хуки, срабатывающие после вставки.

## Возвращаемое значение

`int|WP_Error` — WP_Error

## Исходный код

Файл: `wp-includes/post.php:5230`

```php
function wp_update_post( $postarr = array(), $wp_error = false, $fire_after_hooks = true ) {
	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'] )
		&& count( $postarr['post_category'] ) > 0
	) {
		$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' ), true )
		&& 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 ( 'attachment' === $postarr['post_type'] ) {
		return wp_insert_attachment( $postarr, false, 0, $wp_error );
	}

	// Discard 'tags_input' parameter if it's the same as existing post tags.
	if ( isset( $postarr['tags_input'] ) && is_object_in_taxonomy( $postarr['post_type'], 'post_tag' ) ) {
		$tags      = get_the_terms( $postarr['ID'], 'post_tag' );
		$tag_names = array();

		if ( $tags && ! is_wp_error( $tags ) ) {
			$tag_names = wp_list_pluck( $tags, 'name' );
		}

		if ( $postarr['tags_input'] === $tag_names ) {
			unset( $postarr['tags_input'] );
		}
	}

	return wp_insert_post( $postarr, $wp_error, $fire_after_hooks );
}
```

## История изменений

- 5.6.0 — Added the $fire_after_hooks parameter.
- 3.5.0 — Added the $wp_error parameter to allow a WP_Error to be returned on failure.
- 1.0.0 — Introduced.

## Связанные

Использует: [`get_the_terms`](https://chugunov.pro/api-wordpress/functions/get_the_terms/), [`wp_list_pluck`](https://chugunov.pro/api-wordpress/functions/wp_list_pluck/), [`current_time`](https://chugunov.pro/api-wordpress/functions/current_time/), [`is_object_in_taxonomy`](https://chugunov.pro/api-wordpress/functions/is_object_in_taxonomy/), [`wp_insert_attachment`](https://chugunov.pro/api-wordpress/functions/wp_insert_attachment/), [`wp_insert_post`](https://chugunov.pro/api-wordpress/functions/wp_insert_post/), [`__`](https://chugunov.pro/api-wordpress/functions/__/), [`wp_slash`](https://chugunov.pro/api-wordpress/functions/wp_slash/), [`get_post`](https://chugunov.pro/api-wordpress/functions/get_post/), [`is_wp_error`](https://chugunov.pro/api-wordpress/functions/is_wp_error/), `WP_Error::__construct`.
Используется в: [`wp_set_unique_slug_on_create_template_part`](https://chugunov.pro/api-wordpress/functions/wp_set_unique_slug_on_create_template_part/), `WP_REST_Templates_Controller::update_item`, `WP_REST_Autosaves_Controller::create_item`, `WP_REST_Autosaves_Controller::create_post_autosave`, [`wp_generate_user_request_key`](https://chugunov.pro/api-wordpress/functions/wp_generate_user_request_key/), [`_wp_privacy_account_request_confirmed`](https://chugunov.pro/api-wordpress/functions/_wp_privacy_account_request_confirmed/), [`_wp_privacy_completed_request`](https://chugunov.pro/api-wordpress/functions/_wp_privacy_completed_request/), [`_wp_personal_data_cleanup_requests`](https://chugunov.pro/api-wordpress/functions/_wp_personal_data_cleanup_requests/), `WP_Customize_Manager::save_changeset_post`, [`wp_update_custom_css_post`](https://chugunov.pro/api-wordpress/functions/wp_update_custom_css_post/), `WP_REST_Posts_Controller::update_item`, `WP_Customize_Nav_Menus::save_nav_menus_created_posts`, [`media_upload_form_handler`](https://chugunov.pro/api-wordpress/functions/media_upload_form_handler/), [`wp_create_post_autosave`](https://chugunov.pro/api-wordpress/functions/wp_create_post_autosave/), [`_fix_attachment_links`](https://chugunov.pro/api-wordpress/functions/_fix_attachment_links/), [`wp_ajax_save_attachment_order`](https://chugunov.pro/api-wordpress/functions/wp_ajax_save_attachment_order/), [`wp_ajax_send_attachment_to_editor`](https://chugunov.pro/api-wordpress/functions/wp_ajax_send_attachment_to_editor/), [`edit_post`](https://chugunov.pro/api-wordpress/functions/edit_post/), [`bulk_edit_posts`](https://chugunov.pro/api-wordpress/functions/bulk_edit_posts/), [`wp_ajax_save_attachment`](https://chugunov.pro/api-wordpress/functions/wp_ajax_save_attachment/), [`wp_ajax_save_attachment_compat`](https://chugunov.pro/api-wordpress/functions/wp_ajax_save_attachment_compat/), `WP_Embed::shortcode`, [`do_shortcode`](https://chugunov.pro/api-wordpress/functions/do_shortcode/), [`wp_check_post_hierarchy_for_loops`](https://chugunov.pro/api-wordpress/functions/wp_check_post_hierarchy_for_loops/), [`wp_trash_post`](https://chugunov.pro/api-wordpress/functions/wp_trash_post/), [`wp_untrash_post`](https://chugunov.pro/api-wordpress/functions/wp_untrash_post/), [`wp_restore_post_revision`](https://chugunov.pro/api-wordpress/functions/wp_restore_post_revision/), [`wp_update_nav_menu_item`](https://chugunov.pro/api-wordpress/functions/wp_update_nav_menu_item/), `wp_xmlrpc_server::mt_publishPost`, `wp_xmlrpc_server::mw_editPost`, `wp_xmlrpc_server::blogger_editPost`, `wp_xmlrpc_server::_insert_post`.

Оригинал в официальной документации: https://developer.wordpress.org/reference/functions/wp_update_post/
