You've already forked wc-bootstrap
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>
78 lines
3.1 KiB
Twig
78 lines
3.1 KiB
Twig
{#
|
|
# Base Template (Bootstrap 5 Override)
|
|
#
|
|
# WooCommerce base layout (renamed from base.html.twig to avoid
|
|
# shadowing the parent theme's full page shell).
|
|
# Provides the basic structure and block definitions.
|
|
#
|
|
# When _theme_wrapped is true, the parent theme already provides the page
|
|
# shell (header, footer, container). The outer wrapper, breadcrumbs,
|
|
# sidebar, and head blocks are skipped to avoid double-wrapping.
|
|
# The scripts block is always rendered because child templates use it for
|
|
# page-specific inline JavaScript (e.g. AJAX form handlers).
|
|
#
|
|
# @package WcBootstrap
|
|
# @since 0.1.0
|
|
#}
|
|
|
|
{% set _wrapped = _theme_wrapped is defined and _theme_wrapped %}
|
|
|
|
{% if not _wrapped %}{% block head %}{% endblock %}{% endif %}
|
|
|
|
{% if not _wrapped %}<div class="container my-4">{% endif %}
|
|
|
|
{% block notifications %}
|
|
{% if notifications is defined and notifications|length > 0 %}
|
|
{% for notification in notifications %}
|
|
<div class="alert alert-{{ notification.type|default('info')|esc_attr }} alert-dismissible fade show" role="alert">
|
|
{{ notification.message|wp_kses_post }}
|
|
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="{{ __('Close') }}"></button>
|
|
</div>
|
|
{% endfor %}
|
|
{% endif %}
|
|
|
|
{% if flash_messages is defined %}
|
|
{% for type, messages in flash_messages %}
|
|
{% for message in messages %}
|
|
<div class="alert alert-{{ type|esc_attr }} alert-dismissible fade show" role="alert">
|
|
{{ message|wp_kses_post }}
|
|
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="{{ __('Close') }}"></button>
|
|
</div>
|
|
{% endfor %}
|
|
{% endfor %}
|
|
{% endif %}
|
|
{% endblock %}
|
|
|
|
{% if not _wrapped %}<main>{% endif %}
|
|
|
|
{% block breadcrumbs %}
|
|
{% if not _wrapped and breadcrumbs is defined and breadcrumbs|length > 0 %}
|
|
<nav aria-label="{{ __('Breadcrumb') }}">
|
|
<ol class="breadcrumb">
|
|
<li class="breadcrumb-item">
|
|
<a href="{{ home_url() }}">{{ __('Home') }}</a>
|
|
</li>
|
|
{% for crumb in breadcrumbs %}
|
|
{% if crumb.url %}
|
|
<li class="breadcrumb-item">
|
|
<a href="{{ crumb.url|esc_url }}">{{ crumb.label|esc_html }}</a>
|
|
</li>
|
|
{% else %}
|
|
<li class="breadcrumb-item active" aria-current="page">{{ crumb.label|esc_html }}</li>
|
|
{% endif %}
|
|
{% endfor %}
|
|
</ol>
|
|
</nav>
|
|
{% endif %}
|
|
{% endblock %}
|
|
|
|
{% block content %}{% endblock %}
|
|
|
|
{% if not _wrapped %}</main>{% endif %}
|
|
|
|
{% block sidebar %}{% endblock %}
|
|
|
|
{% if not _wrapped %}</div>{% endif %}
|
|
|
|
{% block scripts %}{% endblock %}
|