WP_REST_Posts_Controller::prepare_item_for_database() – Prepares a single post for create or update.

You appear to be a bot. Output may be restricted

Description

Prepares a single post for create or update.

Usage

$stdClass|WP_Error = WP_REST_Posts_Controller::prepare_item_for_database( $request );

Parameters

$request
( WP_REST_Request ) required – Request object.

Returns

stdClass|WP_Error Post object or WP_Error.

Source

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


Lines:

1 to 100 of 219
  protected function prepare_item_for_database( $request ) {
    $prepared_post  = new stdClass();
    $current_status = '';

    // Post ID.
    if ( isset( $request['id'] ) ) {
      $existing_post = $this->WP_REST_Posts_Controller::get_post( $request['id'] );
      if ( is_wp_error( $existing_post ) ) {
        return $existing_post;
      }

      $prepared_post->ID = $existing_post->ID;
      $current_status    = $existing_post->post_status;
    }

    $schema = $this->WP_REST_Posts_Controller::get_item_schema();

    // Post title.
    if ( ! empty( $schema['properties']['title'] ) && isset( $request['title'] ) ) {
      if ( is_string( $request['title'] ) ) {
        $prepared_post->post_title = $request['title'];
      } elseif ( ! empty( $request['title']['raw'] ) ) {
        $prepared_post->post_title = $request['title']['raw'];
      }
    }

    // Post content.
    if ( ! empty( $schema['properties']['content'] ) && isset( $request['content'] ) ) {
      if ( is_string( $request['content'] ) ) {
        $prepared_post->post_content = $request['content'];
      } elseif ( isset( $request['content']['raw'] ) ) {
        $prepared_post->post_content = $request['content']['raw'];
      }
    }

    // Post excerpt.
    if ( ! empty( $schema['properties']['excerpt'] ) && isset( $request['excerpt'] ) ) {
      if ( is_string( $request['excerpt'] ) ) {
        $prepared_post->post_excerpt = $request['excerpt'];
      } elseif ( isset( $request['excerpt']['raw'] ) ) {
        $prepared_post->post_excerpt = $request['excerpt']['raw'];
      }
    }

    // Post type.
    if ( empty( $request['id'] ) ) {
      // Creating new post, use default type for the controller.
      $prepared_post->post_type = $this->post_type;
    } else {
      // Updating a post, use previous type.
      $prepared_post->post_type = get_post_type( $request['id'] );
    }

    $post_type = get_post_type_object( $prepared_post->post_type );

    // Post status.
    if (
      ! empty( $schema['properties']['status'] ) &&
      isset( $request['status'] ) &&
      ( ! $current_status || $current_status !== $request['status'] )
    ) {
      $status = $this->WP_REST_Posts_Controller::handle_status_param( $request['status'], $post_type );

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

      $prepared_post->post_status = $status;
    }

    // Post date.
    if ( ! empty( $schema['properties']['date'] ) && ! empty( $request['date'] ) ) {
      $current_date = isset( $prepared_post->ID ) ? WP_REST_Posts_Controller::get_post( $prepared_post->ID )->post_date : false;
      $date_data    = rest_get_date_with_gmt( $request['date'] );

      if ( ! empty( $date_data ) && $current_date !== $date_data[0] ) {
        list( $prepared_post->post_date, $prepared_post->post_date_gmt ) = $date_data;
        $prepared_post->edit_date                                        = true;
      }
    } elseif ( ! empty( $schema['properties']['date_gmt'] ) && ! empty( $request['date_gmt'] ) ) {
      $current_date = isset( $prepared_post->ID ) ? WP_REST_Posts_Controller::get_post( $prepared_post->ID )->post_date_gmt : false;
      $date_data    = rest_get_date_with_gmt( $request['date_gmt'], true );

      if ( ! empty( $date_data ) && $current_date !== $date_data[1] ) {
        list( $prepared_post->post_date, $prepared_post->post_date_gmt ) = $date_data;
        $prepared_post->edit_date                                        = true;
      }
    }

    /*
		 * Sending a null date or date_gmt value resets date and date_gmt to their
		 * default values (`0000-00-00 00:00:00`).
		 */
    if (
      ( ! empty( $schema['properties']['date_gmt'] ) && $request->has_param( 'date_gmt' ) && null === $request['date_gmt'] ) ||
      ( ! empty( $schema['properties']['date'] ) && $request->has_param( 'date' ) && null === $request['date'] )
    ) {
      $prepared_post->post_date_gmt = null;
      $prepared_post->post_date     = null;
    }

 View on GitHub View on Trac