From 822ca9ebc7409abce791e4318626ea0bea75fe88 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Greg=20Zi=C3=83=C2=B3=C3=85=E2=80=9Akowski?= Date: Mon, 1 Jun 2020 12:25:34 +0000 Subject: [PATCH] Add fields to WP_Block_Type As part of #47620 and the RFC for block registeration. Server registered blocks are missing some fields. These changeset includes them. Props spacedmonkey, aduth. Fixes #48529. git-svn-id: https://develop.svn.wordpress.org/trunk@47875 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-admin/includes/post.php | 2 +- src/wp-includes/class-wp-block-type.php | 84 +++++++++++++++++++--- tests/phpunit/tests/admin/includesPost.php | 11 ++- tests/phpunit/tests/blocks/block-type.php | 25 +++++++ 4 files changed, 109 insertions(+), 13 deletions(-) diff --git a/src/wp-admin/includes/post.php b/src/wp-admin/includes/post.php index c5bad99766..414c1e577b 100644 --- a/src/wp-admin/includes/post.php +++ b/src/wp-admin/includes/post.php @@ -2234,7 +2234,7 @@ function get_block_categories( $post ) { function get_block_editor_server_block_settings() { $block_registry = WP_Block_Type_Registry::get_instance(); $blocks = array(); - $keys_to_pick = array( 'title', 'description', 'icon', 'category', 'keywords', 'parent', 'supports', 'attributes', 'styles' ); + $keys_to_pick = array( 'title', 'description', 'icon', 'category', 'keywords', 'parent', 'supports', 'attributes', 'styles', 'textdomain', 'example' ); foreach ( $block_registry->get_all_registered() as $block_name => $block_type ) { foreach ( $keys_to_pick as $key ) { diff --git a/src/wp-includes/class-wp-block-type.php b/src/wp-includes/class-wp-block-type.php index 6ffda95b4e..4d7ba9bd26 100644 --- a/src/wp-includes/class-wp-block-type.php +++ b/src/wp-includes/class-wp-block-type.php @@ -15,6 +15,7 @@ * @see register_block_type() */ class WP_Block_Type { + /** * Block type key. * @@ -23,21 +24,81 @@ class WP_Block_Type { */ public $name; + /** + * @since 5.5.0 + * @var string + */ + public $title = ''; + + /** + * @since 5.5.0 + * @var string + */ + public $category = ''; + + /** + * @since 5.5.0 + * @var array|null + */ + public $parent = null; + + /** + * @since 5.5.0 + * @var string + */ + public $icon = ''; + + /** + * @since 5.5.0 + * @var string + */ + public $description = ''; + + /** + * @since 5.5.0 + * @var array + */ + public $keywords = array(); + + /** + * @since 5.5.0 + * @var string|null + */ + public $textdomain = null; + + /** + * @since 5.5.0 + * @var array + */ + public $styles = array(); + + /** + * @since 5.5.0 + * @var array + */ + public $supports = array(); + + /** + * @since 5.5.0 + * @var array|null + */ + public $example = null; + /** * Block type render callback. * * @since 5.0.0 * @var callable */ - public $render_callback; + public $render_callback = null; /** * Block type attributes property schemas. * * @since 5.0.0 - * @var array + * @var array|null */ - public $attributes; + public $attributes = null; /** * Block type editor script handle. @@ -45,7 +106,7 @@ class WP_Block_Type { * @since 5.0.0 * @var string */ - public $editor_script; + public $editor_script = ''; /** * Block type front end script handle. @@ -53,7 +114,7 @@ class WP_Block_Type { * @since 5.0.0 * @var string */ - public $script; + public $script = ''; /** * Block type editor style handle. @@ -61,7 +122,7 @@ class WP_Block_Type { * @since 5.0.0 * @var string */ - public $editor_style; + public $editor_style = ''; /** * Block type front end style handle. @@ -69,20 +130,21 @@ class WP_Block_Type { * @since 5.0.0 * @var string */ - public $style; + public $style = ''; /** * Constructor. * * Will populate object properties from the provided arguments. * - * @since 5.0.0 - * - * @see register_block_type() - * * @param string $block_type Block type name including namespace. * @param array|string $args Optional. Array or string of arguments for registering a block type. * Default empty array. + * + * @since 5.0.0 + * + * @see register_block_type() + * */ public function __construct( $block_type, $args = array() ) { $this->name = $block_type; diff --git a/tests/phpunit/tests/admin/includesPost.php b/tests/phpunit/tests/admin/includesPost.php index c44092c6ac..d15497e3ec 100644 --- a/tests/phpunit/tests/admin/includesPost.php +++ b/tests/phpunit/tests/admin/includesPost.php @@ -825,6 +825,7 @@ class Tests_Admin_Includes_Post extends WP_UnitTestCase { function test_get_block_editor_server_block_settings() { $name = 'core/test'; $settings = array( + 'category' => 'common', 'icon' => 'text', 'render_callback' => 'foo', ); @@ -836,7 +837,15 @@ class Tests_Admin_Includes_Post extends WP_UnitTestCase { unregister_block_type( $name ); $this->assertArrayHasKey( $name, $blocks ); - $this->assertSame( array( 'icon' => 'text' ), $blocks[ $name ] ); + $this->assertEquals( array( + 'title' => '', + 'description' => '', + 'category' => 'common', + 'icon' => 'text', + 'keywords' => array(), + 'supports' => array(), + 'styles' => array(), + ), $blocks[ $name ] ); } /** diff --git a/tests/phpunit/tests/blocks/block-type.php b/tests/phpunit/tests/blocks/block-type.php index 57433e45af..4605d10733 100644 --- a/tests/phpunit/tests/blocks/block-type.php +++ b/tests/phpunit/tests/blocks/block-type.php @@ -349,6 +349,31 @@ class WP_Test_Block_Type extends WP_UnitTestCase { return json_encode( $attributes ); } + /** + * @ticket 48529 + */ + public function test_register_block() { + $block_type = new WP_Block_Type( 'core/fake', array( + 'title' => 'Test title', + 'category' => 'Test category', + 'parent' => array( 'core/third-party' ), + 'icon' => 'icon.png', + 'description' => 'test description', + 'keywords' => array( 'test keyword' ), + 'textdomain' => 'test_domain', + 'supports' => array( 'alignment' => true ), + ) ); + + $this->assertSame( 'Test title', $block_type->title ); + $this->assertSame( 'Test category', $block_type->category ); + $this->assertEqualSets( array( 'core/third-party' ), $block_type->parent ); + $this->assertSame( 'icon.png', $block_type->icon ); + $this->assertSame( 'test description', $block_type->description ); + $this->assertEqualSets( array( 'test keyword' ), $block_type->keywords ); + $this->assertSame( 'test_domain', $block_type->textdomain ); + $this->assertEqualSets( array( 'alignment' => true ), $block_type->supports ); + } + /** * Testing the block version. *