Skip to content
Closed
11 changes: 6 additions & 5 deletions src/wp-includes/block-editor.php
Original file line number Diff line number Diff line change
Expand Up @@ -409,19 +409,20 @@ function wp_get_first_block( $blocks, $block_name ) {
* Retrieves Post Content block attributes from the current post template.
*
* @since 6.3.0
* @since 6.4.0 Return null if there is no post content block.
* @access private
*
* @global int $post_ID
*
* @return array Post Content block attributes or empty array if they don't exist.
* @return array|null Post Content block attributes array or null if Post Content block doesn'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();
return null;
}

$template_slug = get_page_template_slug( $post_ID );
Expand Down Expand Up @@ -457,12 +458,12 @@ function wp_get_post_content_block_attributes() {
$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'] ) ) {
if ( isset( $post_content_block['attrs'] ) ) {
return $post_content_block['attrs'];
}
}

return array();
return null;
}

/**
Expand Down Expand Up @@ -635,7 +636,7 @@ 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 ) ) {
if ( isset( $post_content_block_attributes ) ) {
$editor_settings['postContentAttributes'] = $post_content_block_attributes;
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
/*
Theme Name: Block Theme Post Content Default
Theme URI: https://wordpress.org/
Description: For testing purposes only.
Version: 1.0.0
Text Domain: block-theme-post-content-default
*/
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
<!-- wp:paragraph -->
<p>Index Template</p>
<!-- /wp:paragraph -->
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
<!-- wp:post-title {"level":1,"style":{"spacing":{"margin":{"bottom":"var:preset|spacing|40"}}}} /-->
<!-- wp:post-content /-->
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
{
"version": 1,
"title": "Block theme",
"settings": {
"color": {
"palette": [
{
"slug": "light",
"name": "Light",
"color": "#f5f7f9"
},
{
"slug": "dark",
"name": "Dark",
"color": "#000"
}
],
"gradients": [
{
"name": "Custom gradient",
"gradient": "linear-gradient(135deg,rgba(0,0,0) 0%,rgb(0,0,0) 100%)",
"slug": "custom-gradient"
}
],
"duotone": [
{
"colors": [ "#333333", "#aaaaaa" ],
"slug": "custom-duotone",
"name": "Custom Duotone"
}
],
"custom": false,
"customGradient": false
},
"typography": {
"fontSizes": [
{
"name": "Custom",
"slug": "custom",
"size": "100px"
}
],
"customFontSize": false,
"customLineHeight": true
},
"spacing": {
"units": ["rem"],
"customPadding": true,
"blockGap": true
},
"blocks": {
"core/paragraph": {
"color": {
"palette": [
{
"slug": "light",
"name": "Light",
"color": "#f5f7f9"
}
]
}
}
}
},
"styles" : {
"blocks" :{
"core/post-featured-image": {
"shadow": "10px 10px 5px 0px rgba(0,0,0,0.66)",
"filter": {
"duotone": "var(--wp--preset--duotone--custom-duotone)"
}
}
},
"elements": {
"button": {
"shadow": "10px 10px 5px 0px rgba(0,0,0,0.66)"
},
"link": {
"typography": {
"textDecoration": "none"
},
"border": {
"bottom": {
"width": "2px",
"color": "currentColor",
"style": "solid"
}
},
":hover": {
"typography": {
"textDecoration": "none"
},
"border": {
"bottom": {
"width": "2px",
"color": "#000",
"style": "dotted"
}
}
}
}
}
}
}
23 changes: 21 additions & 2 deletions tests/phpunit/tests/blocks/editor.php
Original file line number Diff line number Diff line change
Expand Up @@ -446,14 +446,20 @@ public function test_wp_get_post_content_block_attributes() {
'type' => 'constrained',
),
);
// With no block theme, expect an empty array.
$this->assertSame( array(), wp_get_post_content_block_attributes() );
// With no block theme, expect null.
$this->assertNull( wp_get_post_content_block_attributes() );

switch_theme( 'block-theme' );

$this->assertSame( $attributes_with_layout, wp_get_post_content_block_attributes() );
}

public function test_wp_get_post_content_block_attributes_no_layout() {
switch_theme( 'block-theme-post-content-default' );

$this->assertSame( array(), wp_get_post_content_block_attributes() );
}
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Related to my above feedback, maybe add another test for get_block_editor_settings(), to check that it doesn't include the postContentAttributes field if the post block attributes aren't set.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The original test already checks the return value for classic themes (when Post Content doesn't exist), do you think it would be worth splitting that check out into its own test?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@tellthemachines I meant a test for the get_block_editor_settings() change. As far as I can tell, there isn't one at the moment.

There is https://github.com/WordPress/wordpress-develop/blob/trunk/tests/phpunit/tests/blocks/editor.php#L524 which checks the presence of postContentAttributes, so I think we should add another test where we force wp_get_post_content_block_attributes() to return null, and then assert that get_block_editor_settings() does not include the postContentAttributes key.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oh got it! Yeah that's a good idea.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Added a test in 0e75e53


/**
* @ticket 53458
*/
Expand Down Expand Up @@ -527,6 +533,19 @@ public function test_get_block_editor_settings_theme_json_settings() {
switch_theme( WP_DEFAULT_THEME );
}

/**
* @ticket 59358
*/
public function test_get_block_editor_settings_without_post_content_block() {

$post_editor_context = new WP_Block_Editor_Context( array( 'post' => get_post() ) );

$settings = get_block_editor_settings( array(), $post_editor_context );

$this->assertArrayNotHasKey( 'postContentAttributes', $settings );

}

/**
* @ticket 52920
* @expectedDeprecated block_editor_settings
Expand Down
1 change: 1 addition & 0 deletions tests/phpunit/tests/theme/themeDir.php
Original file line number Diff line number Diff line change
Expand Up @@ -184,6 +184,7 @@ public function test_theme_list() {
'Block Theme [0.4.0]',
'Block Theme [1.0.0] in subdirectory',
'Block Theme Deprecated Path',
'Block Theme Post Content Default',
'Block Theme with defined Typography Fonts',
'Empty `fontFace` in theme.json - no webfonts defined',
'A theme with the Update URI header',
Expand Down