WP_REST_Attachments_Controller::edit_media_item() – Applies edits to a media item and creates a new attachment record.

You appear to be a bot. Output may be restricted

Description

Applies edits to a media item and creates a new attachment record.

Usage

$WP_REST_Response|WP_Error = WP_REST_Attachments_Controller::edit_media_item( $request );

Parameters

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

Returns

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

Source

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


Lines:

1 to 100 of 255
  public function edit_media_item( $request ) {
    require_once ABSPATH . 'wp-admin/includes/image.php';

    $attachment_id = $request['id'];

    // This also confirms the attachment is an image.
    $image_file = wp_get_original_image_path( $attachment_id );
    $image_meta = wp_get_attachment_metadata( $attachment_id );

    if (
      ! $image_meta ||
      ! $image_file ||
      ! wp_image_file_matches_image_meta( $request['src'], $image_meta, $attachment_id )
    ) {
      return new WP_Error(
        'rest_unknown_attachment',
        __( 'Unable to get meta information for file.' ),
        array( 'status' => 404 )
      );
    }

    $supported_types = array( 'image/jpeg', 'image/png', 'image/gif', 'image/webp' );
    $mime_type       = get_post_mime_type( $attachment_id );
    if ( ! in_array( $mime_type, $supported_types, true ) ) {
      return new WP_Error(
        'rest_cannot_edit_file_type',
        __( 'This type of file cannot be edited.' ),
        array( 'status' => 400 )
      );
    }

    // The `modifiers` param takes precedence over the older format.
    if ( isset( $request['modifiers'] ) ) {
      $modifiers = $request['modifiers'];
    } else {
      $modifiers = array();

      if ( ! empty( $request['rotation'] ) ) {
        $modifiers[] = array(
          'type' => 'rotate',
          'args' => array(
            'angle' => $request['rotation'],
          ),
        );
      }

      if ( isset( $request['x'], $request['y'], $request['width'], $request['height'] ) ) {
        $modifiers[] = array(
          'type' => 'crop',
          'args' => array(
            'left'   => $request['x'],
            'top'    => $request['y'],
            'width'  => $request['width'],
            'height' => $request['height'],
          ),
        );
      }

      if ( 0 === count( $modifiers ) ) {
        return new WP_Error(
          'rest_image_not_edited',
          __( 'The image was not edited. Edit the image before applying the changes.' ),
          array( 'status' => 400 )
        );
      }
    }

    /*
		 * If the file doesn't exist, attempt a URL fopen on the src link.
		 * This can occur with certain file replication plugins.
		 * Keep the original file path to get a modified name later.
		 */
    $image_file_to_edit = $image_file;
    if ( ! file_exists( $image_file_to_edit ) ) {
      $image_file_to_edit = _load_image_to_edit_path( $attachment_id );
    }

    $image_editor = wp_get_image_editor( $image_file_to_edit );

    if ( is_wp_error( $image_editor ) ) {
      return new WP_Error(
        'rest_unknown_image_file_type',
        __( 'Unable to edit this image.' ),
        array( 'status' => 500 )
      );
    }

    foreach ( $modifiers as $modifier ) {
      $args = $modifier['args'];
      switch ( $modifier['type'] ) {
        case 'rotate':
          // Rotation direction: clockwise vs. counter clockwise.
          $rotate = 0 - $args['angle'];

          if ( 0 !== $rotate ) {
            $result = $image_editor->rotate( $rotate );

            if ( is_wp_error( $result ) ) {
              return new WP_Error(
                'rest_image_rotation_failed',

 View on GitHub View on Trac