Parsed: 130517

function _build_block_template_result_from_post( $post ) {
  $default_template_types = get_default_block_template_types();
  $terms                  = get_the_terms( $post, 'wp_theme' );

  if ( is_wp_error( $terms ) ) {
    return $terms;
  }

  if ( ! $terms ) {
    return new WP_Error( 'template_missing_theme', __( 'No theme is defined for this template.' ) );
  }

  $theme          = $terms[0]->name;
  $template_file  = _get_block_template_file( $post->post_type, $post->post_name );
  $has_theme_file = get_stylesheet() === $theme && null !== $template_file;

  $origin           = get_post_meta( $post->ID, 'origin', true );
  $is_wp_suggestion = get_post_meta( $post->ID, 'is_wp_suggestion', true );

  $template                 = new WP_Block_Template();
  $template->wp_id          = $post->ID;
  $template->id             = $theme . '//' . $post->post_name;
  $template->theme          = $theme;
  $template->content        = $post->post_content;
  $template->slug           = $post->post_name;
  $template->source         = 'custom';
  $template->origin         = ! empty( $origin ) ? $origin : null;
  $template->type           = $post->post_type;
  $template->description    = $post->post_excerpt;
  $template->title          = $post->post_title;
  $template->status         = $post->post_status;
  $template->has_theme_file = $has_theme_file;
  $template->is_custom      = empty( $is_wp_suggestion );
  $template->author         = $post->post_author;

  if ( 'wp_template' === $post->post_type && $has_theme_file && isset( $template_file['postTypes'] ) ) {
    $template->post_types = $template_file['postTypes'];
  }

  if ( 'wp_template' === $post->post_type && isset( $default_template_types[ $template->slug ] ) ) {
    $template->is_custom = false;
  }

  if ( 'wp_template_part' === $post->post_type ) {
    $type_terms = get_the_terms( $post, 'wp_template_part_area' );
    if ( ! is_wp_error( $type_terms ) && false !== $type_terms ) {
      $template->area = $type_terms[0]->name;
    }
  }

  // Check for a block template without a description and title or with a title equal to the slug.
  if ( 'wp_template' === $post->post_type && empty( $template->description ) && ( empty( $template->title ) || $template->title === $template->slug ) ) {
    $matches = array();

    // Check for a block template for a single author, page, post, tag, category, custom post type, or custom taxonomy.
    if ( preg_match( '/(author|page|single|tag|category|taxonomy)-(.+)/', $template->slug, $matches ) ) {
      $type           = $matches[1];
      $slug_remaining = $matches[2];

      switch ( $type ) {
        case 'author':
          $nice_name = $slug_remaining;
          $users     = get_users(
            array(
              'capability'     => 'edit_posts',
              'search'         => $nice_name,
              'search_columns' => array( 'user_nicename' ),
              'fields'         => 'display_name',
            )
          );

          if ( empty( $users ) ) {
            $template->title = sprintf(
              /* translators: Custom template title in the Site Editor, referencing a deleted author. %s: Author nicename. */
              __( 'Deleted author: %s' ),
              $nice_name
            );
          } else {
            $author_name = $users[0];

            $template->title = sprintf(
              /* translators: Custom template title in the Site Editor. %s: Author name. */
              __( 'Author: %s' ),
              $author_name
            );

            $template->description = sprintf(
              /* translators: Custom template description in the Site Editor. %s: Author name. */
              __( 'Template for %s' ),
              $author_name
            );

            $users_with_same_name = get_users(
              array(
                'capability'     => 'edit_posts',
                'search'         => $author_name,
                'search_columns' => array( 'display_name' ),
                'fields'         => 'display_name',
              )
            );

            if ( count( $users_with_same_name ) > 1 ) {
              $template->title = sprintf(
                /* translators: Custom template title in the Site Editor. 1: Template title of an author template, 2: Author nicename. */
                __( '%1$s (%2$s)' ),
                $template->title,
                $nice_name
              );
            }
          }
          break;
        case 'page':
          _wp_build_title_and_description_for_single_post_type_block_template( 'page', $slug_remaining, $template );
          break;
        case 'single':
          $post_types = get_post_types();

          foreach ( $post_types as $post_type ) {
            $post_type_length = strlen( $post_type ) + 1;

            // If $slug_remaining starts with $post_type followed by a hyphen.
            if ( 0 === strncmp( $slug_remaining, $post_type . '-', $post_type_length ) ) {
              $slug  = substr( $slug_remaining, $post_type_length, strlen( $slug_remaining ) );
              $found = _wp_build_title_and_description_for_single_post_type_block_template( $post_type, $slug, $template );

              if ( $found ) {
                break;
              }
            }
          }
          break;
        case 'tag':
          _wp_build_title_and_description_for_taxonomy_block_template( 'post_tag', $slug_remaining, $template );
          break;
        case 'category':
          _wp_build_title_and_description_for_taxonomy_block_template( 'category', $slug_remaining, $template );
          break;
        case 'taxonomy':
          $taxonomies = get_taxonomies();

          foreach ( $taxonomies as $taxonomy ) {
            $taxonomy_length = strlen( $taxonomy ) + 1;

            // If $slug_remaining starts with $taxonomy followed by a hyphen.
            if ( 0 === strncmp( $slug_remaining, $taxonomy . '-', $taxonomy_length ) ) {
              $slug  = substr( $slug_remaining, $taxonomy_length, strlen( $slug_remaining ) );
              $found = _wp_build_title_and_description_for_taxonomy_block_template( $taxonomy, $slug, $template );

              if ( $found ) {
                break;
              }
            }
          }
          break;
      }
    }
  }

  return $template;
}