Make WordPress Core

Changeset 39058


Ignore:
Timestamp:
10/31/2016 04:06:54 PM (9 years ago)
Author:
joehoyle
Message:

REST API: Add support for "integer" type for meta and options

Previously Settings only supported "number" which meant it was possible to push floats to things like posts_per_page. This means now developers can also specify type => ineger in meta nad settings resgration.

Props flixos90.
Fixes #38393.

Location:
trunk
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-includes/option.php

    r38971 r39058  
    17821782    register_setting( 'general', 'start_of_week', array(
    17831783        'show_in_rest' => true,
    1784         'type'         => 'number',
     1784        'type'         => 'integer',
    17851785        'description'  => __( 'A day number of the week that the week should start on.' ),
    17861786    ) );
     
    18041804    register_setting( 'writing', 'default_category', array(
    18051805        'show_in_rest' => true,
    1806         'type'         => 'number',
     1806        'type'         => 'integer',
    18071807        'description'  => __( 'Default category.' ),
    18081808    ) );
     
    18161816    register_setting( 'reading', 'posts_per_page', array(
    18171817        'show_in_rest' => true,
    1818         'type'         => 'number',
     1818        'type'         => 'integer',
    18191819        'description'  => __( 'Blog pages show at most.' ),
    18201820        'default'      => 10,
  • trunk/src/wp-includes/rest-api/endpoints/class-wp-rest-settings-controller.php

    r39046 r39058  
    133133            case 'string':
    134134                return (string) $value;
     135            case 'integer':
     136                return (int) $value;
    135137            case 'number':
    136138                return (float) $value;
     
    259261             * to be updated with arbitrary values that we can't do decent sanitizing for.
    260262             */
    261             if ( ! in_array( $rest_args['schema']['type'], array( 'number', 'string', 'boolean' ), true ) ) {
     263            if ( ! in_array( $rest_args['schema']['type'], array( 'number', 'integer', 'string', 'boolean' ), true ) ) {
    262264                continue;
    263265            }
  • trunk/src/wp-includes/rest-api/fields/class-wp-rest-meta-fields.php

    r39022 r39058  
    405405                $value = (string) $value;
    406406                break;
     407            case 'integer':
     408                $value = (int) $value;
     409                break;
    407410            case 'number':
    408411                $value = (float) $value;
  • trunk/tests/phpunit/tests/rest-api/rest-settings-controller.php

    r38982 r39058  
    268268    }
    269269
     270    public function test_update_item_with_integer() {
     271        wp_set_current_user( self::$administrator );
     272        $request = new WP_REST_Request( 'PUT', '/wp/v2/settings' );
     273        $request->set_param( 'posts_per_page', 11 );
     274        $response = $this->server->dispatch( $request );
     275        $this->assertEquals( 200, $response->get_status() );
     276    }
     277
     278    public function test_update_item_with_invalid_float_for_integer() {
     279        wp_set_current_user( self::$administrator );
     280        $request = new WP_REST_Request( 'PUT', '/wp/v2/settings' );
     281        $request->set_param( 'posts_per_page', 10.5 );
     282        $response = $this->server->dispatch( $request );
     283        $this->assertErrorResponse( 'rest_invalid_param', $response, 400 );
     284    }
     285
    270286    /**
    271287     * Setting an item to "null" will essentially restore it to it's default value.
Note: See TracChangeset for help on using the changeset viewer.