• WooCommerce Bootstrap 0.1.10
    All checks were successful
    Create Release Package / PHP Lint (push) Successful in 51s
    Create Release Package / PHPUnit Tests (push) Successful in 57s
    Create Release Package / Build Release (push) Successful in 1m8s
    Pre-Release

    magdev released this 2026-03-29 14:48:50 +00:00 | 0 commits to main since this release

    Fixed

    • Add-to-cart button alignment in product cards (content-product.html.twig): Added mt-auto to card-footer so the button is always pinned to the bottom of the card, even when the product has no price (e.g., composable products)
    Downloads
  • v0.1.9 f64e9cd5a2

    WooCommerce Bootstrap 0.1.9
    All checks were successful
    Create Release Package / PHP Lint (push) Successful in 46s
    Create Release Package / PHPUnit Tests (push) Successful in 51s
    Create Release Package / Build Release (push) Successful in 1m3s
    Pre-Release

    magdev released this 2026-03-29 14:03:09 +00:00 | 1 commits to main since this release

    Changed

    • Category tree full-width items (category-tree-node.html.twig): Made <a> elements direct children of the list-group so they span the full parent/offcanvas width; moved chevron toggle inside the link as a <span> with click interception
    • Category tree nav wrapper (category-tree.html.twig): Added w-100 to nav and list-group containers
    Downloads
  • v0.1.8 1e7f82615b

    WooCommerce Bootstrap 0.1.8
    All checks were successful
    Create Release Package / PHP Lint (push) Successful in 48s
    Create Release Package / PHPUnit Tests (push) Successful in 56s
    Create Release Package / Build Release (push) Successful in 1m4s
    Pre-Release

    magdev released this 2026-03-29 13:42:50 +00:00 | 2 commits to main since this release

    Changed

    • Category tree restyled (category-tree.html.twig, category-tree-node.html.twig): Switched from custom link classes to Bootstrap's native list-group-item list-group-item-action pattern with nested collapse divs for a more idiomatic Bootstrap look
    • Subtler active state (wc-bootstrap.css): Replaced bold primary-colored background with light background (var(--bs-tertiary-bg)), left accent border (3px solid var(--bs-primary)), and semibold text for a less prominent highlight
    Downloads
  • v0.1.7 9860a184cd

    WooCommerce Bootstrap 0.1.7
    All checks were successful
    Create Release Package / PHP Lint (push) Successful in 1m4s
    Create Release Package / PHPUnit Tests (push) Successful in 50s
    Create Release Package / Build Release (push) Successful in 58s
    Pre-Release

    magdev released this 2026-03-29 13:20:02 +00:00 | 3 commits to main since this release

    Added

    • Product category tree sidebar on archive/shop and single product pages: hierarchical navigation with collapsible sub-levels up to 3 levels deep, using Bootstrap 5 list-group and collapse components
    • wc_bootstrap_get_category_tree() (functions.php): Builds nested category array with is_active/is_ancestor flags for current page context, parent-indexed lookup for O(n) tree construction
    • Category tree Twig templates (global/category-tree.html.twig, global/category-tree-node.html.twig): Recursive rendering with "All products" link, product count badges, chevron toggle buttons, and aria-current="page" accessibility
    • Single product sidebar (woocommerce/single-product.php): Added responsive sidebar layout (col-lg-3 + col-lg-9) with offcanvas on mobile, matching the archive page pattern
    • Category tree CSS (wc-bootstrap.css): Hover states, active highlighting (primary color), chevron rotation animation, nested indentation, dark mode compatible via Bootstrap CSS variables

    Changed

    • Archive sidebar always visible (woocommerce/archive-product.php): Sidebar now renders when categories exist, not only when widgets are configured. Category tree renders above any widgets.
    Downloads
  • v0.1.6 4031a1c8aa

    WooCommerce Bootstrap 0.1.6
    All checks were successful
    Create Release Package / PHP Lint (push) Successful in 1m2s
    Create Release Package / PHPUnit Tests (push) Successful in 46s
    Create Release Package / Build Release (push) Successful in 50s
    Pre-Release

    magdev released this 2026-03-01 02:48:39 +00:00 | 5 commits to main since this release

    Added

    • PHPUnit test suite with Brain\Monkey for WordPress function mocking (27 tests, 54 assertions)
    • TemplateOverrideTest: Tests for hook registration, Twig template resolution, output buffer stack (including nesting), context passing, global $product injection, and exception fallback
    • WooCommerceExtensionTest: Tests for function/filter registration, callFunction() whitelist enforcement, doAction/applyFilters/callUserFunc output capture, setupProductData, and all output-capture wrappers
    • CI/CD test job: PHPUnit runs between lint and build-release in Gitea pipeline; test artifacts excluded from release packages
    • Class stubs for WPBootstrap\Twig\TwigService and WC_Product enabling isolated unit testing without WordPress/WooCommerce
    Downloads
  • v0.1.5 784b400c46

    WooCommerce Bootstrap 0.1.5
    All checks were successful
    Create Release Package / PHP Lint (push) Successful in 44s
    Create Release Package / Build Release (push) Successful in 52s
    Pre-Release

    magdev released this 2026-03-01 02:33:52 +00:00 | 6 commits to main since this release

    Fixed

    • Empty page title on catalog pages (header.html.twig): Replaced page_title context variable (never passed by WC) with direct fn('woocommerce_page_title', false) call
    • Missing breadcrumbs on catalog pages (archive-product.php): Added woocommerce_breadcrumb() call before shop loop header
    • Missing product categories on catalog pages (content-product-cat.html.twig): Renamed template from hyphen (content-product-cat) to underscore (content-product_cat) to match WC's wc_get_template() filename convention
    • Product grid 4 columns instead of 3 (functions.php, loop-start.html.twig): Changed default columns from 4 to 3 for better card proportions with sidebar
    • Double chevron on sort dropdown (wc-bootstrap.css): Removed conflicting appearance: auto rule; set appearance: none to let Bootstrap's form-select class handle the dropdown arrow exclusively
    • Variable product add-to-cart button stays disabled (variable.html.twig, variation-add-to-cart-button.html.twig): Added missing data-product_id and data-product_variations attributes to form; replaced HTML disabled attribute on button with CSS classes disabled wc-variation-selection-needed (WC JS only toggles CSS classes, never removes the HTML attribute)
    • Variable product select white background in dark mode (wc-bootstrap.css): Increased dark mode override specificity to (0,5,1) to beat WC's .woocommerce div.product form.cart .variations select at (0,4,3) which uses background shorthand; also overrides background-image for Bootstrap's dark-mode-aware chevron SVG
    • Product gallery missing main image in thumbnail strip (product-image.html.twig): Prepend main image ID to gallery IDs using [post_thumbnail_id]|merge(gallery_image_ids) with active state on first thumbnail; added {% if thumb_url %} guard to skip invalid attachment IDs
    • Related/upsells products show same product repeated (related.html.twig, up-sells.html.twig): Added wc_setup_product_data() call before each product render and wp_reset_postdata() after loop to set global $product correctly for WC hooks
    • Grouped product add-to-cart button/pricing broken (grouped.html.twig): Rewrote template to compute quantites_required and show_add_to_cart_button in loop (matching WC PHP logic); moved hidden add-to-cart input outside conditional; added has_options() and is_sold_individually() checks
    • Downloads page empty (downloads.html.twig): Replaced fragile fn('WC').customer.get_downloadable_products() chain with direct fn('wc_get_customer_available_downloads', get_current_user_id()) call

    Added

    • Product gallery JS (product-gallery.js): Vanilla JS click handler for thumbnail-to-main-image swap with active state highlighting and gallery fade-in
    • wc_setup_product_data() Twig function (WooCommerceExtension.php): Sets $GLOBALS['product'] and calls setup_postdata() for correct product context in Twig loops
    • wp_reset_postdata Twig function (WooCommerceExtension.php): Restores global post state after product loops
    • sanitize_title Twig filter (WooCommerceExtension.php): Matches WC PHP's lowercase attribute name handling for variation form data attributes
    • Product thumbnails suppressor (product-thumbnails.html.twig): Empty template override to prevent WC's default full-size gallery images rendering below custom thumbnail row

    Changed

    • Whitelisted functions (WooCommerceExtension.php): Added woocommerce_page_title and wc_get_customer_available_downloads to ALLOWED_FUNCTIONS
    • Removed obsolete files: Deleted PLAN.md and SETUP.md (superseded by CLAUDE.md)
    Downloads
  • v0.1.4 98359d4cfb

    WooCommerce Bootstrap 0.1.4
    All checks were successful
    Create Release Package / PHP Lint (push) Successful in 1m41s
    Create Release Package / Build Release (push) Successful in 1m47s
    Pre-Release

    magdev released this 2026-03-01 00:02:53 +00:00 | 7 commits to main since this release

    Security

    • fn() function whitelist (WooCommerceExtension): The callFunction() method (exposed as fn() in Twig templates) now restricts callable functions to an explicit ALLOWED_FUNCTIONS whitelist. Previously any PHP function could be called, risking arbitrary code execution if template context were compromised. Only the 6 functions actually used in templates are permitted.
    • Notice data attribute escaping: Changed {{ notice.data|raw }} to {{ notice.data|wp_kses_post }} in success, error, and notice Twig templates. Defense-in-depth against potential XSS via data attributes.
    • Search query escaping (product-searchform.html.twig): Added |esc_attr filter to get_search_query() output in the search input value attribute.

    Performance

    • Per-request ContextBuilder caching: New wc_bootstrap_get_theme_context() function with static variable caching eliminates redundant ContextBuilder::build() calls (10-20 DB queries each) when multiple WooCommerce render functions fire in the same request.

    Changed

    • Shared page shell helper: New wc_bootstrap_render_in_page_shell() function extracts the duplicated context-injection-and-render pattern from wc_bootstrap_render_page(), wc_bootstrap_render_product_archive(), and wc_bootstrap_render_single_product().
    • Removed unused constants: Removed WC_BOOTSTRAP_VERSION and WC_BOOTSTRAP_URL constants that were defined but never referenced.
    Downloads
  • v0.1.3 bf24b121f5

    WooCommerce Bootstrap 0.1.3
    All checks were successful
    Create Release Package / PHP Lint (push) Successful in 59s
    Create Release Package / Build Release (push) Successful in 1m13s
    Pre-Release

    magdev released this 2026-02-28 21:35:45 +00:00 | 9 commits to main since this release

    Added

    • Theme screenshot showing dark mode product archive with Bootstrap 5 card grid
    Downloads
  • v0.1.2 cfe089d1fe

    WooCommerce Bootstrap 0.1.2
    All checks were successful
    Create Release Package / PHP Lint (push) Successful in 51s
    Create Release Package / Build Release (push) Successful in 1m9s
    Pre-Release

    magdev released this 2026-02-28 21:13:54 +00:00 | 10 commits to main since this release

    Fixed

    • Dark mode: text inputs and textareas showing white background due to WooCommerce's .woocommerce form .form-row .input-text (specificity 0,3,1) overriding theme's checkout form rules with var(--wc-form-color-background, #fff) fallback
    • Dark mode: table-light class on <thead> forcing white table headers in cart, checkout review, orders, and payment methods pages
    • Dark mode: WooCommerce notice focus ring appearing white when focus_populate_live_region() JS programmatically focuses alerts for screen reader accessibility
    • WooCommerce notice overrides not matching alerts rendered by Twig templates (added .alert.woocommerce-* compound selectors alongside .woocommerce .woocommerce-* descendant selectors)
    • Order details table on thank-you page not wrapped in a card like other sections
    • Thank-you page success message line-wrapping after icon due to block-level <p> inside inline alert context
    Downloads
  • v0.1.1 cb2d064441

    WooCommerce Bootstrap 0.1.1
    All checks were successful
    Create Release Package / PHP Lint (push) Successful in 59s
    Create Release Package / Build Release (push) Successful in 1m11s
    Pre-Release

    magdev released this 2026-02-28 18:32:44 +00:00 | 11 commits to main since this release

    Fixed

    • Dark mode: native <select> elements showing white background due to WooCommerce's --wc-form-color-background falling back to #fff
    • Dark mode: SelectWoo/Select2 dropdowns (country/state pickers) rendering with hardcoded #fff backgrounds, text colors, and borders
    • Dark mode: checkout form focus ring color for inputs, textareas, and selects
    • WooCommerce notice borders not matching Bootstrap alert styles due to insufficient CSS specificity (bumped to .woocommerce .woocommerce-* at 0,2,0)
    • WooCommerce notice border-top: 3px solid and background-color: #f6f5f8 overriding Bootstrap alert colors
    • Double icons on WooCommerce notices (WooCommerce icon font ::before conflicting with Bootstrap Icons)
    • Product card images overlapping top rounded corners on catalog page (added overflow-hidden to card)
    Downloads