wp_update_post()

You are here:

wp_update_post( array|object $postarr = array()bool $wp_error = false )

Update a post with new post data.

Description Description

The date does not have to be set for drafts. You can set the date and it will not be overridden.


Top ↑

Parameters Parameters

$postarr

(array|object) (Optional) Post data. Arrays are expected to be escaped, objects are not. Default array.

Default value: array()

$wp_error

(bool) (Optional) Allow return of WP_Error on failure.

Default value: false


Top ↑

Return Return

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


Top ↑

Source Source

File: wp-includes/post.php

4289
4290
4291
4292
4293
4294
4295
4296
4297
4298
4299
4300
4301
4302
4303
4304
4305
4306
4307
4308
4309
4310
4311
4312
4313
4314
4315
4316
4317
4318
4319
4320
4321
4322
4323
4324
4325
4326
4327
4328
4329
4330
4331
4332
4333
4334
4335
4336
4337
4338
4339
4340
4341
4342
4343
4344
4345
4346
4347
4348
4349
4350
4351
4352
4353
4354
4355
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'] )
        && 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 );
}


Top ↑

Changelog Changelog

Changelog
Version Description
1.0.0 Introduced.
Was this article helpful?
Dislike 0
Views: 21