plugin updates

This commit is contained in:
Tony Volpe
2024-11-15 13:53:04 -05:00
parent 1293d604ca
commit 0238f0c4ca
2009 changed files with 163492 additions and 89543 deletions

View File

@@ -0,0 +1,35 @@
<?php
/**
* Brand description
*
* This template can be overridden by copying it to yourtheme/woocommerce/brands/brand-description.php.
*
* HOWEVER, on occasion WooCommerce will need to update template files and you
* (the theme developer) will need to copy the new files to your theme to
* maintain compatibility. We try to do this as little as possible, but it does
* happen. When this occurs the version of the template file will be bumped and
* the readme will list any important changes.
*
* @see https://woocommerce.com/document/template-structure/
* @package WooCommerce\Templates
* @version 9.4.0
*/
declare( strict_types = 1);
$image_size = wc_get_image_size( 'shop_catalog' ); ?>
<div class="term-description brand-description">
<?php if ( $thumbnail ) : ?>
<img src="<?php echo esc_url( $thumbnail ); ?>" alt="Thumbnail" class="wp-post-image alignright fr brand-thumbnail" width="<?php echo esc_attr( $image_size['width'] ); ?>" />
<?php endif; ?>
<div class="text">
<?php echo do_shortcode( wpautop( wptexturize( term_description() ) ) ); ?>
</div>
</div>

View File

@@ -0,0 +1,63 @@
<?php
/**
* Brand A-Z listing
*
* This template can be overridden by copying it to yourtheme/woocommerce/brands/shortcodes/brands-a-z.php.
*
* HOWEVER, on occasion WooCommerce will need to update template files and you
* (the theme developer) will need to copy the new files to your theme to
* maintain compatibility. We try to do this as little as possible, but it does
* happen. When this occurs the version of the template file will be bumped and
* the readme will list any important changes.
*
* @see https://woocommerce.com/document/template-structure/
* @package WooCommerce\Templates
* @usedby [product_brand_list]
* @version 9.4.0
*/
declare( strict_types = 1);
?>
<div id="brands_a_z">
<ul class="brands_index">
<?php
foreach ( $index as $i ) {
if ( isset( $product_brands[ $i ] ) ) {
echo '<li><a href="#brands-' . esc_attr( $i ) . '">' . esc_html( $i ) . '</a></li>';
} elseif ( $show_empty ) {
echo '<li><span>' . esc_html( $i ) . '</span></li>';
}
}
?>
</ul>
<?php
foreach ( $index as $i ) {
if ( isset( $product_brands[ $i ] ) ) {
?>
<h3 id="brands-<?php echo esc_attr( $i ); ?>"><?php echo esc_html( $i ); ?></h3>
<ul class="brands">
<?php
foreach ( $product_brands[ $i ] as $brand ) {
printf(
'<li><a href="%s">%s</a></li>',
esc_url( get_term_link( $brand->slug, 'product_brand' ) ),
esc_html( $brand->name )
);
}
?>
</ul>
<?php if ( $show_top_links ) { ?>
<a class="top" href="#brands_a_z"><?php esc_html_e( '&uarr; Top', 'woocommerce' ); ?></a>
<?php } ?>
<?php
}
}
?>
</div>

View File

@@ -0,0 +1,38 @@
<?php
/**
* Single Brand
*
* This template can be overridden by copying it to yourtheme/woocommerce/brands/shortcodes/single-brand.php.
*
* HOWEVER, on occasion WooCommerce will need to update template files and you
* (the theme developer) will need to copy the new files to your theme to
* maintain compatibility. We try to do this as little as possible, but it does
* happen. When this occurs the version of the template file will be bumped and
* the readme will list any important changes.
*
*
* @see WC_Brands::output_product_brand()
*
* @var WP_Term $term The term object.
* @var string $thumbnail The URL to the brand thumbnail.
* @var string $class The class to apply to the thumbnail image.
* @var string $width The width of the image.
* @var string $height The height of the image.
*
* Ignore space indent sniff for this file, as it is used for alignment rather than actual indents.
* phpcs:ignoreFile Generic.WhiteSpace.DisallowSpaceIndent
*
* @see https://woocommerce.com/document/template-structure/
* @package WooCommerce\Templates
* @usedby [product_brand]
* @version 9.4.0
*/
declare( strict_types = 1);
?>
<a href="<?php echo esc_url( get_term_link( $term, 'product_brand' ) ); ?>">
<img src="<?php echo esc_url( $thumbnail ); ?>"
alt="<?php echo esc_attr( $term->name ); ?>"
class="<?php echo esc_attr( $class ); ?>"
style="width: <?php echo esc_attr( $width ); ?>; height: <?php echo esc_attr( $height ); ?>;"/>
</a>

