WordPress.org

Make WordPress Core

Ticket #42785: 42785.4.diff

File 42785.4.diff, 9.7 KB (added by pento, 15 months ago)
  • src/wp-includes/class-wp-post-type.php

     
    309309        /**
    310310         * Whether this post type should appear in the REST API.
    311311         *
    312          * Default false. If true, standard endpoints will be registered with
    313          * respect to $rest_base and $rest_controller_class.
     312         * Default true for public post types, and for logged in users. If true, standard endpoints
     313         * will be registered with respect to $rest_base and $rest_controller_class.
    314314         *
    315315         * @since 4.7.4
    316316         * @var bool $show_in_rest
     
    377377
    378378                $has_edit_link = ! empty( $args['_edit_link'] );
    379379
     380                $show_in_rest_default = false;
     381
     382                if ( ! empty( $args['public'] ) || ! empty( $args['publicly_queryable'] ) ) {
     383                        $show_in_rest_default = true;
     384                }
     385
    380386                // Args prefixed with an underscore are reserved for internal use.
    381387                $defaults = array(
    382388                        'labels'                => array(),
     
    402408                        'query_var'             => true,
    403409                        'can_export'            => true,
    404410                        'delete_with_user'      => null,
    405                         'show_in_rest'          => false,
     411                        'show_in_rest'          => $show_in_rest_default,
    406412                        'rest_base'             => false,
    407413                        'rest_controller_class' => false,
    408414                        '_builtin'              => false,
     
    413419
    414420                $args['name'] = $this->name;
    415421
     422                // Logged in users will see endpoints for all post types.
     423                if ( function_exists( 'is_user_logged_in' ) && is_user_logged_in() ) {
     424                        $args['show_in_rest'] = true;
     425                }
     426
    416427                // If not set, default to the setting for public.
    417428                if ( null === $args['publicly_queryable'] ) {
    418429                        $args['publicly_queryable'] = $args['public'];
  • src/wp-includes/class-wp-taxonomy.php

     
    178178        /**
    179179         * Whether this taxonomy should appear in the REST API.
    180180         *
    181          * Default false. If true, standard endpoints will be registered with
    182          * respect to $rest_base and $rest_controller_class.
     181         * Default true for public taxonomies, and for logged in users. If true, standard endpoints
     182         * will be registered with respect to $rest_base and $rest_controller_class.
    183183         *
    184184         * @since 4.7.4
    185185         * @var bool $show_in_rest
     
    252252                 */
    253253                $args = apply_filters( 'register_taxonomy_args', $args, $this->name, (array) $object_type );
    254254
     255                $show_in_rest_default = false;
     256
     257                if ( ! empty( $args['public'] ) || ! empty( $args['publicly_queryable'] ) ) {
     258                        $show_in_rest_default = true;
     259                }
     260
    255261                $defaults = array(
    256262                        'labels'                => array(),
    257263                        'description'           => '',
     
    270276                        'rewrite'               => true,
    271277                        'query_var'             => $this->name,
    272278                        'update_count_callback' => '',
    273                         'show_in_rest'          => false,
     279                        'show_in_rest'          => $show_in_rest_default,
    274280                        'rest_base'             => false,
    275281                        'rest_controller_class' => false,
    276282                        '_builtin'              => false,
     
    278284
    279285                $args = array_merge( $defaults, $args );
    280286
     287                // Logged in users will see endpoints for all post types.
     288                if ( function_exists( 'is_user_logged_in' ) && is_user_logged_in() ) {
     289                        $args['show_in_rest'] = true;
     290                }
     291
    281292                // If not set, default to the setting for public.
    282293                if ( null === $args['publicly_queryable'] ) {
    283294                        $args['publicly_queryable'] = $args['public'];
  • src/wp-includes/rest-api/fields/class-wp-rest-meta-fields.php

     
    342342
    343343                foreach ( get_registered_meta_keys( $this->get_meta_type() ) as $name => $args ) {
    344344                        if ( empty( $args['show_in_rest'] ) ) {
    345                                 continue;
     345                                if ( isset( $args['show_in_rest'] ) && ! $args['show_in_rest'] && 0 === strpos( $name, '_' ) && ! is_user_logged_in() ) {
     346                                        continue;
     347                                }
     348
     349                                if ( is_user_logged_in() ) {
     350                                        $args['show_in_rest'] = true;
     351                                } else {
     352                                        continue;
     353                                }
    346354                        }
    347355
    348356                        $rest_args = array();
  • tests/phpunit/tests/rest-api/rest-post-meta-fields.php

     
    120120                        )
    121121                );
    122122
     123                register_meta( 'post', '_test_underscore', array() );
     124
     125                register_meta( 'post', '_test_underscore_show', array(
     126                        'show_in_rest' => true,
     127                ) );
     128
     129                register_meta( 'post', '_test_underscore_dont_show', array(
     130                        'show_in_rest' => false,
     131                ) );
     132
    123133                /** @var WP_REST_Server $wp_rest_server */
    124134                global $wp_rest_server;
    125135                $wp_rest_server = new Spy_REST_Server;
     
    197207        /**
    198208         * @depends test_get_value
    199209         */
    200         public function test_get_registered_no_api_access() {
     210        public function test_get_registered_no_api_access_logged_out() {
     211                wp_set_current_user( 0 );
    201212                add_post_meta( self::$post_id, 'test_no_rest', 'for_the_wicked' );
    202213                $request = new WP_REST_Request( 'GET', sprintf( '/wp/v2/posts/%d', self::$post_id ) );
    203214
     
    212223        /**
    213224         * @depends test_get_value
    214225         */
     226        public function test_get_registered_no_api_access_logged_in() {
     227                $this->grant_write_permission();
     228
     229                add_post_meta( self::$post_id, 'test_no_rest', 'for_the_wicked' );
     230                $request = new WP_REST_Request( 'GET', sprintf( '/wp/v2/posts/%d', self::$post_id ) );
     231
     232                $response = rest_get_server()->dispatch( $request );
     233                $this->assertEquals( 200, $response->get_status() );
     234
     235                $data = $response->get_data();
     236                $meta = (array) $data['meta'];
     237                $this->assertArrayHasKey( 'test_no_rest', $meta );
     238        }
     239
     240        /**
     241         * @depends test_get_value
     242         */
    215243        public function test_get_registered_api_disabled() {
     244                $this->grant_write_permission();
     245
    216246                add_post_meta( self::$post_id, 'test_rest_disabled', 'sleepless_nights' );
    217247                $request = new WP_REST_Request( 'GET', sprintf( '/wp/v2/posts/%d', self::$post_id ) );
    218248
     
    221251
    222252                $data = $response->get_data();
    223253                $meta = (array) $data['meta'];
    224                 $this->assertArrayNotHasKey( 'test_rest_disabled', $meta );
     254                $this->assertArrayHasKey( 'test_rest_disabled', $meta );
     255        }
     256
     257        /**
     258         * @depends test_get_value
     259         */
     260        public function test_get_registered_underscore_logged_out() {
     261                wp_set_current_user( 0 );
     262
     263                add_post_meta( self::$post_id, '_test_underscore', 'sleepless_nights' );
     264                $request = new WP_REST_Request( 'GET', sprintf( '/wp/v2/posts/%d', self::$post_id ) );
     265
     266                $response = rest_get_server()->dispatch( $request );
     267                $this->assertEquals( 200, $response->get_status() );
     268
     269                $data = $response->get_data();
     270                $meta = (array) $data['meta'];
     271                $this->assertArrayNotHasKey( '_test_underscore', $meta );
     272        }
     273
     274        /**
     275         * @depends test_get_value
     276         */
     277        public function test_get_registered_underscore_logged_in() {
     278                $this->grant_write_permission();
     279
     280                add_post_meta( self::$post_id, '_test_underscore', 'sleepless_nights' );
     281                $request = new WP_REST_Request( 'GET', sprintf( '/wp/v2/posts/%d', self::$post_id ) );
     282
     283                $response = rest_get_server()->dispatch( $request );
     284                $this->assertEquals( 200, $response->get_status() );
     285
     286                $data = $response->get_data();
     287                $meta = (array) $data['meta'];
     288                $this->assertArrayHasKey( '_test_underscore', $meta );
     289        }
     290
     291        /**
     292         * @depends test_get_value
     293         */
     294        public function test_get_registered_underscore_show_logged_out() {
     295                wp_set_current_user( 0 );
     296
     297                add_post_meta( self::$post_id, '_test_underscore_show', 'sleepless_nights' );
     298                $request = new WP_REST_Request( 'GET', sprintf( '/wp/v2/posts/%d', self::$post_id ) );
     299
     300                $response = rest_get_server()->dispatch( $request );
     301                $this->assertEquals( 200, $response->get_status() );
     302
     303                $data = $response->get_data();
     304                $meta = (array) $data['meta'];
     305                $this->assertArrayHasKey( '_test_underscore_show', $meta );
     306        }
     307
     308        /**
     309         * @depends test_get_value
     310         */
     311        public function test_get_registered_underscore_show_logged_in() {
     312                $this->grant_write_permission();
     313
     314                add_post_meta( self::$post_id, '_test_underscore_show', 'sleepless_nights' );
     315                $request = new WP_REST_Request( 'GET', sprintf( '/wp/v2/posts/%d', self::$post_id ) );
     316
     317                $response = rest_get_server()->dispatch( $request );
     318                $this->assertEquals( 200, $response->get_status() );
     319
     320                $data = $response->get_data();
     321                $meta = (array) $data['meta'];
     322                $this->assertArrayHasKey( '_test_underscore_show', $meta );
     323        }
     324
     325        /**
     326         * @depends test_get_value
     327         */
     328        public function test_get_registered_underscore_dont_show_logged_out() {
     329                wp_set_current_user( 0 );
     330
     331                add_post_meta( self::$post_id, '_test_underscore_dont_show', 'sleepless_nights' );
     332                $request = new WP_REST_Request( 'GET', sprintf( '/wp/v2/posts/%d', self::$post_id ) );
     333
     334                $response = rest_get_server()->dispatch( $request );
     335                $this->assertEquals( 200, $response->get_status() );
     336
     337                $data = $response->get_data();
     338                $meta = (array) $data['meta'];
     339                $this->assertArrayNotHasKey( '_test_underscore_dont_show', $meta );
     340        }
     341
     342        /**
     343         * @depends test_get_value
     344         */
     345        public function test_get_registered_underscore_dont_show_logged_in() {
     346                $this->grant_write_permission();
     347
     348                add_post_meta( self::$post_id, '_test_underscore_dont_show', 'sleepless_nights' );
     349                $request = new WP_REST_Request( 'GET', sprintf( '/wp/v2/posts/%d', self::$post_id ) );
     350
     351                $response = rest_get_server()->dispatch( $request );
     352                $this->assertEquals( 200, $response->get_status() );
     353
     354                $data = $response->get_data();
     355                $meta = (array) $data['meta'];
     356                $this->assertArrayNotHasKey( '_test_underscore_dont_show', $meta );
    225357        }
    226358
    227359        public function test_get_value_types() {