WP_REST_Autosaves_Controller::create_item() – Creates, updates or deletes an autosave revision.

You appear to be a bot. Output may be restricted

Description

Creates, updates or deletes an autosave revision.

Usage

$WP_REST_Response|WP_Error = WP_REST_Autosaves_Controller::create_item( $request );

Parameters

$request
( WP_REST_Request ) required – Full details about the request.

Returns

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

Source

File name: wordpress/wp-includes/rest-api/endpoints/class-wp-rest-autosaves-controller.php


Lines:

1 to 48 of 48
  public function create_item( $request ) {

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

    $post = get_post( $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.
      $autosave_id = $this->WP_REST_Autosaves_Controller::create_post_autosave( (array) $prepared_post );
    }

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

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

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

    return $response;
  }
 

 View on GitHub View on Trac