render_block_core_template_part() – Renders the `core/template-part` block on the server.

You appear to be a bot. Output may be restricted

Description

Renders the core/template-part block on the server.

Usage

$string = render_block_core_template_part( $attributes );

Parameters

$attributes
( array ) required – The block attributes.

Returns

string The render.

Source

File name: wordpress/wp-includes/blocks/template-part.php


Lines:

1 to 100 of 149
function render_block_core_template_part( $attributes ) {
  static $seen_ids = array();

  $template_part_id = null;
  $content          = null;
  $area             = WP_TEMPLATE_PART_AREA_UNCATEGORIZED;

  if (
    isset( $attributes['slug'] ) &&
    isset( $attributes['theme'] ) &&
    wp_get_theme()->get_stylesheet() === $attributes['theme']
  ) {
    $template_part_id    = $attributes['theme'] . '//' . $attributes['slug'];
    $template_part_query = new WP_Query(
      array(
        'post_type'      => 'wp_template_part',
        'post_status'    => 'publish',
        'post_name__in'  => array( $attributes['slug'] ),
        'tax_query'      => array(
          array(
            'taxonomy' => 'wp_theme',
            'field'    => 'slug',
            'terms'    => $attributes['theme'],
          ),
        ),
        'posts_per_page' => 1,
        'no_found_rows'  => true,
      )
    );
    $template_part_post  = $template_part_query->have_posts() ? $template_part_query->next_post() : null;
    if ( $template_part_post ) {
      // A published post might already exist if this template part was customized elsewhere
      // or if it's part of a customized template.
      $content    = $template_part_post->post_content;
      $area_terms = get_the_terms( $template_part_post, 'wp_template_part_area' );
      if ( ! is_wp_error( $area_terms ) && false !== $area_terms ) {
        $area = $area_terms[0]->name;
      }
      
/**
 * Fires when a block template part is loaded from a template post stored in the database.
 *
 * @since 5.9.0
 *
 * @param string  $template_part_id   The requested template part namespaced to the theme.
 * @param array   $attributes         The block attributes.
 * @param WP_Post $template_part_post The template part post object.
 * @param string  $content            The template part content.
 */
      do_action( 'render_block_core_template_part_post', $template_part_id, $attributes, $template_part_post, $content );
    } else {
      // Else, if the template part was provided by the active theme,
      // render the corresponding file content.
      $parent_theme_folders        = get_block_theme_folders( get_template() );
      $child_theme_folders         = get_block_theme_folders( get_stylesheet() );
      $child_theme_part_file_path  = get_theme_file_path( '/' . $child_theme_folders['wp_template_part'] . '/' . $attributes['slug'] . '.html' );
      $parent_theme_part_file_path = get_theme_file_path( '/' . $parent_theme_folders['wp_template_part'] . '/' . $attributes['slug'] . '.html' );
      $template_part_file_path     = 0 === validate_file( $attributes['slug'] ) && file_exists( $child_theme_part_file_path ) ? $child_theme_part_file_path : $parent_theme_part_file_path;
      if ( 0 === validate_file( $attributes['slug'] ) && file_exists( $template_part_file_path ) ) {
        $content = file_get_contents( $template_part_file_path );
        $content = is_string( $content ) && '' !== $content
            ? _inject_theme_attribute_in_block_template_content( $content )
            : '';
      }

      if ( '' !== $content && null !== $content ) {
        
/**
 * Fires when a block template part is loaded from a template part in the theme.
 *
 * @since 5.9.0
 *
 * @param string $template_part_id        The requested template part namespaced to the theme.
 * @param array  $attributes              The block attributes.
 * @param string $template_part_file_path Absolute path to the template path.
 * @param string $content                 The template part content.
 */
        do_action( 'render_block_core_template_part_file', $template_part_id, $attributes, $template_part_file_path, $content );
      } else {
        
/**
 * Fires when a requested block template part does not exist in the database nor in the theme.
 *
 * @since 5.9.0
 *
 * @param string $template_part_id        The requested template part namespaced to the theme.
 * @param array  $attributes              The block attributes.
 * @param string $template_part_file_path Absolute path to the not found template path.
 */
        do_action( 'render_block_core_template_part_none', $template_part_id, $attributes, $template_part_file_path );
      }
    }
  }

  // WP_DEBUG_DISPLAY must only be honored when WP_DEBUG. This precedent
  // is set in `wp_debug_mode()`.
  $is_debug = defined( 'WP_DEBUG' ) && WP_DEBUG &&
    defined( 'WP_DEBUG_DISPLAY' ) && WP_DEBUG_DISPLAY;

  if ( is_null( $content ) && $is_debug ) {

 View on GitHub View on Trac