View File

@@ -0,0 +1,12 @@
<?php // phpcs:ignore WordPress.Files.FileName.NotHyphenatedLowercase for backwards compatibility.
/**
* Use the WooCommerce archive template for brand taxonomy pages
*
* @package WooCommerce\Templates
* @version 9.4.0
*/
declare( strict_types = 1);
wc_get_template( 'archive-product.php' );

View File

@@ -0,0 +1,27 @@
<?php
/**
* Show a brands description when on a taxonomy page
*
* This template can be overridden by copying it to yourtheme/woocommerce/brands/widgets/brand-description.php.
*
* HOWEVER, on occasion WooCommerce will need to update template files and you
* (the theme developer) will need to copy the new files to your theme to
* maintain compatibility. We try to do this as little as possible, but it does
* happen. When this occurs the version of the template file will be bumped and
* the readme will list any important changes.
*
* @see https://woocommerce.com/document/template-structure/
* @package WooCommerce\Templates
* @version 9.4.0
*/
declare( strict_types = 1);
global $woocommerce;
if ( $thumbnail ) {
// phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
echo wc_get_brand_thumbnail_image( $brand );
}
echo wp_kses_post( wpautop( wptexturize( term_description() ) ) );

View File

@@ -0,0 +1,58 @@
<?php
/**
* Show a grid of thumbnails
*
* This template can be overridden by copying it to yourtheme/woocommerce/brands/widgets/brand-thumbnails-description.php.
*
* HOWEVER, on occasion WooCommerce will need to update template files and you
* (the theme developer) will need to copy the new files to your theme to
* maintain compatibility. We try to do this as little as possible, but it does
* happen. When this occurs the version of the template file will be bumped and
* the readme will list any important changes.
*
* @see https://woocommerce.com/document/template-structure/
* @package WooCommerce\Templates
* @version 9.4.0
*/
declare( strict_types = 1);
?>
<ul class="brand-thumbnails-description">
<?php
foreach ( $brands as $index => $brand ) :
/**
* Filter the brand's thumbnail size.
*
* @since 9.4.0
* @param string $size Defaults to 'shop_catalog'
*/
$thumbnail = wc_get_brand_thumbnail_url( $brand->term_id, apply_filters( 'woocommerce_brand_thumbnail_size', 'shop_catalog' ) );
if ( ! $thumbnail ) {
$thumbnail = wc_placeholder_img_src();
}
$class = '';
if ( 0 === $index || 0 === $index % $columns ) {
$class = 'first';
} elseif ( 0 === ( $index + 1 ) % $columns ) {
$class = 'last';
}
$width = floor( ( ( 100 - ( ( $columns - 1 ) * 2 ) ) / $columns ) * 100 ) / 100;
?>
<li class="<?php echo esc_attr( $class ); ?>" style="width: <?php echo esc_attr( $width ); ?>%;">
<a href="<?php echo esc_url( get_term_link( $brand->slug, 'product_brand' ) ); ?>" title="<?php echo esc_attr( $brand->name ); ?>" class="term-thumbnail">
<img src="<?php echo esc_url( $thumbnail ); ?>" alt="<?php echo esc_attr( $brand->name ); ?>" />
</a>
<div id="term-<?php echo esc_attr( $brand->term_id ); ?>" class="term-description">
<?php echo wp_kses_post( wpautop( wptexturize( $brand->description ) ) ); ?>
</div>
</li>
<?php endforeach; ?>
</ul>

View File

