wordpress / latest / functions / wp_update_post.html

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

Updates a post with new post data.

Description

The date does not have to be set for drafts. You can set the date and it will not be overridden.

Parameters

$postarr array|object Optional
Post data. Arrays are expected to be escaped, objects are not. See wp_insert_post() for accepted arguments.
Default array.
More Arguments from wp_insert_post( ... $postarr ) An array of elements that make up a post to update or insert.
  • IDint
    The post ID. If equal to something other than 0, the post with that ID will be updated. Default 0.
  • post_authorint
    The ID of the user who added the post. Default is the current user ID.
  • post_datestring
    The date of the post. Default is the current time.
  • post_date_gmtstring
    The date of the post in the GMT timezone. Default is the value of $post_date.
  • post_contentstring
    The post content. Default empty.
  • post_content_filteredstring
    The filtered post content. Default empty.
  • post_titlestring
    The post title. Default empty.
  • post_excerptstring
    The post excerpt. Default empty.
  • post_statusstring
    The post status. Default 'draft'.
  • post_typestring
    The post type. Default 'post'.
  • comment_statusstring
    Whether the post can accept comments. Accepts 'open' or 'closed'.
    Default is the value of 'default_comment_status' option.
  • ping_statusstring
    Whether the post can accept pings. Accepts 'open' or 'closed'.
    Default is the value of 'default_ping_status' option.
  • post_passwordstring
    The password to access the post. Default empty.
  • post_namestring
    The post name. Default is the sanitized post title when creating a new post.
  • to_pingstring
    Space or carriage return-separated list of URLs to ping.
    Default empty.
  • pingedstring
    Space or carriage return-separated list of URLs that have been pinged. Default empty.
  • post_modifiedstring
    The date when the post was last modified. Default is the current time.
  • post_modified_gmtstring
    The date when the post was last modified in the GMT timezone. Default is the current time.
  • post_parentint
    Set this for the post it belongs to, if any. Default 0.
  • menu_orderint
    The order the post should be displayed in. Default 0.
  • post_mime_typestring
    The mime type of the post. Default empty.
  • guidstring
    Global Unique ID for referencing the post. Default empty.
  • import_idint
    The post ID to be used when inserting a new post.
    If specified, must not match any existing post ID. Default 0.
  • post_categoryint[]
    Array of category IDs.
    Defaults to value of the 'default_category' option.
  • tags_inputarray
    Array of tag names, slugs, or IDs. Default empty.
  • tax_inputarray
    An array of taxonomy terms keyed by their taxonomy name.
    If the taxonomy is hierarchical, the term list needs to be either an array of term IDs or a comma-separated string of IDs.
    If the taxonomy is non-hierarchical, the term list can be an array that contains term names or slugs, or a comma-separated string of names or slugs. This is because, in hierarchical taxonomy, child terms can have the same names with different parent terms, so the only way to connect them is using ID. Default empty.
  • meta_inputarray
    Array of post meta values keyed by their post meta key. Default empty.
  • page_templatestring
    Page template to use.

Default: array()

$wp_error bool Optional
Whether to return a WP_Error on failure.

Default: false

$fire_after_hooks bool Optional
Whether to fire the after insert hooks.

Default: true

Return

int|WP_Error The post ID on success. The value 0 or WP_Error on failure.

Source

File: wp-includes/post.php. View all references

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

Uses

Uses Description

Used By

Used By Description

Changelog

Version Description
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.

© 2003–2022 WordPress Foundation
Licensed under the GNU GPLv2+ License.
https://developer.wordpress.org/reference/functions/wp_update_post