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
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 ); } |
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. |