[ Index ]

PHP Cross Reference of WordPress Trunk (Updated Daily)

Search

title

Body

[close]

/wp-includes/block-bindings/ -> term-data.php (source)

   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' );


Generated : Sat Oct 18 08:20:04 2025 Cross-referenced by PHPXref