Make WordPress Core

Changeset 60357


Ignore:
Timestamp:
06/27/2025 02:25:07 PM (15 months ago)
Author:
johnbillion
Message:

Options, Meta APIs: Account for URL query parameters when checking the validity of requests to the /wp/v2/settings REST API route.

Follow-up to [60301].

Props sheldorofazeroth, Mamaduka, wildworks, johnbillion

Fixes #41604

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-includes/rest-api/endpoints/class-wp-rest-settings-controller.php

    r60301 r60357  
    146146                $options = $this->get_registered_options();
    147147
    148                 $params = $request->get_params();
     148                $params = array_diff_key( $request->get_params(), $request->get_query_params() );
    149149
    150150                if ( empty( $params ) || ! empty( array_diff_key( $params, $options ) ) ) {
  • trunk/tests/phpunit/tests/rest-api/rest-settings-controller.php

    r60301 r60357  
    398398        }
    399399
     400        /**
     401         * @ticket 41604
     402         */
    400403        public function test_update_item() {
    401404                wp_set_current_user( self::$administrator );
     
    411414        }
    412415
     416        /**
     417         * @ticket 41604
     418         */
     419        public function test_update_item_with_global_parameters_present() {
     420                wp_set_current_user( self::$administrator );
     421
     422                $request = new WP_REST_Request( 'PUT', '/wp/v2/settings' );
     423                $request->set_param( 'title', 'The new title!' );
     424                $request->set_url_params( array( '_locale' => 'user' ) );
     425                $response = rest_get_server()->dispatch( $request );
     426                $data     = $response->get_data();
     427
     428                $this->assertSame( 200, $response->get_status() );
     429                $this->assertSame( 'The new title!', $data['title'] );
     430                $this->assertSame( get_option( 'blogname' ), $data['title'] );
     431        }
     432
     433        /**
     434         * @ticket 41604
     435         */
     436        public function test_update_item_with_empty_body() {
     437                wp_set_current_user( self::$administrator );
     438
     439                $request  = new WP_REST_Request( 'PUT', '/wp/v2/settings' );
     440                $response = rest_get_server()->dispatch( $request );
     441                $data     = $response->get_data();
     442
     443                $this->assertSame( 400, $response->get_status() );
     444        }
     445
     446        /**
     447         * @ticket 41604
     448         */
    413449        public function test_update_nonexistent_item() {
    414450                wp_set_current_user( self::$administrator );
     
    421457        }
    422458
     459        /**
     460         * @ticket 41604
     461         */
    423462        public function test_update_partially_valid_items() {
    424463                wp_set_current_user( self::$administrator );
Note: See TracChangeset for help on using the changeset viewer.