From 57ded3c85da779b5e1bd1c6b01bcb5b97e131d09 Mon Sep 17 00:00:00 2001 From: Timothy Jacobs Date: Sun, 31 Oct 2021 05:17:53 +0000 Subject: [PATCH] REST API: Add visibility information to the Post Types controller. Props spacedmonkey, peterwilsoncc. Fixes #54055. git-svn-id: https://develop.svn.wordpress.org/trunk@51959 602fd350-edb4-49c9-b593-d223f7449a82 --- .../class-wp-rest-post-types-controller.php | 23 +++++++++++++++++++ .../rest-api/rest-post-types-controller.php | 8 ++++++- 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/src/wp-includes/rest-api/endpoints/class-wp-rest-post-types-controller.php b/src/wp-includes/rest-api/endpoints/class-wp-rest-post-types-controller.php index 1301246dea..e2598ac89d 100644 --- a/src/wp-includes/rest-api/endpoints/class-wp-rest-post-types-controller.php +++ b/src/wp-includes/rest-api/endpoints/class-wp-rest-post-types-controller.php @@ -197,6 +197,13 @@ class WP_REST_Post_Types_Controller extends WP_REST_Controller { $data['hierarchical'] = $post_type->hierarchical; } + if ( in_array( 'visibility', $fields, true ) ) { + $data['visibility'] = array( + 'show_in_nav_menus' => (bool) $post_type->show_in_nav_menus, + 'show_ui' => (bool) $post_type->show_ui, + ); + } + if ( in_array( 'viewable', $fields, true ) ) { $data['viewable'] = is_post_type_viewable( $post_type ); } @@ -337,6 +344,22 @@ class WP_REST_Post_Types_Controller extends WP_REST_Controller { 'context' => array( 'view', 'edit', 'embed' ), 'readonly' => true, ), + 'visibility' => array( + 'description' => __( 'The visibility settings for the post type.' ), + 'type' => 'object', + 'context' => array( 'edit' ), + 'readonly' => true, + 'properties' => array( + 'show_ui' => array( + 'description' => __( 'Whether to generate a default UI for managing this post type.' ), + 'type' => 'boolean', + ), + 'show_in_nav_menus' => array( + 'description' => __( 'Whether to make the post type is available for selection in navigation menus.' ), + 'type' => 'boolean', + ), + ), + ), ), ); diff --git a/tests/phpunit/tests/rest-api/rest-post-types-controller.php b/tests/phpunit/tests/rest-api/rest-post-types-controller.php index 0e06bf9d15..d93f5814c1 100644 --- a/tests/phpunit/tests/rest-api/rest-post-types-controller.php +++ b/tests/phpunit/tests/rest-api/rest-post-types-controller.php @@ -144,7 +144,7 @@ class WP_Test_REST_Post_Types_Controller extends WP_Test_REST_Controller_Testcas $response = rest_get_server()->dispatch( $request ); $data = $response->get_data(); $properties = $data['schema']['properties']; - $this->assertCount( 10, $properties ); + $this->assertCount( 11, $properties ); $this->assertArrayHasKey( 'capabilities', $properties ); $this->assertArrayHasKey( 'description', $properties ); $this->assertArrayHasKey( 'hierarchical', $properties ); @@ -155,6 +155,7 @@ class WP_Test_REST_Post_Types_Controller extends WP_Test_REST_Controller_Testcas $this->assertArrayHasKey( 'supports', $properties ); $this->assertArrayHasKey( 'taxonomies', $properties ); $this->assertArrayHasKey( 'rest_base', $properties ); + $this->assertArrayHasKey( 'visibility', $properties ); } public function test_get_additional_field_registration() { @@ -216,6 +217,11 @@ class WP_Test_REST_Post_Types_Controller extends WP_Test_REST_Controller_Testcas $viewable = is_post_type_viewable( $post_type_obj ); } $this->assertSame( $viewable, $data['viewable'] ); + $visibility = array( + 'show_in_nav_menus' => (bool) $post_type_obj->show_in_nav_menus, + 'show_ui' => (bool) $post_type_obj->show_ui, + ); + $this->assertSame( $visibility, $data['visibility'] ); $this->assertSame( get_all_post_type_supports( $post_type_obj->name ), $data['supports'] ); } else { $this->assertArrayNotHasKey( 'capabilities', $data );