@@ -0,0 +1,45 @@
<?php
/**
* Show a grid of thumbnails
*
* This template can be overridden by copying it to yourtheme/woocommerce/brands/widgets/brand-thumbnails.php.
*
* HOWEVER, on occasion WooCommerce will need to update template files and you
* (the theme developer) will need to copy the new files to your theme to
* maintain compatibility. We try to do this as little as possible, but it does
* happen. When this occurs the version of the template file will be bumped and
* the readme will list any important changes.
*
* @see https://woocommerce.com/document/template-structure/
* @package WooCommerce\Templates
* @version 9.4.0
*/
declare( strict_types = 1);
$wrapper_class = 'fluid-columns';
if ( ! $fluid_columns && in_array( $columns, array( 1, 2, 3, 4, 5, 6 ), true ) ) {
$wrapper_class = 'columns-' . $columns;
}
?>
<ul class="brand-thumbnails <?php echo esc_attr( $wrapper_class ); ?>">
<?php
foreach ( array_values( $brands ) as $index => $brand ) :
$class = '';
if ( 0 === $index || 0 === $index % $columns ) {
$class = 'first';
} elseif ( 0 === ( $index + 1 ) % $columns ) {
$class = 'last';
}
?>
<li class="<?php echo esc_attr( $class ); ?>">
<a href="<?php echo esc_url( get_term_link( $brand->slug, 'product_brand' ) ); ?>" title="<?php echo esc_attr( $brand->name ); ?>">
<?php echo wc_get_brand_thumbnail_image( $brand ); // phpcs:ignore WordPress.Security.EscapeOutput ?>
</a>
</li>
<?php endforeach; ?>
</ul>

View File

@@ -14,7 +14,7 @@
*
* @see https://woocommerce.com/document/template-structure/
* @package WooCommerce\Templates
* @version 9.2.0
* @version 9.3.0
*/
defined( 'ABSPATH' ) || exit;

View File

