Changeset 39328
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/wp-includes/rest-api/fields/class-wp-rest-meta-fields.php
r39251 r39328 66 66 $response = array(); 67 67 68 foreach ( $fields as $name => $args ) { 69 $all_values = get_metadata( $this->get_meta_type(), $object_id, $name, false ); 68 foreach ( $fields as $meta_key => $args ) { 69 $name = $args['name']; 70 $all_values = get_metadata( $this->get_meta_type(), $object_id, $meta_key, false ); 70 71 if ( $args['single'] ) { 71 72 if ( empty( $all_values ) ) { … … 123 124 public function update_value( $request, $object_id ) { 124 125 $fields = $this->get_registered_fields(); 125 foreach ( $fields as $name => $args ) { 126 foreach ( $fields as $meta_key => $args ) { 127 $name = $args['name']; 126 128 if ( ! array_key_exists( $name, $request ) ) { 127 129 continue; … … 133 135 */ 134 136 if ( is_null( $request[ $name ] ) ) { 135 $result = $this->delete_meta_value( $object_id, $ name );137 $result = $this->delete_meta_value( $object_id, $meta_key, $name ); 136 138 if ( is_wp_error( $result ) ) { 137 139 return $result; … … 149 151 150 152 if ( $args['single'] ) { 151 $result = $this->update_meta_value( $object_id, $ name, $value );153 $result = $this->update_meta_value( $object_id, $meta_key, $name, $value ); 152 154 } else { 153 $result = $this->update_multi_meta_value( $object_id, $ name, $value );155 $result = $this->update_multi_meta_value( $object_id, $meta_key, $name, $value ); 154 156 } 155 157 … … 169 171 * 170 172 * @param int $object_id Object ID the field belongs to. 171 * @param string $name Key for the field. 173 * @param string $meta_key Key for the field. 174 * @param string $name Name for the field that is exposed in the REST API. 172 175 * @return bool|WP_Error True if meta field is deleted, WP_Error otherwise. 173 176 */ 174 protected function delete_meta_value( $object_id, $ name ) {177 protected function delete_meta_value( $object_id, $meta_key, $name ) { 175 178 $meta_type = $this->get_meta_type(); 176 if ( ! current_user_can( "delete_{$meta_type}_meta", $object_id, $ name) ) {179 if ( ! current_user_can( "delete_{$meta_type}_meta", $object_id, $meta_key ) ) { 177 180 return new WP_Error( 178 181 'rest_cannot_delete', … … 183 186 } 184 187 185 if ( ! delete_metadata( $meta_type, $object_id, wp_slash( $ name) ) ) {188 if ( ! delete_metadata( $meta_type, $object_id, wp_slash( $meta_key ) ) ) { 186 189 return new WP_Error( 187 190 'rest_meta_database_error', … … 203 206 * 204 207 * @param int $object_id Object ID to update. 205 * @param string $name Key for the custom field. 208 * @param string $meta_key Key for the custom field. 209 * @param string $name Name for the field that is exposed in the REST API. 206 210 * @param array $values List of values to update to. 207 211 * @return bool|WP_Error True if meta fields are updated, WP_Error otherwise. 208 212 */ 209 protected function update_multi_meta_value( $object_id, $ name, $values ) {213 protected function update_multi_meta_value( $object_id, $meta_key, $name, $values ) { 210 214 $meta_type = $this->get_meta_type(); 211 if ( ! current_user_can( "edit_{$meta_type}_meta", $object_id, $ name) ) {215 if ( ! current_user_can( "edit_{$meta_type}_meta", $object_id, $meta_key ) ) { 212 216 return new WP_Error( 213 217 'rest_cannot_update', … … 218 222 } 219 223 220 $current = get_metadata( $meta_type, $object_id, $ name, false );224 $current = get_metadata( $meta_type, $object_id, $meta_key, false ); 221 225 222 226 $to_remove = $current; … … 245 249 246 250 foreach ( $to_remove as $value ) { 247 if ( ! delete_metadata( $meta_type, $object_id, wp_slash( $ name), wp_slash( $value ) ) ) {251 if ( ! delete_metadata( $meta_type, $object_id, wp_slash( $meta_key ), wp_slash( $value ) ) ) { 248 252 return new WP_Error( 249 253 'rest_meta_database_error', … … 255 259 256 260 foreach ( $to_add as $value ) { 257 if ( ! add_metadata( $meta_type, $object_id, wp_slash( $ name), wp_slash( $value ) ) ) {261 if ( ! add_metadata( $meta_type, $object_id, wp_slash( $meta_key ), wp_slash( $value ) ) ) { 258 262 return new WP_Error( 259 263 'rest_meta_database_error', … … 274 278 * 275 279 * @param int $object_id Object ID to update. 276 * @param string $name Key for the custom field. 280 * @param string $meta_key Key for the custom field. 281 * @param string $name Name for the field that is exposed in the REST API. 277 282 * @param mixed $value Updated value. 278 283 * @return bool|WP_Error True if the meta field was updated, WP_Error otherwise. 279 284 */ 280 protected function update_meta_value( $object_id, $ name, $value ) {285 protected function update_meta_value( $object_id, $meta_key, $name, $value ) { 281 286 $meta_type = $this->get_meta_type(); 282 if ( ! current_user_can( "edit_{$meta_type}_meta", $object_id, $ name) ) {287 if ( ! current_user_can( "edit_{$meta_type}_meta", $object_id, $meta_key ) ) { 283 288 return new WP_Error( 284 289 'rest_cannot_update', … … 289 294 } 290 295 291 $meta_key = wp_slash( $ name);296 $meta_key = wp_slash( $meta_key ); 292 297 $meta_value = wp_slash( $value ); 293 298 … … 365 370 } 366 371 367 $registered[ $ rest_args['name']] = $rest_args;372 $registered[ $name ] = $rest_args; 368 373 } 369 374 … … 389 394 ); 390 395 391 foreach ( $fields as $ key => $args ) {392 $schema['properties'][ $ key] = $args['schema'];396 foreach ( $fields as $args ) { 397 $schema['properties'][ $args['name'] ] = $args['schema']; 393 398 } 394 399 -
trunk/tests/phpunit/tests/rest-api/rest-post-meta-fields.php
r39222 r39328 80 80 )); 81 81 82 register_meta( 'post', 'test_custom_name', array( 83 'single' => true, 84 'type' => 'string', 85 'show_in_rest' => array( 86 'name' => 'new_name', 87 ), 88 )); 89 90 register_meta( 'post', 'test_custom_name_multi', array( 91 'single' => false, 92 'type' => 'string', 93 'show_in_rest' => array( 94 'name' => 'new_name_multi', 95 ), 96 )); 97 82 98 /** @var WP_REST_Server $wp_rest_server */ 83 99 global $wp_rest_server; … … 226 242 $this->assertInternalType( 'boolean', $meta['test_bool'] ); 227 243 $this->assertSame( true, $meta['test_bool'] ); 244 } 245 246 public function test_get_value_custom_name() { 247 add_post_meta( self::$post_id, 'test_custom_name', 'janet' ); 248 249 $request = new WP_REST_Request( 'GET', sprintf( '/wp/v2/posts/%d', self::$post_id ) ); 250 $response = $this->server->dispatch( $request ); 251 252 $this->assertEquals( 200, $response->get_status() ); 253 254 $data = $response->get_data(); 255 $this->assertArrayHasKey( 'meta', $data ); 256 257 $meta = (array) $data['meta']; 258 $this->assertArrayHasKey( 'new_name', $meta ); 259 $this->assertEquals( 'janet', $meta['new_name'] ); 228 260 } 229 261 … … 682 714 } 683 715 716 /** 717 * @depends test_get_value_custom_name 718 */ 719 public function test_set_value_custom_name() { 720 // Ensure no data exists currently. 721 $values = get_post_meta( self::$post_id, 'test_custom_name', false ); 722 $this->assertEmpty( $values ); 723 724 $this->grant_write_permission(); 725 726 $data = array( 727 'meta' => array( 728 'new_name' => 'janet', 729 ), 730 ); 731 $request = new WP_REST_Request( 'POST', sprintf( '/wp/v2/posts/%d', self::$post_id ) ); 732 $request->set_body_params( $data ); 733 734 $response = $this->server->dispatch( $request ); 735 $this->assertEquals( 200, $response->get_status() ); 736 737 $meta = get_post_meta( self::$post_id, 'test_custom_name', false ); 738 $this->assertNotEmpty( $meta ); 739 $this->assertCount( 1, $meta ); 740 $this->assertEquals( 'janet', $meta[0] ); 741 742 $data = $response->get_data(); 743 $meta = (array) $data['meta']; 744 $this->assertArrayHasKey( 'new_name', $meta ); 745 $this->assertEquals( 'janet', $meta['new_name'] ); 746 } 747 748 public function test_set_value_custom_name_multiple() { 749 // Ensure no data exists currently. 750 $values = get_post_meta( self::$post_id, 'test_custom_name_multi', false ); 751 $this->assertEmpty( $values ); 752 753 $this->grant_write_permission(); 754 755 $data = array( 756 'meta' => array( 757 'new_name_multi' => array( 'janet' ), 758 ), 759 ); 760 $request = new WP_REST_Request( 'POST', sprintf( '/wp/v2/posts/%d', self::$post_id ) ); 761 $request->set_body_params( $data ); 762 763 $response = $this->server->dispatch( $request ); 764 $this->assertEquals( 200, $response->get_status() ); 765 766 $meta = get_post_meta( self::$post_id, 'test_custom_name_multi', false ); 767 $this->assertNotEmpty( $meta ); 768 $this->assertCount( 1, $meta ); 769 $this->assertEquals( 'janet', $meta[0] ); 770 771 // Add another value. 772 $data = array( 773 'meta' => array( 774 'new_name_multi' => array( 'janet', 'graeme' ), 775 ), 776 ); 777 $request->set_body_params( $data ); 778 779 $response = $this->server->dispatch( $request ); 780 $this->assertEquals( 200, $response->get_status() ); 781 782 $meta = get_post_meta( self::$post_id, 'test_custom_name_multi', false ); 783 $this->assertNotEmpty( $meta ); 784 $this->assertCount( 2, $meta ); 785 $this->assertContains( 'janet', $meta ); 786 $this->assertContains( 'graeme', $meta ); 787 } 788 684 789 public function test_remove_multi_value_db_error() { 685 790 add_post_meta( self::$post_id, 'test_multi', 'val1' ); … … 792 897 } 793 898 899 public function test_delete_value_custom_name() { 900 add_post_meta( self::$post_id, 'test_custom_name', 'janet' ); 901 $current = get_post_meta( self::$post_id, 'test_custom_name', true ); 902 $this->assertEquals( 'janet', $current ); 903 904 $this->grant_write_permission(); 905 906 $data = array( 907 'meta' => array( 908 'new_name' => null, 909 ), 910 ); 911 $request = new WP_REST_Request( 'POST', sprintf( '/wp/v2/posts/%d', self::$post_id ) ); 912 $request->set_body_params( $data ); 913 914 $response = $this->server->dispatch( $request ); 915 $this->assertEquals( 200, $response->get_status() ); 916 917 $meta = get_post_meta( self::$post_id, 'test_custom_name', false ); 918 $this->assertEmpty( $meta ); 919 } 920 794 921 public function test_get_schema() { 795 922 $request = new WP_REST_Request( 'OPTIONS', sprintf( '/wp/v2/posts/%d', self::$post_id ) );
Note: See TracChangeset
for help on using the changeset viewer.