Editor: add Post Content attributes to block editor settings.

Adds a new block editor setting containing the Post Content block attributes, if they exist.

Props audrasjb, spacedmonkey, jeremyfelt, mukesh27, flixos90, andrewserong.
Fixes #58534.

Built from https://develop.svn.wordpress.org/trunk@55955


git-svn-id: http://core.svn.wordpress.org/trunk@55467 1a063a9b-81f0-0310-95a4-ce76da25c4cd
This commit is contained in:
isabel_brison 2023-06-21 04:23:23 +00:00
parent 7a4251fae4
commit 9363bb1c43
2 changed files with 93 additions and 1 deletions

View File

@ -361,6 +361,92 @@ function _wp_get_iframed_editor_assets() {
);
}
/**
* Finds the first occurrence of a specific block in an array of blocks.
*
* @since 6.3.0
*
* @param array $blocks Array of blocks.
* @param string $block_name Name of the block to find.
* @return array Found block, or empty array if none found.
*/
function wp_get_first_block( $blocks, $block_name ) {
foreach ( $blocks as $block ) {
if ( $block_name === $block['blockName'] ) {
return $block;
}
if ( ! empty( $block['innerBlocks'] ) ) {
$found_block = wp_get_first_block( $block['innerBlocks'], $block_name );
if ( ! empty( $found_block ) ) {
return $found_block;
}
}
}
return array();
}
/**
* Retrieves Post Content block attributes from the current post template.
*
* @since 6.3.0
* @access private
*
* @global int $post_ID
*
* @return array Post Content block attributes or empty array if they don't exist.
*/
function wp_get_post_content_block_attributes() {
global $post_ID;
$is_block_theme = wp_is_block_theme();
if ( ! $is_block_theme || ! $post_ID ) {
return array();
}
$template_slug = get_page_template_slug( $post_ID );
if ( ! $template_slug ) {
$post_slug = 'singular';
$page_slug = 'singular';
$template_types = get_block_templates();
foreach ( $template_types as $template_type ) {
if ( 'page' === $template_type->slug ) {
$page_slug = 'page';
}
if ( 'single' === $template_type->slug ) {
$post_slug = 'single';
}
}
$what_post_type = get_post_type( $post_ID );
switch ( $what_post_type ) {
case 'page':
$template_slug = $page_slug;
break;
default:
$template_slug = $post_slug;
break;
}
}
$current_template = get_block_templates( array( 'slug__in' => array( $template_slug ) ) );
if ( ! empty( $current_template ) ) {
$template_blocks = parse_blocks( $current_template[0]->content );
$post_content_block = wp_get_first_block( $template_blocks, 'core/post-content' );
if ( ! empty( $post_content_block['attrs'] ) ) {
return $post_content_block['attrs'];
}
}
return array();
}
/**
* Returns the contextualized block editor settings for a selected editor context.
*
@ -529,6 +615,12 @@ function get_block_editor_settings( array $custom_settings, $block_editor_contex
),
);
$post_content_block_attributes = wp_get_post_content_block_attributes();
if ( ! empty( $post_content_block_attributes ) ) {
$editor_settings['postContentAttributes'] = $post_content_block_attributes;
}
/**
* Filters the settings to pass to the block editor for all editor type.
*

View File

@ -16,7 +16,7 @@
*
* @global string $wp_version
*/
$wp_version = '6.3-alpha-55954';
$wp_version = '6.3-alpha-55955';
/**
* Holds the WordPress DB revision, increments when changes are made to the WordPress DB schema.