Make WordPress Core


Ignore:
Timestamp:
10/06/2021 06:47:09 PM (4 years ago)
Author:
azaozz
Message:

Apply the pre_render_block, render_block_data, and render_block_context filters when rendering inner/nested blocks. Introdices another param to these filters: $parent_block that is the "parent" WP_Block instance for nested blocks and null for top level blocks. Adds unit tests for the filters.

Props noisysocks, gaambo, azaozz.
Fixes #51612.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/tests/phpunit/tests/blocks/wpBlock.php

    r51657 r51894  
    629629        $this->assertFalse( $gradient_support );
    630630    }
     631
     632    /**
     633     * @ticket 51612
     634     */
     635    public function test_block_filters_for_inner_blocks() {
     636        $pre_render_callback           = new MockAction();
     637        $render_block_data_callback    = new MockAction();
     638        $render_block_context_callback = new MockAction();
     639
     640        $this->registry->register(
     641            'core/outer',
     642            array(
     643                'render_callback' => function( $block_attributes, $content ) {
     644                    return $content;
     645                },
     646            )
     647        );
     648
     649        $this->registry->register(
     650            'core/inner',
     651            array(
     652                'render_callback' => function() {
     653                    return 'b';
     654                },
     655            )
     656        );
     657
     658        $parsed_blocks = parse_blocks( '<!-- wp:outer -->a<!-- wp:inner /-->c<!-- /wp:outer -->' );
     659        $parsed_block  = $parsed_blocks[0];
     660
     661        add_filter( 'pre_render_block', array( $pre_render_callback, 'filter' ) );
     662        add_filter( 'render_block_data', array( $render_block_data_callback, 'filter' ) );
     663        add_filter( 'render_block_context', array( $render_block_context_callback, 'filter' ) );
     664
     665        render_block( $parsed_block );
     666
     667        $this->assertSame( 2, $pre_render_callback->get_call_count() );
     668        $this->assertSame( 2, $render_block_data_callback->get_call_count() );
     669        $this->assertSame( 2, $render_block_context_callback->get_call_count() );
     670    }
    631671}
Note: See TracChangeset for help on using the changeset viewer.