rebase on oct-10-2023
This commit is contained in:
@@ -27,18 +27,19 @@ function render_block_core_template_part( $attributes ) {
|
||||
$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(
|
||||
'post_type' => 'wp_template_part',
|
||||
'post_status' => 'publish',
|
||||
'post_name__in' => array( $attributes['slug'] ),
|
||||
'tax_query' => array(
|
||||
array(
|
||||
'taxonomy' => 'wp_theme',
|
||||
'field' => 'name',
|
||||
'terms' => $attributes['theme'],
|
||||
),
|
||||
),
|
||||
'posts_per_page' => 1,
|
||||
'no_found_rows' => true,
|
||||
'posts_per_page' => 1,
|
||||
'no_found_rows' => true,
|
||||
'lazy_load_term_meta' => false, // Do not lazy load term meta, as template parts only have one term.
|
||||
)
|
||||
);
|
||||
$template_part_post = $template_part_query->have_posts() ? $template_part_query->next_post() : null;
|
||||
@@ -62,18 +63,19 @@ function render_block_core_template_part( $attributes ) {
|
||||
*/
|
||||
do_action( 'render_block_core_template_part_post', $template_part_id, $attributes, $template_part_post, $content );
|
||||
} else {
|
||||
$template_part_file_path = '';
|
||||
// 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 ( 0 === validate_file( $attributes['slug'] ) ) {
|
||||
$block_template_file = _get_block_template_file( 'wp_template_part', $attributes['slug'] );
|
||||
if ( $block_template_file ) {
|
||||
$template_part_file_path = $block_template_file['path'];
|
||||
$content = (string) file_get_contents( $template_part_file_path );
|
||||
$content = '' !== $content ? _inject_theme_attribute_in_block_template_content( $content ) : '';
|
||||
if ( isset( $block_template_file['area'] ) ) {
|
||||
$area = $block_template_file['area'];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ( '' !== $content && null !== $content ) {
|
||||
@@ -172,21 +174,34 @@ function render_block_core_template_part( $attributes ) {
|
||||
/**
|
||||
* Returns an array of area variation objects for the template part block.
|
||||
*
|
||||
* @param array $instance_variations The variations for instances.
|
||||
*
|
||||
* @return array Array containing the block variation objects.
|
||||
*/
|
||||
function build_template_part_block_area_variations() {
|
||||
function build_template_part_block_area_variations( $instance_variations ) {
|
||||
$variations = array();
|
||||
$defined_areas = get_allowed_block_template_part_areas();
|
||||
|
||||
foreach ( $defined_areas as $area ) {
|
||||
if ( 'uncategorized' !== $area['area'] ) {
|
||||
$has_instance_for_area = false;
|
||||
foreach ( $instance_variations as $variation ) {
|
||||
if ( $variation['attributes']['area'] === $area['area'] ) {
|
||||
$has_instance_for_area = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
$scope = $has_instance_for_area ? array() : array( 'inserter' );
|
||||
|
||||
$variations[] = array(
|
||||
'name' => $area['area'],
|
||||
'name' => 'area_' . $area['area'],
|
||||
'title' => $area['label'],
|
||||
'description' => $area['description'],
|
||||
'attributes' => array(
|
||||
'area' => $area['area'],
|
||||
),
|
||||
'scope' => array( 'inserter' ),
|
||||
'scope' => $scope,
|
||||
'icon' => $area['icon'],
|
||||
);
|
||||
}
|
||||
@@ -222,7 +237,7 @@ function build_template_part_block_instance_variations() {
|
||||
|
||||
foreach ( $template_parts as $template_part ) {
|
||||
$variations[] = array(
|
||||
'name' => sanitize_title( $template_part->slug ),
|
||||
'name' => 'instance_' . sanitize_title( $template_part->slug ),
|
||||
'title' => $template_part->title,
|
||||
// If there's no description for the template part don't show the
|
||||
// block description. This is a bit hacky, but prevent the fallback
|
||||
@@ -235,7 +250,7 @@ function build_template_part_block_instance_variations() {
|
||||
'area' => $template_part->area,
|
||||
),
|
||||
'scope' => array( 'inserter' ),
|
||||
'icon' => $icon_by_area[ $template_part->area ],
|
||||
'icon' => isset( $icon_by_area[ $template_part->area ] ) ? $icon_by_area[ $template_part->area ] : null,
|
||||
'example' => array(
|
||||
'attributes' => array(
|
||||
'slug' => $template_part->slug,
|
||||
@@ -254,7 +269,9 @@ function build_template_part_block_instance_variations() {
|
||||
* @return array Array containing the block variation objects.
|
||||
*/
|
||||
function build_template_part_block_variations() {
|
||||
return array_merge( build_template_part_block_area_variations(), build_template_part_block_instance_variations() );
|
||||
$instance_variations = build_template_part_block_instance_variations();
|
||||
$area_variations = build_template_part_block_area_variations( $instance_variations );
|
||||
return array_merge( $area_variations, $instance_variations );
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user