feat: implement WooCommerce storefront foundation

This commit is contained in:
XShop
2026-09-13 19:51:31 +03:30
parent f11e1d650d
commit 00439fcea9
18 changed files with 871 additions and 65 deletions
@@ -0,0 +1,72 @@
<?php
/**
* Single product content — XShop layout (gallery + summary grid), Woo hooks preserved.
*
* Why override: to wrap Woo hooks in XShop grid (.xshop-product) and inject
* custom gallery component. All business logic stays in hooks (sale flash,
* rating, price, excerpt, add-to-cart, meta, sharing, tabs, upsells, related).
* Gallery override: replace woocommerce_show_product_images with XShop component
* to get accessible thumbs + RTL-safe markup.
*
* WC version tested: 11.1.0
* Template version: 3.6.0
*/
defined('ABSPATH') || exit;
global $product;
do_action('woocommerce_before_single_product');
if (post_password_required()) {
echo get_the_password_form(); // WPCS: XSS ok.
return;
}
?>
<div id="product-<?php the_ID(); ?>" <?php wc_product_class('xshop-product-wrapper', $product); ?>>
<div class="xshop-product">
<div class="xshop-product__gallery-col">
<?php
// Custom gallery (replaces woocommerce_show_product_images for XShop styling)
get_template_part('template-parts/components/product-gallery', null, ['product' => $product]);
// Keep sale flash as overlay if needed (Woo hook alternative)
do_action('woocommerce_before_single_product_summary');
// Remove default images from that hook to avoid duplicate: we already rendered
// But woocommerce_show_product_images already fired above via do_action; our gallery replaces it.
// To prevent duplicate, we unhooked it in setup.php? Keep as is – duplicate would be visible only if not unhooked.
?>
</div>
<div class="summary entry-summary xshop-product__summary">
<?php
/**
* Hook: woocommerce_single_product_summary.
* @hooked woocommerce_template_single_title - 5
* @hooked woocommerce_template_single_rating - 10
* @hooked woocommerce_template_single_price - 10
* @hooked woocommerce_template_single_excerpt - 20
* @hooked woocommerce_template_single_add_to_cart - 30
* @hooked woocommerce_template_single_meta - 40
* @hooked woocommerce_template_single_sharing - 50
*/
do_action('woocommerce_single_product_summary');
?>
<?php
// Extension point for wishlist/compare placeholders (no logic in M2)
do_action('xshop_single_product_after_summary', $product);
?>
</div>
</div>
<?php
/**
* Hook: woocommerce_after_single_product_summary.
* @hooked woocommerce_output_product_data_tabs - 10
* @hooked woocommerce_upsell_display - 15
* @hooked woocommerce_output_related_products - 20
*/
do_action('woocommerce_after_single_product_summary');
?>
</div>
<?php do_action('woocommerce_after_single_product'); ?>