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

4710
4711
4712
4713
4714
4715
4716
4717
4718
4719
4720
4721
4722
4723
4724
4725
4726
4727
4728
4729
4730
4731
4732
4733
4734
4735
4736
4737
4738
4739
4740
4741
4742
4743
4744
4745
4746
4747
4748
4749
4750
4751
4752
4753
4754
4755
4756
4757
4758
4759
4760
4761
4762
4763
4764
4765
4766
4767
4768
4769
4770
4771
4772
4773
4774
4775
4776
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