On this page
wp_autosave( array $post_data ): mixed
Saves a post submitted with XHR.
Description
Intended for use with heartbeat and autosave.js
Parameters
$post_dataarray Required-
Associative array of the submitted post data.
Return
mixed The value 0 or WP_Error on failure. The saved post ID on success.
The ID can be the draft post_id or the autosave revision post_id.
Source
File: wp-admin/includes/post.php. View all references
function wp_autosave( $post_data ) {
// Back-compat.
if ( ! defined( 'DOING_AUTOSAVE' ) ) {
define( 'DOING_AUTOSAVE', true );
}
$post_id = (int) $post_data['post_id'];
$post_data['ID'] = $post_id;
$post_data['post_ID'] = $post_id;
if ( false === wp_verify_nonce( $post_data['_wpnonce'], 'update-post_' . $post_id ) ) {
return new WP_Error( 'invalid_nonce', __( 'Error while saving.' ) );
}
$post = get_post( $post_id );
if ( ! current_user_can( 'edit_post', $post->ID ) ) {
return new WP_Error( 'edit_posts', __( 'Sorry, you are not allowed to edit this item.' ) );
}
if ( 'auto-draft' === $post->post_status ) {
$post_data['post_status'] = 'draft';
}
if ( 'page' !== $post_data['post_type'] && ! empty( $post_data['catslist'] ) ) {
$post_data['post_category'] = explode( ',', $post_data['catslist'] );
}
if ( ! wp_check_post_lock( $post->ID ) && get_current_user_id() == $post->post_author
&& ( 'auto-draft' === $post->post_status || 'draft' === $post->post_status )
) {
// Drafts and auto-drafts are just overwritten by autosave for the same user if the post is not locked.
return edit_post( wp_slash( $post_data ) );
} else {
// Non-drafts or other users' drafts are not overwritten.
// The autosave is stored in a special post revision for each user.
return wp_create_post_autosave( wp_slash( $post_data ) );
}
}
Related
Uses
| Uses | Description |
|---|---|
| wp_check_post_lock() wp-admin/includes/post.php | Determines whether the post is currently being edited by another user. |
| wp_create_post_autosave() wp-admin/includes/post.php | Creates autosave data for the specified post from |
| edit_post() wp-admin/includes/post.php | Updates an existing post with values provided in |
| wp_verify_nonce() wp-includes/pluggable.php | Verifies that a correct security nonce was used with time limit. |
| current_user_can() wp-includes/capabilities.php | Returns whether the current user has the specified capability. |
| __() 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_current_user_id() wp-includes/user.php | Gets the current user’s ID. |
| get_post() wp-includes/post.php | Retrieves post data given a post ID or post object. |
| WP_Error::__construct() wp-includes/class-wp-error.php | Initializes the error. |
Used By
| Used By | Description |
|---|---|
| heartbeat_autosave() wp-admin/includes/misc.php | Performs autosave with heartbeat. |
Changelog
| Version | Description |
|---|---|
| 3.9.0 | Introduced. |
© 2003–2022 WordPress Foundation
Licensed under the GNU GPLv2+ License.
https://developer.wordpress.org/reference/functions/wp_autosave