/var/www/html_de/wp-includes/blocks/block.php


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
<?php
/**
 * Server-side rendering of the `core/block` block.
 *
 * @package WordPress
 */

/**
 * Renders the `core/block` block on server.
 *
 * @since 5.0.0
 *
 * @global WP_Embed $wp_embed
 *
 * @param array $attributes The block attributes.
 *
 * @return string Rendered HTML of the referenced block.
 */
function render_block_core_block$attributes ) {
    static 
$seen_refs = array();

    if ( empty( 
$attributes['ref'] ) ) {
        return 
'';
    }

    
$reusable_block get_post$attributes['ref'] );
    if ( ! 
$reusable_block || 'wp_block' !== $reusable_block->post_type ) {
        return 
'';
    }

    if ( isset( 
$seen_refs$attributes['ref'] ] ) ) {
        
// WP_DEBUG_DISPLAY must only be honored when WP_DEBUG. This precedent
        // is set in `wp_debug_mode()`.
        
$is_debug WP_DEBUG && WP_DEBUG_DISPLAY;

        return 
$is_debug ?
            
// translators: Visible only in the front end, this warning takes the place of a faulty block.
            
__'[block rendering halted]' ) :
            
'';
    }

    if ( 
'publish' !== $reusable_block->post_status || ! empty( $reusable_block->post_password ) ) {
        return 
'';
    }

    
$seen_refs$attributes['ref'] ] = true;

    
// Handle embeds for reusable blocks.
    
global $wp_embed;
    
$content $wp_embed->run_shortcode$reusable_block->post_content );
    
$content $wp_embed->autoembed$content );

    
// Back compat.
    // For blocks that have not been migrated in the editor, add some back compat
    // so that front-end rendering continues to work.

    // This matches the `v2` deprecation. Removes the inner `values` property
    // from every item.
    
if ( isset( $attributes['content'] ) ) {
        foreach ( 
$attributes['content'] as &$content_data ) {
            if ( isset( 
$content_data['values'] ) ) {
                
$is_assoc_array is_array$content_data['values'] ) && ! wp_is_numeric_array$content_data['values'] );

                if ( 
$is_assoc_array ) {
                    
$content_data $content_data['values'];
                }
            }
        }
    }

    
// This matches the `v1` deprecation. Rename `overrides` to `content`.
    
if ( isset( $attributes['overrides'] ) && ! isset( $attributes['content'] ) ) {
        
$attributes['content'] = $attributes['overrides'];
    }

    
/**
     * We set the `pattern/overrides` context through the `render_block_context`
     * filter so that it is available when a pattern's inner blocks are
     * rendering via do_blocks given it only receives the inner content.
     */
    
$has_pattern_overrides = isset( $attributes['content'] ) && null !== get_block_bindings_source'core/pattern-overrides' );
    if ( 
$has_pattern_overrides ) {
        
$filter_block_context = static function ( $context ) use ( $attributes ) {
            
$context['pattern/overrides'] = $attributes['content'];
            return 
$context;
        };
        
add_filter'render_block_context'$filter_block_context);
    }

    
// Apply Block Hooks.
    
$content apply_block_hooks_to_content_from_post_object$content$reusable_block );

    
$content do_blocks$content );
    unset( 
$seen_refs$attributes['ref'] ] );

    if ( 
$has_pattern_overrides ) {
        
remove_filter'render_block_context'$filter_block_context);
    }

    return 
$content;
}

/**
 * Registers the `core/block` block.
 *
 * @since 5.3.0
 */
function register_block_core_block() {
    
register_block_type_from_metadata(
        
__DIR__ '/block',
        array(
            
'render_callback' => 'render_block_core_block',
        )
    );
}
add_action'init''register_block_core_block' );