Add WP_Block_Editor_Context::$name

Adds a new `WP_Block_Editor_Context::$name` and field. This allows plugin
developers to tell which block editor is being loaded when using filters such as
`allowed_block_types_all` and `block_editor_rest_api_preload_paths`.

Fixes #55301.
Props talldanwp, gziolo, andraganescu.


git-svn-id: https://develop.svn.wordpress.org/trunk@52942 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
Robert Anderson 2022-03-17 03:35:13 +00:00
parent dc210fcaa6
commit 3b8dc986d2
5 changed files with 60 additions and 9 deletions

View File

@ -49,7 +49,7 @@ foreach ( get_default_block_template_types() as $slug => $template_type ) {
$indexed_template_types[] = $template_type;
}
$block_editor_context = new WP_Block_Editor_Context();
$block_editor_context = new WP_Block_Editor_Context( array( 'name' => 'core/edit-site' ) );
$custom_settings = array(
'siteUrl' => site_url(),
'postsPerPage' => get_option( 'posts_per_page' ),

View File

@ -15,7 +15,7 @@ if ( ! defined( 'ABSPATH' ) ) {
$current_screen = get_current_screen();
$current_screen->is_block_editor( true );
$block_editor_context = new WP_Block_Editor_Context();
$block_editor_context = new WP_Block_Editor_Context( array( 'name' => 'core/edit-widgets' ) );
$preload_paths = array(
array( rest_get_route_for_post_type_items( 'attachment' ), 'OPTIONS' ),

View File

@ -7,17 +7,29 @@
*/
/**
* Class representing a current block editor context.
*
* The expectation is that block editor can have a different set
* of requirements on every screen where it is used. This class
* allows to define supporting settings that can be used with filters.
* Contains information about a block editor being rendered.
*
* @since 5.8.0
*/
final class WP_Block_Editor_Context {
/**
* Post being edited. Optional.
* String that identifies the block editor being rendered. Can be one of:
*
* - `'core/edit-post'` - The post editor at `/wp-admin/edit.php`.
* - `'core/edit-widgets'` - The widgets editor at `/wp-admin/widgets.php`.
* - `'core/customize-widgets'` - The widgets editor at `/wp-admin/customize.php`.
* - `'core/edit-site'` - The site editor at `/wp-admin/site-editor.php`.
*
* Defaults to 'core/edit-post'.
*
* @since 6.0.0
*
* @var string
*/
public $name = 'core/edit-post';
/**
* The post being edited by the block editor. Optional.
*
* @since 5.8.0
*
@ -35,6 +47,9 @@ final class WP_Block_Editor_Context {
* @param array $settings The list of optional settings to expose in a given context.
*/
public function __construct( array $settings = array() ) {
if ( isset( $settings['name'] ) ) {
$this->name = $settings['name'];
}
if ( isset( $settings['post'] ) ) {
$this->post = $settings['post'];
}

View File

@ -838,7 +838,11 @@ final class WP_Customize_Widgets {
*/
if ( wp_use_widgets_block_editor() ) {
$block_editor_context = new WP_Block_Editor_Context();
$block_editor_context = new WP_Block_Editor_Context(
array(
'name' => 'core/customize-widgets',
)
);
$editor_settings = get_block_editor_settings(
get_legacy_widget_block_editor_settings(),

View File

@ -80,6 +80,7 @@ class Tests_Blocks_Editor extends WP_UnitTestCase {
public function test_block_editor_context_no_settings() {
$context = new WP_Block_Editor_Context();
$this->assertSame( 'core/edit-post', $context->name );
$this->assertNull( $context->post );
}
@ -89,9 +90,40 @@ class Tests_Blocks_Editor extends WP_UnitTestCase {
public function test_block_editor_context_post() {
$context = new WP_Block_Editor_Context( array( 'post' => get_post() ) );
$this->assertSame( 'core/edit-post', $context->name );
$this->assertSame( get_post(), $context->post );
}
/**
* @ticket 55301
*/
public function test_block_editor_context_widgets() {
$context = new WP_Block_Editor_Context( array( 'name' => 'core/edit-widgets' ) );
$this->assertSame( 'core/edit-widgets', $context->name );
$this->assertNull( $context->post );
}
/**
* @ticket 55301
*/
public function test_block_editor_context_widgets_customizer() {
$context = new WP_Block_Editor_Context( array( 'name' => 'core/customize-widgets' ) );
$this->assertSame( 'core/customize-widgets', $context->name );
$this->assertNull( $context->post );
}
/**
* @ticket 55301
*/
public function test_block_editor_context_site() {
$context = new WP_Block_Editor_Context( array( 'name' => 'core/edit-site' ) );
$this->assertSame( 'core/edit-site', $context->name );
$this->assertNull( $context->post );
}
/**
* @ticket 52920
* @expectedDeprecated block_categories