You've already forked wc-bootstrap
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>
35 lines
982 B
Twig
35 lines
982 B
Twig
{#
|
|
# Upsell Products (Bootstrap 5 Override)
|
|
#
|
|
# Renders the upsell products section below the single product.
|
|
#
|
|
# Expected context:
|
|
# upsells - Array of WC_Product objects
|
|
# columns - Number of columns for the grid
|
|
# heading - Section heading text (filtered)
|
|
#
|
|
# WooCommerce PHP equivalent: single-product/up-sells.php
|
|
#
|
|
# @package WcBootstrap
|
|
# @since 0.1.0
|
|
#}
|
|
|
|
{% if upsells is defined and upsells|length > 0 %}
|
|
<section class="up-sells upsells products mt-5">
|
|
{% set heading = heading|default(__('You may also like…')) %}
|
|
{% if heading %}
|
|
<h2 class="h4 mb-4">{{ heading|raw }}</h2>
|
|
{% endif %}
|
|
|
|
{{ woocommerce_product_loop_start() }}
|
|
|
|
{% for upsell in upsells %}
|
|
{{ wc_setup_product_data(upsell) }}
|
|
{% include 'content-product.html.twig' %}
|
|
{% endfor %}
|
|
{{ wp_reset_postdata() }}
|
|
|
|
{{ woocommerce_product_loop_end() }}
|
|
</section>
|
|
{% endif %}
|