WordPress.org

Make WordPress Core


Ignore:
Timestamp:
02/19/2020 10:54:03 PM (9 months ago)
Author:
TimothyBlynJacobs
Message:

REST API: Warn if registering array settings without an items schema.

The documentation for register_setting has also been clarified to include all of the supported types and the flexibility of the show_in_rest parameter.

Fixes #42875.
Props perrywagle, dshanske, kadamwhite.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/tests/phpunit/tests/rest-api/rest-settings-controller.php

    r47122 r47325  
    3737        parent::setUp();
    3838        $this->endpoint = new WP_REST_Settings_Controller();
     39    }
     40
     41    public function tearDown() {
     42        parent::tearDown();
     43
     44        if ( isset( get_registered_settings()['mycustomarraysetting'] ) ) {
     45            unregister_setting( 'somegroup', 'mycustomarraysetting' );
     46        }
    3947    }
    4048
     
    650658    public function test_get_item_schema() {
    651659    }
     660
     661    /**
     662     * @ticket 42875
     663     */
     664    public function test_register_setting_issues_doing_it_wrong_when_show_in_rest_is_true() {
     665        $this->setExpectedIncorrectUsage( 'register_setting' );
     666
     667        register_setting(
     668            'somegroup',
     669            'mycustomarraysetting',
     670            array(
     671                'type'         => 'array',
     672                'show_in_rest' => true,
     673            )
     674        );
     675    }
     676
     677    /**
     678     * @ticket 42875
     679     */
     680    public function test_register_setting_issues_doing_it_wrong_when_show_in_rest_omits_schema() {
     681        $this->setExpectedIncorrectUsage( 'register_setting' );
     682
     683        register_setting(
     684            'somegroup',
     685            'mycustomarraysetting',
     686            array(
     687                'type'         => 'array',
     688                'show_in_rest' => array(
     689                    'prepare_callback' => 'rest_sanitize_value_from_schema',
     690                ),
     691            )
     692        );
     693    }
     694
     695    /**
     696     * @ticket 42875
     697     */
     698    public function test_register_setting_issues_doing_it_wrong_when_show_in_rest_omits_schema_items() {
     699        $this->setExpectedIncorrectUsage( 'register_setting' );
     700
     701        register_setting(
     702            'somegroup',
     703            'mycustomarraysetting',
     704            array(
     705                'type'         => 'array',
     706                'show_in_rest' => array(
     707                    'schema' => array(
     708                        'default' => array( 'Hi!' ),
     709                    ),
     710                ),
     711            )
     712        );
     713    }
    652714}
Note: See TracChangeset for help on using the changeset viewer.