/var/www/html_de/wp-includes/block-bindings/post-meta.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
<?php
/**
 * Post Meta source for the block bindings.
 *
 * @since 6.5.0
 * @package WordPress
 * @subpackage Block Bindings
 */

/**
 * Gets value for Post Meta source.
 *
 * @since 6.5.0
 * @access private
 *
 * @param array    $source_args    Array containing source arguments used to look up the override value.
 *                                 Example: array( "key" => "foo" ).
 * @param WP_Block $block_instance The block instance.
 * @return mixed The value computed for the source.
 */
function _block_bindings_post_meta_get_value( array $source_args$block_instance ) {
    if ( empty( 
$source_args['key'] ) ) {
        return 
null;
    }

    if ( empty( 
$block_instance->context['postId'] ) ) {
        return 
null;
    }
    
$post_id $block_instance->context['postId'];

    
// If a post isn't public, we need to prevent unauthorized users from accessing the post meta.
    
$post get_post$post_id );
    if ( ( ! 
is_post_publicly_viewable$post ) && ! current_user_can'read_post'$post_id ) ) || post_password_required$post ) ) {
        return 
null;
    }

    
// Check if the meta field is protected.
    
if ( is_protected_meta$source_args['key'], 'post' ) ) {
        return 
null;
    }

    
// Check if the meta field is registered to be shown in REST.
    
$meta_keys get_registered_meta_keys'post'$block_instance->context['postType'] );
    
// Add fields registered for all subtypes.
    
$meta_keys array_merge$meta_keysget_registered_meta_keys'post''' ) );
    if ( empty( 
$meta_keys$source_args['key'] ]['show_in_rest'] ) ) {
        return 
null;
    }

    return 
get_post_meta$post_id$source_args['key'], true );
}

/**
 * Registers Post Meta source in the block bindings registry.
 *
 * @since 6.5.0
 * @access private
 */
function _register_block_bindings_post_meta_source() {
    
register_block_bindings_source(
        
'core/post-meta',
        array(
            
'label'              => _x'Post Meta''block bindings source' ),
            
'get_value_callback' => '_block_bindings_post_meta_get_value',
            
'uses_context'       => array( 'postId''postType' ),
        )
    );
}

add_action'init''_register_block_bindings_post_meta_source' );