[ Index ] |
PHP Cross Reference of WordPress Trunk (Updated Daily) |
[Summary view] [Print] [Text view]
1 <?php 2 /** 3 * Term Data source for Block Bindings. 4 * 5 * @since 6.9.0 6 * @package WordPress 7 * @subpackage Block Bindings 8 */ 9 10 /** 11 * Gets value for Term Data source. 12 * 13 * @since 6.9.0 14 * @access private 15 * 16 * @param array $source_args Array containing source arguments used to look up the override value. 17 * Example: array( "field" => "name" ). 18 * @param WP_Block $block_instance The block instance. 19 * @return mixed The value computed for the source. 20 */ 21 function _block_bindings_term_data_get_value( array $source_args, $block_instance ) { 22 if ( empty( $source_args['field'] ) ) { 23 return null; 24 } 25 26 /* 27 * BACKWARDS COMPATIBILITY: Hardcoded exception for navigation blocks. 28 * Required for WordPress 6.9+ navigation blocks. DO NOT REMOVE. 29 */ 30 $block_name = $block_instance->name ?? ''; 31 $is_navigation_block = in_array( 32 $block_name, 33 array( 'core/navigation-link', 'core/navigation-submenu' ), 34 true 35 ); 36 37 if ( $is_navigation_block ) { 38 // Navigation blocks: read from block attributes. 39 $term_id = $block_instance->attributes['id'] ?? null; 40 $type = $block_instance->attributes['type'] ?? ''; 41 // Map UI shorthand to taxonomy slug when using attributes. 42 $taxonomy = ( 'tag' === $type ) ? 'post_tag' : $type; 43 } else { 44 // All other blocks: use context 45 $term_id = $block_instance->context['termId'] ?? null; 46 $taxonomy = $block_instance->context['taxonomy'] ?? ''; 47 } 48 49 // If we don't have required identifiers, bail early. 50 if ( empty( $term_id ) || empty( $taxonomy ) ) { 51 return null; 52 } 53 54 // Get the term data. 55 $term = get_term( $term_id, $taxonomy ); 56 if ( is_wp_error( $term ) || ! $term ) { 57 return null; 58 } 59 60 // Check if taxonomy exists and is publicly queryable. 61 $taxonomy_object = get_taxonomy( $taxonomy ); 62 if ( ! $taxonomy_object || ! $taxonomy_object->publicly_queryable ) { 63 if ( ! current_user_can( 'read' ) ) { 64 return null; 65 } 66 } 67 68 switch ( $source_args['field'] ) { 69 case 'id': 70 return esc_html( (string) $term_id ); 71 72 case 'name': 73 return esc_html( $term->name ); 74 75 case 'link': 76 // Only taxonomy entities are supported by Term Data. 77 $term_link = get_term_link( $term ); 78 return is_wp_error( $term_link ) ? null : esc_url( $term_link ); 79 80 case 'slug': 81 return esc_html( $term->slug ); 82 83 case 'description': 84 return wp_kses_post( $term->description ); 85 86 case 'parent': 87 return esc_html( (string) $term->parent ); 88 89 case 'count': 90 return esc_html( (string) $term->count ); 91 92 default: 93 return null; 94 } 95 } 96 97 /** 98 * Registers Term Data source in the block bindings registry. 99 * 100 * @since 6.9.0 101 * @access private 102 */ 103 function _register_block_bindings_term_data_source() { 104 if ( get_block_bindings_source( 'core/term-data' ) ) { 105 // The source is already registered. 106 return; 107 } 108 109 register_block_bindings_source( 110 'core/term-data', 111 array( 112 'label' => _x( 'Term Data', 'block bindings source' ), 113 'get_value_callback' => '_block_bindings_term_data_get_value', 114 'uses_context' => array( 'termId', 'taxonomy' ), 115 ) 116 ); 117 } 118 119 add_action( 'init', '_register_block_bindings_term_data_source' );
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated : Sat Oct 18 08:20:04 2025 | Cross-referenced by PHPXref |