wp_update_post() – Update a post with new post data.

You appear to be a bot. Output may be restricted

Description

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.

Usage

$int|WP_Error = wp_update_post( $postarr, $wp_error, $fire_after_hooks );

Parameters

$postarr
( array|object ) optional – Optional. Post data. Arrays are expected to be escaped, objects are not. See wp_insert_post() for accepted arguments. Default array.
$wp_error
( bool ) optional – Optional. Whether to return a WP_Error on failure. Default false.
$fire_after_hooks
( bool ) optional default: 1 – Optional. Whether to fire the after insert hooks. Default true.

Returns

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

Source

File name: wordpress/wp-includes/post.php
Lines:

1 to 67 of 67
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 );
}
 

 View on GitHub View on Trac