WP_REST_Autosaves_Controller::create_item( WP_REST_Request $request ): WP_REST_Response|WP_Error

In this article

Creates, updates or deletes an autosave revision.

Parameters

$requestWP_REST_Requestrequired
Full details about the request.

Return

WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.

Source

public function create_item( $request ) {

	if ( ! defined( 'WP_RUN_CORE_TESTS' ) && ! defined( 'DOING_AUTOSAVE' ) ) {
		define( 'DOING_AUTOSAVE', true );
	}

	$post = $this->get_parent( $request['id'] );

	if ( is_wp_error( $post ) ) {
		return $post;
	}

	$prepared_post     = $this->parent_controller->prepare_item_for_database( $request );
	$prepared_post->ID = $post->ID;
	$user_id           = get_current_user_id();

	// We need to check post lock to ensure the original author didn't leave their browser tab open.
	if ( ! function_exists( 'wp_check_post_lock' ) ) {
		require_once ABSPATH . 'wp-admin/includes/post.php';
	}

	$post_lock = wp_check_post_lock( $post->ID );
	$is_draft  = 'draft' === $post->post_status || 'auto-draft' === $post->post_status;

	if ( $is_draft && (int) $post->post_author === $user_id && ! $post_lock ) {
		/*
		 * Draft posts for the same author: autosaving updates the post and does not create a revision.
		 * Convert the post object to an array and add slashes, wp_update_post() expects escaped array.
		 */
		$autosave_id = wp_update_post( wp_slash( (array) $prepared_post ), true );
	} else {
		// Non-draft posts: create or update the post autosave. Pass the meta data.
		$autosave_id = $this->create_post_autosave( (array) $prepared_post, (array) $request->get_param( 'meta' ) );
	}

	if ( is_wp_error( $autosave_id ) ) {
		return $autosave_id;
	}

	$autosave = get_post( $autosave_id );
	$request->set_param( 'context', 'edit' );

	$response = $this->prepare_item_for_response( $autosave, $request );
	$response = rest_ensure_response( $response );

	return $response;
}

Changelog

VersionDescription
5.0.0Introduced.

User Contributed Notes

You must log in before being able to contribute a note or feedback.