Make WordPress Core

Ticket #45677: 45677.12.diff

File 45677.12.diff, 2.5 KB (added by dlh, 5 years ago)
  • src/wp-includes/class-wp-post-type.php

    diff --git src/wp-includes/class-wp-post-type.php src/wp-includes/class-wp-post-type.php
    index 0099515050..bb148067c0 100644
    final class WP_Post_Type { 
    343343         * @since 5.3.0
    344344         * @var WP_REST_Controller $rest_controller
    345345         */
    346         private $rest_controller;
     346        public $rest_controller;
    347347
    348348        /**
    349349         * Constructor.
    final class WP_Post_Type { 
    722722                        $this->rest_controller = new $class( $this->name );
    723723                }
    724724
     725                if ( ! ( $this->rest_controller instanceof $class ) ) {
     726                        return null;
     727                }
     728
    725729                return $this->rest_controller;
    726730        }
    727731}
  • src/wp-includes/rest-api/endpoints/class-wp-rest-posts-controller.php

    diff --git src/wp-includes/rest-api/endpoints/class-wp-rest-posts-controller.php src/wp-includes/rest-api/endpoints/class-wp-rest-posts-controller.php
    index 4a00336e34..2b71a76cb0 100644
     
    1515 * @see WP_REST_Controller
    1616 */
    1717class WP_REST_Posts_Controller extends WP_REST_Controller {
    18 
    19         /**
    20          * Instances of post type controllers keyed by post type.
    21          *
    22          * @since 5.3.0
    23          * @var WP_REST_Controller[]
    24          */
    25         private static $post_type_controllers = array();
    26 
    2718        /**
    2819         * Post type.
    2920         *
  • tests/phpunit/tests/rest-api/rest-posts-controller.php

    diff --git tests/phpunit/tests/rest-api/rest-posts-controller.php tests/phpunit/tests/rest-api/rest-posts-controller.php
    index fa7396afcc..6692aee39b 100644
    class WP_Test_REST_Posts_Controller extends WP_Test_REST_Post_Type_Controller_Te 
    46164616                );
    46174617        }
    46184618
     4619        /**
     4620         * @ticket 45677
     4621         */
     4622        public function test_get_for_post_type_returns_null_for_invalid_provided_controller() {
     4623                register_post_type(
     4624                        'test',
     4625                        array(
     4626                                'show_in_rest'    => true,
     4627                                'rest_controller' => new \stdClass(),
     4628                        )
     4629                );
     4630
     4631                $this->assertNull( get_post_type_object( 'test' )->get_rest_controller() );
     4632        }
     4633
     4634        /**
     4635         * @ticket 45677
     4636         */
     4637        public function test_get_for_post_type_returns_null_for_controller_class_mismatch() {
     4638                register_post_type(
     4639                        'test',
     4640                        array(
     4641                                'show_in_rest'          => true,
     4642                                'rest_controller_class' => WP_REST_Posts_Controller::class,
     4643                                'rest_controller'       => new WP_REST_Terms_Controller( 'category' ),
     4644                        )
     4645                );
     4646
     4647                $this->assertNull( get_post_type_object( 'test' )->get_rest_controller() );
     4648        }
     4649
    46194650        public function tearDown() {
    46204651                _unregister_post_type( 'private-post' );
    46214652                _unregister_post_type( 'youseeme' );