mirror of
https://github.com/gosticks/wordpress-develop.git
synced 2026-07-04 17:20:07 +00:00
Editor: Add allowed_blocks field to block registration and REST API
There is a new block.json field called allowedBlocks, added in Gutenberg in https://github.com/WordPress/gutenberg/pull/58262. This adds support for this new field also on the server. Props: gziolo, jsnajdr. Fixes #60403. git-svn-id: https://develop.svn.wordpress.org/trunk@57521 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
@@ -2303,6 +2303,7 @@ function get_block_editor_server_block_settings() {
|
||||
'keywords' => 'keywords',
|
||||
'example' => 'example',
|
||||
'variations' => 'variations',
|
||||
'allowed_blocks' => 'allowedBlocks',
|
||||
);
|
||||
|
||||
foreach ( $block_registry->get_all_registered() as $block_name => $block_type ) {
|
||||
|
||||
@@ -327,7 +327,7 @@ function get_block_metadata_i18n_schema() {
|
||||
* @since 6.1.0 Added support for `render` field.
|
||||
* @since 6.3.0 Added `selectors` field.
|
||||
* @since 6.4.0 Added support for `blockHooks` field.
|
||||
* @since 6.5.0 Added support for `viewStyle` field.
|
||||
* @since 6.5.0 Added support for `allowedBlocks` and `viewStyle` fields.
|
||||
*
|
||||
* @param string $file_or_folder Path to the JSON file with metadata definition for
|
||||
* the block or path to the folder where the `block.json` file is located.
|
||||
@@ -424,6 +424,7 @@ function register_block_type_from_metadata( $file_or_folder, $args = array() ) {
|
||||
'styles' => 'styles',
|
||||
'variations' => 'variations',
|
||||
'example' => 'example',
|
||||
'allowedBlocks' => 'allowed_blocks',
|
||||
);
|
||||
$textdomain = ! empty( $metadata['textdomain'] ) ? $metadata['textdomain'] : null;
|
||||
$i18n_schema = get_block_metadata_i18n_schema();
|
||||
|
||||
@@ -68,6 +68,14 @@ class WP_Block_Type {
|
||||
*/
|
||||
public $ancestor = null;
|
||||
|
||||
/**
|
||||
* Limits which block types can be inserted as children of this block type.
|
||||
*
|
||||
* @since 6.5.0
|
||||
* @var string[]|null
|
||||
*/
|
||||
public $allowed_blocks = null;
|
||||
|
||||
/**
|
||||
* Block type icon.
|
||||
*
|
||||
@@ -303,6 +311,7 @@ class WP_Block_Type {
|
||||
* available when nested within the specified blocks.
|
||||
* @type string[]|null $ancestor Setting ancestor makes a block available only inside the specified
|
||||
* block types at any position of the ancestor's block subtree.
|
||||
* @type string[]|null $allowed_blocks Limits which block types can be inserted as children of this block type.
|
||||
* @type string|null $icon Block type icon.
|
||||
* @type string $description A detailed block type description.
|
||||
* @type string[] $keywords Additional keywords to produce block type as
|
||||
|
||||
@@ -280,6 +280,7 @@ class WP_REST_Block_Types_Controller extends WP_REST_Controller {
|
||||
'keywords',
|
||||
'parent',
|
||||
'ancestor',
|
||||
'allowed_blocks',
|
||||
'provides_context',
|
||||
'uses_context',
|
||||
'selectors',
|
||||
@@ -723,6 +724,17 @@ class WP_REST_Block_Types_Controller extends WP_REST_Controller {
|
||||
'context' => array( 'embed', 'view', 'edit' ),
|
||||
'readonly' => true,
|
||||
),
|
||||
'allowed_blocks' => array(
|
||||
'description' => __( 'Allowed child block types.' ),
|
||||
'type' => array( 'array', 'null' ),
|
||||
'items' => array(
|
||||
'type' => 'string',
|
||||
'pattern' => self::NAME_PATTERN,
|
||||
),
|
||||
'default' => null,
|
||||
'context' => array( 'embed', 'view', 'edit' ),
|
||||
'readonly' => true,
|
||||
),
|
||||
'keywords' => $keywords_definition,
|
||||
'example' => $example_definition,
|
||||
'block_hooks' => array(
|
||||
|
||||
@@ -207,6 +207,7 @@ class REST_Block_Type_Controller_Test extends WP_Test_REST_Controller_Testcase {
|
||||
'category' => true,
|
||||
'parent' => 'invalid_parent',
|
||||
'ancestor' => 'invalid_ancestor',
|
||||
'allowed_blocks' => 'invalid_allowed_blocks',
|
||||
'icon' => true,
|
||||
'description' => true,
|
||||
'keywords' => 'invalid_keywords',
|
||||
@@ -237,6 +238,7 @@ class REST_Block_Type_Controller_Test extends WP_Test_REST_Controller_Testcase {
|
||||
$this->assertNull( $data['category'] );
|
||||
$this->assertSameSets( array( 'invalid_parent' ), $data['parent'] );
|
||||
$this->assertSameSets( array( 'invalid_ancestor' ), $data['ancestor'] );
|
||||
$this->assertSameSets( array( 'invalid_allowed_blocks' ), $data['allowed_blocks'] );
|
||||
$this->assertNull( $data['icon'] );
|
||||
$this->assertSame( '1', $data['description'] );
|
||||
$this->assertSameSets( array( 'invalid_keywords' ), $data['keywords'] );
|
||||
@@ -283,6 +285,7 @@ class REST_Block_Type_Controller_Test extends WP_Test_REST_Controller_Testcase {
|
||||
'category' => false,
|
||||
'parent' => false,
|
||||
'ancestor' => false,
|
||||
'allowed_blocks' => false,
|
||||
'icon' => false,
|
||||
'description' => false,
|
||||
'keywords' => false,
|
||||
@@ -313,6 +316,7 @@ class REST_Block_Type_Controller_Test extends WP_Test_REST_Controller_Testcase {
|
||||
$this->assertNull( $data['category'] );
|
||||
$this->assertSameSets( array(), $data['parent'] );
|
||||
$this->assertSameSets( array(), $data['ancestor'] );
|
||||
$this->assertSameSets( array(), $data['allowed_blocks'] );
|
||||
$this->assertNull( $data['icon'] );
|
||||
$this->assertSame( '', $data['description'] );
|
||||
$this->assertSameSets( array(), $data['keywords'] );
|
||||
@@ -550,6 +554,7 @@ class REST_Block_Type_Controller_Test extends WP_Test_REST_Controller_Testcase {
|
||||
* @ticket 47620
|
||||
* @ticket 57585
|
||||
* @ticket 59346
|
||||
* @ticket 60403
|
||||
*/
|
||||
public function test_get_item_schema() {
|
||||
wp_set_current_user( self::$admin_id );
|
||||
@@ -557,13 +562,14 @@ class REST_Block_Type_Controller_Test extends WP_Test_REST_Controller_Testcase {
|
||||
$response = rest_get_server()->dispatch( $request );
|
||||
$data = $response->get_data();
|
||||
$properties = $data['schema']['properties'];
|
||||
$this->assertCount( 31, $properties );
|
||||
$this->assertCount( 32, $properties );
|
||||
$this->assertArrayHasKey( 'api_version', $properties );
|
||||
$this->assertArrayHasKey( 'name', $properties );
|
||||
$this->assertArrayHasKey( 'title', $properties );
|
||||
$this->assertArrayHasKey( 'category', $properties );
|
||||
$this->assertArrayHasKey( 'parent', $properties );
|
||||
$this->assertArrayHasKey( 'ancestor', $properties );
|
||||
$this->assertArrayHasKey( 'allowed_blocks', $properties );
|
||||
$this->assertArrayHasKey( 'icon', $properties );
|
||||
$this->assertArrayHasKey( 'description', $properties );
|
||||
$this->assertArrayHasKey( 'keywords', $properties );
|
||||
@@ -696,6 +702,7 @@ class REST_Block_Type_Controller_Test extends WP_Test_REST_Controller_Testcase {
|
||||
'category',
|
||||
'parent',
|
||||
'ancestor',
|
||||
'allowedBlocks',
|
||||
'icon',
|
||||
'description',
|
||||
'keywords',
|
||||
|
||||
Reference in New Issue
Block a user