- { isReusable || hoveredItemBlockType?.example ? (
+ { isReusable || example ? (
'wp_template_part',
+ ),
+ 'wp_template_part'
+ );
+
+ $defined_areas = get_allowed_block_template_part_areas();
+ $icon_by_area = array_combine( array_column( $defined_areas, 'area' ), array_column( $defined_areas, 'icon' ) );
+
+ foreach ( $template_parts as $template_part ) {
+ $variations[] = array(
+ 'name' => 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
+ // by using a non-breaking space so that the value of description
+ // isn't falsey.
+ 'description' => $template_part->description || ' ',
+ 'attributes' => array(
+ 'slug' => $template_part->slug,
+ 'theme' => $template_part->theme,
+ 'area' => $template_part->area,
+ ),
+ 'scope' => array( 'inserter' ),
+ 'icon' => $icon_by_area[ $template_part->area ],
+ 'example' => array(
+ 'attributes' => array(
+ 'slug' => $template_part->slug,
+ 'theme' => $template_part->theme,
+ 'area' => $template_part->area,
+ ),
+ ),
+ );
+ }
+ return $variations;
+}
+
+/**
+ * Returns an array of all template part block 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() );
+}
+
/**
* Registers the `core/template-part` block on the server.
*/