@@ -12,7 +12,7 @@
*
* @see https://woocommerce.com/document/template-structure/
* @package WooCommerce\Templates
* @version 3.5.0
* @version 9.4.0
*/
if ( ! defined( 'ABSPATH' ) ) {
@@ -29,7 +29,7 @@ if ( ! $checkout->is_registration_enabled() && $checkout->is_registration_requir
?>
<form name="checkout" method="post" class="checkout woocommerce-checkout" action="<?php echo esc_url( wc_get_checkout_url() ); ?>" enctype="multipart/form-data">
<form name="checkout" method="post" class="checkout woocommerce-checkout" action="<?php echo esc_url( wc_get_checkout_url() ); ?>" enctype="multipart/form-data" aria-label="<?php echo esc_attr__( 'Checkout', 'woocommerce' ); ?>">
<?php if ( $checkout->get_checkout_fields() ) : ?>

View File

@@ -12,15 +12,15 @@
*
* @see https://woocommerce.com/document/template-structure/
* @package WooCommerce\Templates
* @version 3.6.0
* @version 9.4.0
*/
defined( 'ABSPATH' ) || exit;
global $product;
// Ensure visibility.
if ( empty( $product ) || ! $product->is_visible() ) {
// Check if the product is a valid WooCommerce product and ensure its visibility before proceeding.
if ( ! is_a( $product, WC_Product::class ) || ! $product->is_visible() ) {
return;
}
?>

View File

@@ -12,7 +12,7 @@
*
* @see https://woocommerce.com/document/template-structure/
* @package WooCommerce\Templates
* @version 7.8.0
* @version 9.4.0
*
* @var bool $readonly If the input should be set to readonly mode.
* @var string $type The input type attribute.
@@ -42,7 +42,9 @@ $label = ! empty( $args['product_name'] ) ? sprintf( esc_html__( '%s quantity',
name="<?php echo esc_attr( $input_name ); ?>"
value="<?php echo esc_attr( $input_value ); ?>"
aria-label="<?php esc_attr_e( 'Product quantity', 'woocommerce' ); ?>"
size="4"
<?php if ( in_array( $type, array( 'text', 'search', 'tel', 'url', 'email', 'password' ), true ) ) : ?>
size="4"
<?php endif; ?>
min="<?php echo esc_attr( $min_value ); ?>"
max="<?php echo esc_attr( 0 < $max_value ? $max_value : '' ); ?>"
<?php if ( ! $readonly ) : ?>

View File

@@ -14,26 +14,28 @@
*
* @see https://woocommerce.com/document/template-structure/
* @package WooCommerce\Templates
* @version 3.7.0
* @version 9.4.0
*/
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
?>
<p class="woocommerce-result-count">
<p class="woocommerce-result-count" <?php echo ( empty( $orderedby ) || 1 === intval( $total ) ) ? '' : 'role="alert" aria-relevant="all" data-is-sorted-by="true"'; ?>>
<?php
// phpcs:disable WordPress.Security
if ( 1 === intval( $total ) ) {
_e( 'Showing the single result', 'woocommerce' );
} elseif ( $total <= $per_page || -1 === $per_page ) {
/* translators: %d: total results */
printf( _n( 'Showing all %d result', 'Showing all %d results', $total, 'woocommerce' ), $total );
$orderedby_placeholder = empty( $orderedby ) ? '%2$s' : '<span class="screen-reader-text">%2$s</span>';
/* translators: 1: total results 2: sorted by */
printf( _n( 'Showing all %1$d result', 'Showing all %1$d results', $total, 'woocommerce' ) . $orderedby_placeholder, $total, esc_html( $orderedby ) );
} else {
$first = ( $per_page * $current ) - $per_page + 1;
$last = min( $total, $per_page * $current );
/* translators: 1: first result 2: last result 3: total results */
printf( _nx( 'Showing %1$d&ndash;%2$d of %3$d result', 'Showing %1$d&ndash;%2$d of %3$d results', $total, 'with first and last result', 'woocommerce' ), $first, $last, $total );
$first = ( $per_page * $current ) - $per_page + 1;
$last = min( $total, $per_page * $current );
$orderedby_placeholder = empty( $orderedby ) ? '%4$s' : '<span class="screen-reader-text">%4$s</span>';
/* translators: 1: first result 2: last result 3: total results 4: sorted by */
printf( _nx( 'Showing %1$d&ndash;%2$d of %3$d result', 'Showing %1$d&ndash;%2$d of %3$d results', $total, 'with first and last result', 'woocommerce' ) . $orderedby_placeholder, $first, $last, $total, esc_html( $orderedby ) );
}
// phpcs:enable WordPress.Security
?>

View File

@@ -1,6 +1,6 @@
<!-- wp:woocommerce/product-filters-overlay {"lock":{"move":true,"remove":true}} -->
<div class="wp-block-woocommerce-product-filters-overlay wc-block-product-filters-overlay" style="padding-top:1rem;padding-right:1rem;padding-bottom:1rem;padding-left:1rem">
<!-- wp:woocommerce/product-filters-overlay-navigation {"lock":{"move":true,"remove":true}} -->
<!-- wp:woocommerce/product-filters-overlay-navigation {"triggerType":"close-overlay","lock":{"move":true,"remove":true}} -->
<div class="wp-block-woocommerce-product-filters-overlay-navigation alignright wc-block-product-filters-overlay-navigation"></div>
<!-- /wp:woocommerce/product-filters-overlay-navigation -->

View File

@@ -1,79 +1,28 @@
<!-- wp:woocommerce/product-filters -->
<!-- wp:woocommerce/product-filters-overlay-navigation {"align":"left","triggerType":"open-overlay","lock":{"move":true,"remove":true}} -->
<div class="wp-block-woocommerce-product-filters-overlay-navigation alignleft wc-block-product-filters-overlay-navigation"></div>
<!-- /wp:woocommerce/product-filters-overlay-navigation -->
<div class="wp-block-woocommerce-product-filters wc-block-product-filters">
<!-- wp:heading {"level":2} -->
<h2 class="wp-block-heading">Filters</h2>
<!-- /wp:heading -->
<div class="wp-block-woocommerce-product-filters wc-block-product-filters"><!-- wp:heading {"level":3,"style":{"typography":{"fontSize":"24px"}}} -->
<h3 class="wp-block-heading" style="font-size:24px">Filters</h3>
<!-- /wp:heading -->
<!-- wp:woocommerce/product-filter-active {"displayStyle":"chips"} /-->
<!-- wp:woocommerce/product-filter {"filterType":"active-filters","heading":"Active"} -->
<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Active</h3>
<!-- /wp:heading -->
<!-- wp:pattern {"slug":"woocommerce/default-attribute-filter"} /-->
<!-- wp:woocommerce/product-filter-active {"lock":{"remove":true}} /-->
<!-- /wp:woocommerce/product-filter -->
<!-- wp:woocommerce/product-filter {"filterType":"price-filter","heading":"Price"} -->
<!-- wp:group {"metadata":{"name":"Header"},"style":{"spacing":{"blockGap":"0"}},"layout":{"type":"flex","flexWrap":"nowrap"}} -->
<div class="wp-block-group"><!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Price</h3>
<!-- /wp:heading -->
<!-- wp:woocommerce/product-filter-clear-button {"lock":{"remove":true,"move":false}} -->
<!-- wp:buttons {"layout":{"type":"flex"}} -->
<div class="wp-block-buttons"><!-- wp:button {"className":"wc-block-product-filter-clear-button is-style-outline","style":{"border":{"width":"0px","style":"none"},"typography":{"textDecoration":"underline"},"outline":"none","fontSize":"medium"}} -->
<div class="wp-block-button wc-block-product-filter-clear-button is-style-outline" style="text-decoration:underline"><a class="wp-block-button__link wp-element-button" style="border-style:none;border-width:0px">Clear</a></div>
<!-- /wp:button --></div>
<!-- /wp:buttons -->
<!-- /wp:woocommerce/product-filter-clear-button --></div>
<!-- /wp:group -->
<!-- wp:woocommerce/product-filter-price {"lock":{"remove":true}} /-->
<!-- /wp:woocommerce/product-filter -->
<!-- wp:woocommerce/product-filter {"filterType":"stock-filter","heading":"Status"} -->
<!-- wp:group {"metadata":{"name":"Header"},"style":{"spacing":{"blockGap":"0"}},"layout":{"type":"flex","flexWrap":"nowrap"}} -->
<div class="wp-block-group"><!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Status</h3>
<!-- /wp:heading -->
<!-- wp:woocommerce/product-filter-clear-button {"lock":{"remove":true,"move":false}} -->
<!-- wp:buttons {"layout":{"type":"flex"}} -->
<div class="wp-block-buttons"><!-- wp:button {"className":"wc-block-product-filter-clear-button is-style-outline","style":{"border":{"width":"0px","style":"none"},"typography":{"textDecoration":"underline"},"outline":"none","fontSize":"medium"}} -->
<div class="wp-block-button wc-block-product-filter-clear-button is-style-outline" style="text-decoration:underline"><a class="wp-block-button__link wp-element-button" style="border-style:none;border-width:0px">Clear</a></div>
<!-- /wp:button --></div>
<!-- /wp:buttons -->
<!-- /wp:woocommerce/product-filter-clear-button --></div>
<!-- /wp:group -->
<!-- wp:woocommerce/product-filter-stock-status {"lock":{"remove":true}} /-->
<!-- /wp:woocommerce/product-filter -->
<!-- wp:pattern {"slug":"woocommerce/default-attribute-filter"} /-->
<!-- wp:woocommerce/product-filter {"filterType":"rating-filter","heading":"Rating"} -->
<!-- wp:group {"metadata":{"name":"Header"},"style":{"spacing":{"blockGap":"0"}},"layout":{"type":"flex","flexWrap":"nowrap"}} -->
<div class="wp-block-group"><!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading">Rating</h3>
<!-- /wp:heading -->
<!-- wp:woocommerce/product-filter-clear-button {"lock":{"remove":true,"move":false}} -->
<!-- wp:buttons {"layout":{"type":"flex"}} -->
<div class="wp-block-buttons"><!-- wp:button {"className":"wc-block-product-filter-clear-button is-style-outline","style":{"border":{"width":"0px","style":"none"},"typography":{"textDecoration":"underline"},"outline":"none","fontSize":"medium"}} -->
<div class="wp-block-button wc-block-product-filter-clear-button is-style-outline" style="text-decoration:underline"><a class="wp-block-button__link wp-element-button" style="border-style:none;border-width:0px">Clear</a></div>
<!-- /wp:button --></div>
<!-- /wp:buttons -->
<!-- /wp:woocommerce/product-filter-clear-button --></div>
<!-- /wp:group -->
<!-- wp:woocommerce/product-filter-rating {"lock":{"remove":true}} /-->
<!-- /wp:woocommerce/product-filter -->
<!-- wp:buttons {"layout":{"type":"flex"}} -->
<div class="wp-block-buttons"><!-- wp:button {"className":"wc-block-product-filters__apply-button","style":{"border":{"width":"0px","style":"none"},"typography":{"textDecoration":"none"},"outline":"none","fontSize":"medium"}} -->
<div class="wp-block-button wc-block-product-filters__apply-button" style="text-decoration:none"><a class="wp-block-button__link wp-element-button" style="border-style:none;border-width:0px">Apply</a></div>
<!-- /wp:button --></div>
<!-- /wp:buttons --></div>
<!-- wp:buttons {"layout":{"type":"flex"}} -->
<div class="wp-block-buttons">
<!-- wp:button {"className":"wc-block-product-filters__apply-button","style":{"border":{"width":"0px","style":"none"},"typography":{"textDecoration":"none"},"outline":"none","fontSize":"medium"}} -->
<div
class="wp-block-button wc-block-product-filters__apply-button"
style="text-decoration: none"
>
<a
class="wp-block-button__link wp-element-button"
style="border-style: none; border-width: 0px"
>Apply</a
>
</div>
<!-- /wp:button -->
</div>
<!-- /wp:buttons -->
</div>
<!-- /wp:woocommerce/product-filters -->

View File

@@ -0,0 +1,42 @@
<!-- wp:template-part {"slug":"header"} /-->
<!-- wp:group {"layout":{"inherit":true,"type":"constrained"}} -->
<div class="wp-block-group">
<!-- wp:woocommerce/breadcrumbs /-->
<!-- wp:query-title {"type":"archive","showPrefix":false,"align":"wide"} /-->
<!-- wp:term-description {"align":"wide"} /-->
<!-- wp:woocommerce/store-notices /-->
<!-- wp:group {"layout":{"type":"flex","flexWrap":"nowrap","justifyContent":"space-between"}} -->
<div class="wp-block-group alignwide">
<!-- wp:woocommerce/product-results-count /-->
<!-- wp:woocommerce/catalog-sorting /-->
</div>
<!-- /wp:group -->
<!-- wp:query {"query":{"perPage":9,"pages":0,"offset":0,"postType":"product","order":"asc","orderBy":"title","author":"","search":"","exclude":[],"sticky":"","inherit":true,"__woocommerceAttributes":[],"__woocommerceStockStatus":["instock","outofstock","onbackorder"]},"displayLayout":{"type":"flex","columns":3},"namespace":"woocommerce/product-query","align":"wide"} -->
<div class="wp-block-query alignwide">
<!-- wp:post-template {"className":"products-block-post-template","__woocommerceNamespace":"woocommerce/product-query/product-template"} -->
<!-- wp:woocommerce/product-image {"isDescendentOfQueryLoop":true} /-->
<!-- wp:post-title {"textAlign":"center","level":3,"fontSize":"medium","isLink":true,"__woocommerceNamespace":"woocommerce/product-query/product-title"} /-->
<!-- wp:woocommerce/product-price {"isDescendentOfQueryLoop":true,"textAlign":"center","fontSize":"small","style":{"spacing":{"margin":{"bottom":"1rem"}}}} /-->
<!-- wp:woocommerce/product-button {"isDescendentOfQueryLoop":true,"textAlign":"center","fontSize":"small","style":{"spacing":{"margin":{"bottom":"1rem"}}}} /-->
<!-- /wp:post-template -->
<!-- wp:query-pagination {"layout":{"type":"flex","justifyContent":"center"}} -->
<!-- wp:query-pagination-previous /-->
<!-- wp:query-pagination-numbers /-->
<!-- wp:query-pagination-next /-->
<!-- /wp:query-pagination -->
<!-- wp:query-no-results -->
<!-- wp:pattern {"slug":"woocommerce/no-products-found"} /-->
<!-- /wp:query-no-results -->
</div>
<!-- /wp:query -->
</div>
<!-- /wp:group -->
<!-- wp:template-part {"slug":"footer"} /-->

View File

@@ -0,0 +1,5 @@
<!-- wp:template-part {"slug":"header"} /-->
<!-- wp:group {"layout":{"inherit":true}} -->
<div class="wp-block-group"><!-- wp:woocommerce/legacy-template {"template":"archive-product"} /--></div>
<!-- /wp:group -->
<!-- wp:template-part {"slug":"footer"} /-->