On this page
wp_update_post( array|object $postarr = array(), bool $wp_error = false, bool $fire_after_hooks = true ): int|WP_Error
Updates 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
$postarrarray|object Optional-
Post data. Arrays are expected to be escaped, objects are not. See wp_insert_post() for accepted arguments.
Default array.More Arguments from wp_insert_post( ... $postarr )
An array of elements that make up a post to update or insert.
IDintThe post ID. If equal to something other than 0, the post with that ID will be updated. Default 0.post_authorintThe ID of the user who added the post. Default is the current user ID.post_datestringThe date of the post. Default is the current time.post_date_gmtstringThe date of the post in the GMT timezone. Default is the value of$post_date.post_contentstringThe post content. Default empty.post_content_filteredstringThe filtered post content. Default empty.post_titlestringThe post title. Default empty.post_excerptstringThe post excerpt. Default empty.post_statusstringThe post status. Default'draft'.post_typestringThe post type. Default'post'.comment_statusstringWhether the post can accept comments. Accepts'open'or'closed'.
Default is the value of'default_comment_status'option.ping_statusstringWhether the post can accept pings. Accepts'open'or'closed'.
Default is the value of'default_ping_status'option.post_passwordstringThe password to access the post. Default empty.post_namestringThe post name. Default is the sanitized post title when creating a new post.to_pingstringSpace or carriage return-separated list of URLs to ping.
Default empty.pingedstringSpace or carriage return-separated list of URLs that have been pinged. Default empty.post_modifiedstringThe date when the post was last modified. Default is the current time.post_modified_gmtstringThe date when the post was last modified in the GMT timezone. Default is the current time.post_parentintSet this for the post it belongs to, if any. Default 0.menu_orderintThe order the post should be displayed in. Default 0.post_mime_typestringThe mime type of the post. Default empty.guidstringGlobal Unique ID for referencing the post. Default empty.import_idintThe post ID to be used when inserting a new post.
If specified, must not match any existing post ID. Default 0.post_categoryint[]Array of category IDs.
Defaults to value of the'default_category'option.tags_inputarrayArray of tag names, slugs, or IDs. Default empty.tax_inputarrayAn array of taxonomy terms keyed by their taxonomy name.
If the taxonomy is hierarchical, the term list needs to be either an array of term IDs or a comma-separated string of IDs.
If the taxonomy is non-hierarchical, the term list can be an array that contains term names or slugs, or a comma-separated string of names or slugs. This is because, in hierarchical taxonomy, child terms can have the same names with different parent terms, so the only way to connect them is using ID. Default empty.meta_inputarrayArray of post meta values keyed by their post meta key. Default empty.page_templatestringPage template to use.
Default:
array() $wp_errorbool Optional-
Whether to return a WP_Error on failure.
Default:
false $fire_after_hooksbool Optional-
Whether to fire the after insert hooks.
Default:
true
Return
int|WP_Error The post ID on success. The value 0 or WP_Error on failure.
Source
File: wp-includes/post.php. View all references
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 );
}
Related
Uses
| Uses | Description |
|---|---|
| get_the_terms() wp-includes/category-template.php | Retrieves the terms of the taxonomy that are attached to the post. |
| wp_list_pluck() wp-includes/functions.php | Plucks a certain field out of each object or array in an array. |
| current_time() wp-includes/functions.php | Retrieves the current time based on specified type. |
| is_object_in_taxonomy() wp-includes/taxonomy.php | Determines if the given object type is associated with the given taxonomy. |
| wp_insert_attachment() wp-includes/post.php | Inserts an attachment. |
| wp_insert_post() wp-includes/post.php | Inserts or update a post. |
| __() wp-includes/l10n.php | Retrieves the translation of $text. |
| wp_slash() wp-includes/formatting.php | Adds slashes to a string or recursively adds slashes to strings within an array. |
| get_post() wp-includes/post.php | Retrieves post data given a post ID or post object. |
| is_wp_error() wp-includes/load.php | Checks whether the given variable is a WordPress Error. |
| WP_Error::__construct() wp-includes/class-wp-error.php | Initializes the error. |
Used By
| Used By | Description |
|---|---|
| WP_REST_Global_Styles_Controller::update_item() wp-includes/rest-api/endpoints/class-wp-rest-global-styles-controller.php | Updates a single global style config. |
| wp_set_unique_slug_on_create_template_part() wp-includes/theme-templates.php | Sets a custom slug when creating auto-draft template parts. |
| WP_REST_Templates_Controller::update_item() wp-includes/rest-api/endpoints/class-wp-rest-templates-controller.php | Updates a single template. |
| WP_REST_Autosaves_Controller::create_item() wp-includes/rest-api/endpoints/class-wp-rest-autosaves-controller.php | Creates, updates or deletes an autosave revision. |
| WP_REST_Autosaves_Controller::create_post_autosave() wp-includes/rest-api/endpoints/class-wp-rest-autosaves-controller.php | Creates autosave for the specified post. |
| wp_generate_user_request_key() wp-includes/user.php | Returns a confirmation key for a user action and stores the hashed version for future comparison. |
| _wp_privacy_account_request_confirmed() wp-includes/user.php | Updates log when privacy request is confirmed. |
| _wp_privacy_completed_request() wp-admin/includes/privacy-tools.php | Marks a request as completed by the admin and logs the current timestamp. |
| _wp_personal_data_cleanup_requests() wp-admin/includes/privacy-tools.php | Cleans up failed and expired requests before displaying the list table. |
| WP_Customize_Manager::save_changeset_post() wp-includes/class-wp-customize-manager.php | Saves the post for the loaded changeset. |
| wp_update_custom_css_post() wp-includes/theme.php | Updates the |
| WP_REST_Posts_Controller::update_item() wp-includes/rest-api/endpoints/class-wp-rest-posts-controller.php | Updates a single post. |
| WP_Customize_Nav_Menus::save_nav_menus_created_posts() wp-includes/class-wp-customize-nav-menus.php | Publishes the auto-draft posts that were created for nav menu items. |
| media_upload_form_handler() wp-admin/includes/media.php | Handles form submissions for the legacy media uploader. |
| wp_create_post_autosave() wp-admin/includes/post.php | Creates autosave data for the specified post from |
| _fix_attachment_links() wp-admin/includes/post.php | Replaces hrefs of attachment anchors with up-to-date permalinks. |
| edit_post() wp-admin/includes/post.php | Updates an existing post with values provided in |
| bulk_edit_posts() wp-admin/includes/post.php | Processes the post data for the bulk editing of posts. |
| wp_ajax_save_attachment_order() wp-admin/includes/ajax-actions.php | Ajax handler for saving the attachment order. |
| wp_ajax_send_attachment_to_editor() wp-admin/includes/ajax-actions.php | Ajax handler for sending an attachment to the editor. |
| wp_ajax_save_attachment() wp-admin/includes/ajax-actions.php | Ajax handler for updating attachment attributes. |
| wp_ajax_save_attachment_compat() wp-admin/includes/ajax-actions.php | Ajax handler for saving backward compatible attachment attributes. |
| WP_Embed::shortcode() wp-includes/class-wp-embed.php | The do_shortcode() callback function. |
| wp_check_post_hierarchy_for_loops() wp-includes/post.php | Checks the given subset of the post hierarchy for hierarchy loops. |
| wp_trash_post() wp-includes/post.php | Moves a post or page to the Trash |
| wp_untrash_post() wp-includes/post.php | Restores a post from the Trash. |
| wp_restore_post_revision() wp-includes/revision.php | Restores a post to the specified revision. |
| wp_update_nav_menu_item() wp-includes/nav-menu.php | Saves the properties of a menu item or create a new one. |
| wp_xmlrpc_server::mt_publishPost() wp-includes/class-wp-xmlrpc-server.php | Sets a post’s publish status to ‘publish’. |
| wp_xmlrpc_server::mw_editPost() wp-includes/class-wp-xmlrpc-server.php | Edit a post. |
| wp_xmlrpc_server::blogger_editPost() wp-includes/class-wp-xmlrpc-server.php | Edit a post. |
| wp_xmlrpc_server::_insert_post() wp-includes/class-wp-xmlrpc-server.php | Helper method for wp_newPost() and wp_editPost(), containing shared logic. |
Changelog
© 2003–2022 WordPress Foundation
Licensed under the GNU GPLv2+ License.
https://developer.wordpress.org/reference/functions/wp_update_post