function wp_update_post($postarr = array() {}

Update a post with new post data.
The date does not have to be set for drafts. You can set the date and it will not be overridden.


  • array|object $postarr: Post data. Arrays are expected to be escaped, objects are not.

Return values

returns:0 on failure, Post ID on success.

Source code

function wp_update_post($postarr = array()) {

	if ( is_object($postarr) ) {

		// non-escaped post was passed

		$postarr = get_object_vars($postarr);

		$postarr = add_magic_quotes($postarr);


	// First, get all of the original fields

	$post = wp_get_single_post($postarr['ID'], ARRAY_A);

	// Escape data pulled from DB.

	$post = add_magic_quotes($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'];


		$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;


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



No comments yet... Be the first to leave a reply!

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: