Catalog: page title via woocommerce_page_title(), breadcrumbs, category
template rename (underscore), 3-column grid, single chevron on sort.
Single product: variable form data attributes + disabled CSS class fix
(WC JS only toggles CSS classes, not HTML disabled attribute), dark mode
select specificity (0,5,1) to beat WC's (0,4,3) background shorthand,
gallery main image in thumbnail strip with empty URL guard, related/
upsells setup_postdata for correct global $product, grouped product
loop logic rewrite.
Account: downloads via wc_get_customer_available_downloads().
New: product-gallery.js, sanitize_title filter, wc_setup_product_data()
and wp_reset_postdata() Twig functions, product-thumbnails.html.twig
suppressor. Removed obsolete PLAN.md and SETUP.md.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replace WooCommerce's default shop/category page rendering with a
Bootstrap 5 card grid layout featuring responsive columns, sale badges,
star ratings, and an offcanvas sidebar for filters on mobile.
Key implementation details:
- Bypass parent theme's TemplateController for product archives via
wp_bootstrap_should_render_template filter, render at template_redirect
priority 11 using the same page shell injection pattern as plugin pages
- Add archive-product.php (Bootstrap layout with optional sidebar) and
content-product.php (PHP bridge for wc_get_template_part interception)
- Inject global $product into Twig context in TemplateOverride to fix
empty price/add-to-cart/rating/sale-flash in loop sub-templates — Twig
has isolated variable scopes and cannot access PHP globals directly
- Fix pagination URLs: use get_pagenum_link() instead of ?page= query
param (WordPress uses 'paged' for archive pagination, not 'page')
- Fix double-escaped – in result count by adding |raw filter
- Reset WooCommerce float-based layout CSS (woocommerce-layout.css) for
shop pages to prevent conflicts with Bootstrap flex grid
- Register shop-sidebar widget area with Bootstrap-styled markup
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>