A WordPress-centric search engine for devs and theme authors



wp_update_post ›

Since1.0.0
Deprecatedn/a
wp_update_post ( $postarr = array(), $wp_error = false )
Parameters: (2)
  • (array|object) $postarr Optional. Post data. Arrays are expected to be escaped, objects are not. Default array.
    Required: No
    Default: array()
  • (bool) $wp_error Optional. Allow return of WP_Error on failure. Default false.
    Required: No
    Default: false
Returns:
  • (int|WP_Error) The value 0 or WP_Error on failure. The post ID on success.
Defined at:
Codex:

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.



Source

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, false, 0, $wp_error );
	}

	return wp_insert_post( $postarr, $wp_error );
}