wp_update_post() WordPress Function

The wp_update_post() function is used to update a post in the WordPress database. This function takes two arguments: the post ID of the post to update, and an array of data containing the updated post data. This function can be used to update any post field, including the post title, content, excerpt, status, and more. Updating a post is a two-step process: first, the post is updated in the database, and then the post is reloaded from the database and returned to the caller. The wp_update_post() function is the preferred way to update a post in WordPress. It is more efficient than using the get_post() function to load a post from the database, and then using the wp_insert_post() or wp_update_post() function to save the updated post back to the database.

wp_update_post( array|object $postarr = array(), bool $wp_error = false, bool $fire_after_hooks = true ) #

Update 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.


Top ↑

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.

Default value: array()

$wp_error

(bool)(Optional) Whether to return a WP_Error on failure.

Default value: false

$fire_after_hooks

(bool)(Optional) Whether to fire the after insert hooks.

Default value: true


Top ↑

Return

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


Top ↑

Source

File: wp-includes/post.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 );
}


Top ↑

Changelog

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

The content displayed on this page has been created in part by processing WordPress source code files which are made available under the GPLv2 (or a later version) license by theĀ Free Software Foundation. In addition to this, the content includes user-written examples and information. All material is subject to review and curation by the WPPaste.com community.

Show More
Show More