Make WordPress Core

Ticket #53099: 53099.diff

File 53099.diff, 3.2 KB (added by david.binda, 4 years ago)
  • src/wp-includes/rest-api/fields/class-wp-rest-meta-fields.php

     
    9494                        } else {
    9595                                $value = array();
    9696
    97                                 foreach ( $all_values as $row ) {
    98                                         $value[] = $this->prepare_value_for_response( $row, $request, $args );
     97                                if ( is_array( $all_values ) ) {
     98                                        foreach ( $all_values as $row ) {
     99                                                $value[] = $this->prepare_value_for_response( $row, $request, $args );
     100                                        }
    99101                                }
    100102                        }
    101103
     
    281283                $current_values = get_metadata( $meta_type, $object_id, $meta_key, false );
    282284                $subtype        = get_object_subtype( $meta_type, $object_id );
    283285
     286                if ( ! is_array( $current_values ) ) {
     287                        $current_values = array();
     288                }
     289
    284290                $to_remove = $current_values;
    285291                $to_add    = $values;
    286292
     
    377383                $old_value = get_metadata( $meta_type, $object_id, $meta_key );
    378384                $subtype   = get_object_subtype( $meta_type, $object_id );
    379385
    380                 if ( 1 === count( $old_value ) && $this->is_meta_value_same_as_stored_value( $meta_key, $subtype, $old_value[0], $value ) ) {
     386                if ( is_array( $old_value ) && 1 === count( $old_value ) && $this->is_meta_value_same_as_stored_value( $meta_key, $subtype, $old_value[0], $value ) ) {
    381387                        return true;
    382388                }
    383389
  • tests/phpunit/tests/rest-api/rest-term-meta-fields.php

     
    12861286        }
    12871287
    12881288        /**
     1289         * @ticket 53099
     1290         */
     1291        public function test_php_warnings() {
     1292                add_filter( 'get_term_metadata', '__return_false', 11 );
     1293
     1294                // No PHP warning during GET request
     1295                add_term_meta( self::$category_id, 'test_single', 'testvalue' );
     1296                $request  = new WP_REST_Request( 'GET', sprintf( '/wp/v2/categories/%d', self::$category_id ) );
     1297                $response = rest_get_server()->dispatch( $request );
     1298
     1299                // No PHP warning during POST request
     1300                $this->grant_write_permission();
     1301                $data    = array(
     1302                        'meta' => array(
     1303                                'test_multi' => array( 'val1' ),
     1304                        ),
     1305                );
     1306                $request = new WP_REST_Request( 'POST', sprintf( '/wp/v2/categories/%d', self::$category_id ) );
     1307                $request->set_body_params( $data );
     1308                $response = rest_get_server()->dispatch( $request );
     1309
     1310                // No PHP warning during validation.
     1311                register_meta(
     1312                        'term',
     1313                        'my_meta_key',
     1314                        array(
     1315                                'show_in_rest' => true,
     1316                                'single'       => true,
     1317                                'type'         => 'integer',
     1318                        )
     1319                );
     1320                $this->grant_write_permission();
     1321                $data    = array(
     1322                        'meta' => array(
     1323                                'my_meta_key' => '1', // Set to a string.
     1324                        ),
     1325                );
     1326                $request = new WP_REST_Request( 'POST', sprintf( '/wp/v2/categories/%d', self::$category_id ) );
     1327                $request->set_body_params( $data );
     1328                $response = rest_get_server()->dispatch( $request );
     1329       
     1330                // For counting tests purposes, let's do a fake assert.
     1331                $this->assertTrue( true );
     1332
     1333                remove_filter( 'get_term_metadata', '__return_false', 11 );
     1334        }
     1335
     1336        /**
    12891337         * Internal function used to disable an insert query which
    12901338         * will trigger a wpdb error for testing purposes.
    12911339         */