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>
- WooCommerceExtension: ALLOWED_FUNCTIONS whitelist for fn() Twig function
- Notice templates: data attributes use wp_kses_post instead of raw
- Search form: esc_attr on search query value attribute
- Per-request ContextBuilder caching via static variable
- Shared wc_bootstrap_render_in_page_shell() helper (DRY)
- Removed unused WC_BOOTSTRAP_VERSION and WC_BOOTSTRAP_URL constants
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Override WooCommerce's .input-text background (specificity 0,3,1) with
[data-bs-theme="dark"] selector for text inputs and textareas
- Remove table-light from <thead> in cart, review-order, orders, and
payment-methods templates (forces white in dark mode)
- Add .alert.woocommerce-* compound selectors for notice overrides
outside .woocommerce wrapper ancestry
- Suppress focus ring on programmatically focused notices
(woocommerce.js focus_populate_live_region adds tabindex + focus)
- Wrap order-details product table in card matching thank-you page style
- Fix thank-you alert icon/text line wrap with d-flex align-items-center
- Bump version to 0.1.2
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add overflow-hidden to the card <article> so the card's own
border-radius clips the product image at the top corners.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Audit and fix 14 Twig templates for escaping bugs, CSS conflicts,
and missing Bootstrap styling:
- Fix nl2br/esc_html filter order in order details
- Add WC gallery modifier classes for zoom/photoswipe JS init
- Fix HTML entity double-encoding in headings (up-sells, cross-sells, related)
- Remove wrong 'is defined' guards on function calls
- Remove duplicate deprecated hooks in dashboard
- Add |raw to brand description HTML filter chain
- Add role="alert" for accessibility, |esc_attr on notification types
- Style mini-cart remove button as Bootstrap btn
- Make shipping form-check class conditional
- Add shop_table CSS reset and gallery opacity fallback
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
WooCommerce's layout CSS fought Bootstrap's grid in three ways:
1. Float-based two-column layout (width: 48% + float) on div.images
and div.summary squeezed content inside our col-lg-6 columns.
Reset with float: none; width: 100%.
2. Nested content wrapper (.container + #primary + <main>) from
woocommerce_output_content_wrapper doubled up on the parent
theme's existing .container. Remove the hooks entirely.
3. Sale badge (position: absolute; top: -.5em; z-index: 9) escaped
the image column and blocked breadcrumb clicks. Override to
top: 0.5em; z-index: 1 and use gx-* (horizontal-only gutters)
to avoid negative margin-top on the .row.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add two-column responsive grid (image gallery + product summary) for
single product pages, following the same bridge pattern used for
product archives.
Key changes:
- Create content-single-product.php bridge and Twig layout template
- Add single product renderer at template_redirect priority 11
- Disable WooCommerce block compatibility layer that strips classic
hooks when parent theme has theme.json
- Move PHP templates to woocommerce/ subfolder for cleaner structure
- Fix Twig templates to self-compute context data not passed by
wc_get_template() (tabs, short-description, meta, rating)
- Fix Underscore.js triple-brace syntax conflict in variation template
by wrapping in {% verbatim %}
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>
Redesign navigation with endpoint icons, offcanvas-lg responsive
pattern, and sticky sidebar. Replace flat dashboard with card-based
welcome greeting (avatar) and quick-action grid. Wrap all forms
(edit-account, edit-address, lost/reset-password) in card sections
with icon headers. Restructure view-order with summary card and
status badge component. Override WooCommerce's float-based layout
and max-width constraint to let Bootstrap flex grid handle sizing.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The child's templates/base.html.twig was shadowing the parent's
views/base.html.twig (full HTML page shell) because prependPath()
made Twig find the child's minimal wrapper first. Rename to
wc-base.html.twig so the parent's page shell renders correctly.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Intercept WooCommerce's PHP template loading via
woocommerce_before_template_part / woocommerce_after_template_part hooks
to render Bootstrap 5 Twig templates instead. This makes all 99 child
theme templates functional in a standard WooCommerce environment.
- Create WooCommerceExtension (Twig AbstractExtension) with ~50 functions
and 7 filters covering WC API, WordPress hooks, escaping, and forms
- Rewrite TemplateOverride to use hook-based interception with stack-based
output buffering for nested template support
- Wire bridge initialization at init priority 20 in functions.php
- Fix invalid {% do return() %} in two order templates
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Phase 8 (Emails) skipped: WooCommerce email rendering uses
wc_get_template_html() which bypasses the Twig pipeline entirely.
Email customization deferred to plugins or block email editor.
Phase 9 - Supplementary (7 templates):
- Brand description with thumbnail, taxonomy archive delegate
- Brands A-Z shortcode with alphabetical index navigation
- Single brand thumbnail shortcode
- REST API OAuth login and grant-access forms
- Back-in-stock notification form with email input
Reusable Components (6 templates):
- price: product price display with sale handling
- rating: star rating with Bootstrap Icons (filled/half/empty)
- address-card: billing/shipping address card with edit link
- status-badge: contextual order status badges
- quantity-input: +/- input group widget
- form-field: universal form field renderer (text/select/textarea/checkbox)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Phase 6 - My Account (15 templates):
- Account layout with sidebar navigation (list-group) and content area
- Orders table with status badges, pagination, and responsive design
- View order with order notes as list-group items
- Address cards with edit/add buttons
- Login/Register side-by-side card layout
- Account edit, password change, downloads, payment methods forms
- Lost/reset password forms and confirmation
Phase 7 - Order Details (5 templates):
- Order details table with items, totals, and customer note
- Line item rows with refund quantity display
- Customer billing/shipping address cards
- Order tracking form
- Order again button
All order templates use WC_Order object methods only (HPOS compatible).
Bootstrap 5 components: cards, tables, list-groups, badges, forms, alerts.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>