REST API: Allow meta to be set when creating a new media record via REST.

Props TimothyBlynJacobs, apermo.
Fixes #44567.


git-svn-id: https://develop.svn.wordpress.org/trunk@47261 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
K. Adam White 2020-02-11 03:37:17 +00:00
parent fc434a0c77
commit 886a02686b
2 changed files with 39 additions and 0 deletions

View File

@ -141,6 +141,8 @@ class WP_REST_Attachments_Controller extends WP_REST_Posts_Controller {
return $insert;
}
$schema = $this->get_item_schema();
// Extract by name.
$attachment_id = $insert['attachment_id'];
$file = $insert['file'];
@ -149,6 +151,14 @@ class WP_REST_Attachments_Controller extends WP_REST_Posts_Controller {
update_post_meta( $attachment_id, '_wp_attachment_image_alt', sanitize_text_field( $request['alt_text'] ) );
}
if ( ! empty( $schema['properties']['meta'] ) && isset( $request['meta'] ) ) {
$meta_update = $this->meta->update_value( $request['meta'], $attachment_id );
if ( is_wp_error( $meta_update ) ) {
return $meta_update;
}
}
$attachment = get_post( $attachment_id );
$fields_update = $this->update_additional_fields_for_object( $attachment, $request );

View File

@ -1740,6 +1740,35 @@ class WP_Test_REST_Attachments_Controller extends WP_Test_REST_Post_Type_Control
$this->assertSame( 1, self::$rest_after_insert_attachment_count );
}
/**
* @ticket 44567
*/
public function test_create_item_with_meta_values() {
register_post_meta(
'attachment',
'best_cannoli',
array(
'type' => 'string',
'single' => true,
'show_in_rest' => true,
)
);
wp_set_current_user( self::$author_id );
$request = new WP_REST_Request( 'POST', '/wp/v2/media' );
$request->set_header( 'Content-Type', 'image/jpeg' );
$request->set_header( 'Content-Disposition', 'attachment; filename=cannoli.jpg' );
$request->set_param( 'meta', array( 'best_cannoli' => 'Chocolate-dipped, no filling' ) );
$request->set_body( file_get_contents( $this->test_file ) );
$response = rest_get_server()->dispatch( $request );
$data = $response->get_data();
$this->assertEquals( 201, $response->get_status() );
$this->assertEquals( 'Chocolate-dipped, no filling', get_post_meta( $response->get_data()['id'], 'best_cannoli', true ) );
}
public function filter_rest_insert_attachment( $attachment ) {
self::$rest_insert_attachment_count++;
}