Editor: Support filtering arguments in block type registration from metadata

Adds 2 new hooks in `register_block_type_from_metadata`:

- Named `block_type_metadata` to filter the content of metadata read from `block.json`
- Named `block_type_metadata_settings` to filter the settings object determined from the metadata that is passed to `register_block_type` call

Props swissspidy.
Fixes #52138.



git-svn-id: https://develop.svn.wordpress.org/trunk@49948 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
Greg Ziółkowski
2021-01-08 16:43:29 +00:00
parent cf68c90021
commit bb01f0187c
2 changed files with 63 additions and 6 deletions

View File

@@ -62,9 +62,7 @@ class WP_Test_Block_Register extends WP_UnitTestCase {
$registry = WP_Block_Type_Registry::get_instance();
foreach ( array( 'test-static', 'test-dynamic' ) as $block_name ) {
$block_name = 'core/' . $block_name;
foreach ( array( 'core/test-static', 'core/test-dynamic', 'my-plugin/notice' ) as $block_name ) {
if ( $registry->is_registered( $block_name ) ) {
$registry->unregister( $block_name );
}
@@ -423,4 +421,40 @@ class WP_Test_Block_Register extends WP_UnitTestCase {
$block_type = $registry->get_registered( 'core/test-filtered' );
$this->assertSame( 'boolean', $block_type->attributes['core/test-filtered']['type'] );
}
/**
* @ticket 52138
*/
public function test_filter_block_registration_metadata() {
$filter_metadata_registration = function( $metadata ) {
$metadata['apiVersion'] = 3;
return $metadata;
};
add_filter( 'block_type_metadata', $filter_metadata_registration, 10, 2 );
$result = register_block_type_from_metadata(
__DIR__ . '/fixtures'
);
remove_filter( 'block_type_metadata', $filter_metadata_registration );
$this->assertSame( 3, $result->api_version );
}
/**
* @ticket 52138
*/
public function test_filter_block_registration_metadata_settings() {
$filter_metadata_registration = function( $settings, $metadata ) {
$settings['api_version'] = $metadata['apiVersion'] + 1;
return $settings;
};
add_filter( 'block_type_metadata_settings', $filter_metadata_registration, 10, 2 );
$result = register_block_type_from_metadata(
__DIR__ . '/fixtures'
);
remove_filter( 'block_type_metadata_settings', $filter_metadata_registration );
$this->assertSame( 3, $result->api_version );
}
}