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,57 @@
<?php
/**
* Mini Cart — foundation (item count, items, subtotal, links, empty).
*
* @package XShop
*/
declare(strict_types=1);
defined('ABSPATH') || exit;
if (!function_exists('WC') || !WC()->cart) {
return;
}
$cart = WC()->cart;
$count = $cart->get_cart_contents_count();
$items = $cart->get_cart();
?>
<div class="xshop-mini-cart" data-xshop-mini-cart>
<div style="display:flex;justify-content:space-between;align-items:center;margin-block-end:var(--xshop-space-3)">
<strong><?php esc_html_e('Cart', 'xshop'); ?></strong>
<span class="xshop-mini-cart__count" aria-label="<?php echo esc_attr(sprintf(esc_html__('%d items', 'xshop'), $count)); ?>"><?php echo esc_html((string) $count); ?></span>
</div>
<?php if (empty($items)): ?>
<p class="xshop-mini-cart__empty"><?php esc_html_e('Your cart is empty.', 'xshop'); ?></p>
<a href="<?php echo esc_url(wc_get_page_permalink('shop')); ?>" class="xshop-btn xshop-btn--primary" style="inline-size:100%"><?php esc_html_e('Browse shop', 'xshop'); ?></a>
<?php else: ?>
<ul class="xshop-mini-cart__list">
<?php foreach ($items as $key => $item):
$product = $item['data'] ?? null;
if (!$product instanceof WC_Product) { continue; }
$name = $product->get_name();
$qty = (int) $item['quantity'];
?>
<li class="xshop-mini-cart__item">
<a href="<?php echo esc_url(get_permalink($product->get_id())); ?>">
<?php echo wp_get_attachment_image($product->get_image_id() ?: 0, 'thumbnail', false, ['alt' => esc_attr($name), 'loading' => 'lazy']); ?>
</a>
<span>
<a href="<?php echo esc_url(get_permalink($product->get_id())); ?>" style="color:var(--xshop-text);font-size:var(--xshop-text-sm)"><?php echo esc_html($name); ?></a>
<span style="display:block;color:var(--xshop-muted);font-size:var(--xshop-text-xs)"><?php echo esc_html(sprintf(esc_html__('%d × %s', 'xshop'), $qty, wp_strip_all_tags($product->get_price_html()))); ?></span>
</span>
<a href="<?php echo esc_url(wc_get_cart_remove_url($key)); ?>" aria-label="<?php esc_attr_e('Remove item', 'xshop'); ?>" style="color:var(--xshop-danger)">×</a>
</li>
<?php endforeach; ?>
</ul>
<div style="border-block-start:1px solid var(--xshop-border);padding-block-start:var(--xshop-space-3);margin-block-start:var(--xshop-space-3);display:flex;justify-content:space-between;font-weight:var(--xshop-weight-bold)">
<span><?php esc_html_e('Subtotal', 'xshop'); ?></span>
<span><?php echo wp_kses_post($cart->get_cart_subtotal()); ?></span>
</div>
<div style="display:flex;gap:var(--xshop-space-2);margin-block-start:var(--xshop-space-3)">
<a href="<?php echo esc_url(wc_get_cart_url()); ?>" class="xshop-btn xshop-btn--secondary" style="flex:1"><?php esc_html_e('View cart', 'xshop'); ?></a>
<a href="<?php echo esc_url(wc_get_checkout_url()); ?>" class="xshop-btn xshop-btn--primary" style="flex:1"><?php esc_html_e('Checkout', 'xshop'); ?></a>
</div>
<?php endif; ?>
</div>