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.
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
Return
(int|WP_Error) The post ID on success. The value 0 or WP_Error on failure.
Source
File: wp-includes/post.php
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 ); }
Expand full source codeCollapse full source codeView on TracView on GitHub
Changelog
Version | Description |
---|---|
5.6.0 | Added the $fire_after_hooks parameter. |
3.5.0 | Added the $wp_error parameter to allow a WP_Error to be returned on failure. |
1.0.0 | Introduced. |