_block_bindings_term_data_get_value()
Gets value for Term Data source.
Internal function — this function is designed to be used by the kernel itself. It is not recommended to use this function in your code.
No Hooks.
Returns
Mixed. The value computed for the source.
Usage
_block_bindings_term_data_get_value( $source_args, $block_instance );
- $source_args(array) (required)
- Array containing source arguments used to look up the override value. Example: array( "field" => "name" ).
- $block_instance(WP_Block) (required)
- The block instance.
Changelog
| Since 6.9.0 | Introduced. |
_block_bindings_term_data_get_value() block bindings term data get value code WP 6.9.1
function _block_bindings_term_data_get_value( array $source_args, $block_instance ) {
if ( empty( $source_args['field'] ) ) {
return null;
}
/*
* BACKWARDS COMPATIBILITY: Hardcoded exception for navigation blocks.
* Required for WordPress 6.9+ navigation blocks. DO NOT REMOVE.
*/
$block_name = $block_instance->name ?? '';
$is_navigation_block = in_array(
$block_name,
array( 'core/navigation-link', 'core/navigation-submenu' ),
true
);
if ( $is_navigation_block ) {
// Navigation blocks: read from block attributes.
$term_id = $block_instance->attributes['id'] ?? null;
$type = $block_instance->attributes['type'] ?? '';
// Map UI shorthand to taxonomy slug when using attributes.
$taxonomy = ( 'tag' === $type ) ? 'post_tag' : $type;
} else {
// All other blocks: use context
$term_id = $block_instance->context['termId'] ?? null;
$taxonomy = $block_instance->context['taxonomy'] ?? '';
}
// If we don't have required identifiers, bail early.
if ( empty( $term_id ) || empty( $taxonomy ) ) {
return null;
}
// Get the term data.
$term = get_term( $term_id, $taxonomy );
if ( is_wp_error( $term ) || ! $term ) {
return null;
}
// Check if taxonomy exists and is publicly queryable.
$taxonomy_object = get_taxonomy( $taxonomy );
if ( ! $taxonomy_object || ! $taxonomy_object->publicly_queryable ) {
if ( ! current_user_can( 'read' ) ) {
return null;
}
}
switch ( $source_args['field'] ) {
case 'id':
return esc_html( (string) $term_id );
case 'name':
return esc_html( $term->name );
case 'link':
// Only taxonomy entities are supported by Term Data.
$term_link = get_term_link( $term );
return is_wp_error( $term_link ) ? null : esc_url( $term_link );
case 'slug':
return esc_html( $term->slug );
case 'description':
return wp_kses_post( $term->description );
case 'parent':
return esc_html( (string) $term->parent );
case 'count':
return esc_html( (string) $term->count );
default:
return null;
}
}