diff --git a/src/wp-includes/class-wp-duotone.php b/src/wp-includes/class-wp-duotone.php index 1bb8bea5cd3d2..813258c10dde5 100644 --- a/src/wp-includes/class-wp-duotone.php +++ b/src/wp-includes/class-wp-duotone.php @@ -1074,7 +1074,7 @@ private static function get_all_global_style_block_names() { * @return string Filtered block content. */ public static function render_duotone_support( $block_content, $block, $wp_block ) { - if ( empty( $block_content ) || ! $block['blockName'] ) { + if ( ! $block['blockName'] ) { return $block_content; } $duotone_selector = self::get_selector( $wp_block->block_type ); diff --git a/tests/phpunit/tests/block-supports/duotone.php b/tests/phpunit/tests/block-supports/duotone.php index 9ec3c709580b3..eac3d2acac3a3 100644 --- a/tests/phpunit/tests/block-supports/duotone.php +++ b/tests/phpunit/tests/block-supports/duotone.php @@ -102,6 +102,33 @@ public function data_get_slug_from_attribute() { ); } + /** + * Tests whether the CSS declarations are generated even if the block content is + * empty. This is needed to make the CSS output stable across paginations for + * features like the enhanced pagination of the Query block. + * + * @ticket 59694 + * + * @covers ::render_duotone_support + */ + public function test_css_declarations_are_generated_even_with_empty_block_content() { + $block = array( + 'blockName' => 'core/image', + 'attrs' => array( 'style' => array( 'color' => array( 'duotone' => 'var:preset|duotone|blue-orange' ) ) ), + ); + $wp_block = new WP_Block( $block ); + $block_css_declarations_property = new ReflectionProperty( 'WP_Duotone', 'block_css_declarations' ); + $block_css_declarations_property->setAccessible( true ); + $block_css_declarations_property->setValue( $wp_block, array() ); + + WP_Duotone::render_duotone_support( '', $block, $wp_block ); + $actual = $block_css_declarations_property->getValue(); + // Reset the property's visibility. + $block_css_declarations_property->setAccessible( false ); + + $this->assertNotEmpty( $actual ); + } + /** * @dataProvider data_is_preset */