代码之家  ›  专栏  ›  技术社区  ›  nsilva

WooCommerce输出破坏了我的代码,错误地关闭了标记

  •  1
  • nsilva  · 技术社区  · 7 年前

    我目前正在与WooCommerce一起开发一个网站,并利用Twig模板系统,我正在开发归档模板,并以下面的代码为例:

    {% extends 'page.twig' %}
    
    {% block before_article %}
        <div class="row">
            <div class="col-md-12">
                {% do action('woocommerce_before_main_content') %}
            </div>
        </div>
    {% endblock %}
    
    {% block page_header %}
        <header>
            <h1>{{ title|e2 }}</h1>
            {% block below_h1 %}
                {% do action('woocommerce_archive_description') %}
            {% endblock %}
        </header>
    {% endblock %}
    
    {% block primary_block %}
    
        {% if products|length > 0 %}
    
            <div class="before-products">
                {% do action('woocommerce_before_shop_loop') %}
            </div>
    
            <div class="products">
                <div class="row flex">
                    {% for post in products %}
                        {% include ["partials/tease-product.twig"] %}
                    {% endfor %}
                </div>
            </div>
    
            <div class="after-products">
                {% do action('woocommerce_after_shop_loop') %}
            </div>
    
        {% else %}
    
            <div class="no-products">
                {% do action('woocommerce_no_products_found') %}
            </div>
    
        {% endif %}
    
        {% do action('woocommerce_after_main_content') %}
    
    {% endblock  %}
    

    然而,WooCommerce通过操作挂钩生成的代码破坏了网站,因为它似乎没有正确地关闭标签,尤其是在使用 <main> 标签

    例如,使用此位:

    {% block before_article %}
        <div class="row">
            <div class="col-md-12">
                {% do action('woocommerce_before_main_content') %}
            </div>
        </div>
    {% endblock %}
    

    下面的代码不仅来自本节,还包括 <main> 标签已关闭:

                <div class="row">
        <div class="col-md-12">
            <div id="primary" class="content-area"><main id="main" class="site-main" role="main">        </div>
    </div>
            <div class="row">
                <div class="col-md-12">
                    <article class="general-content">
    
                            <header>
        <h1>Collar</h1>
                                </header>
    
                        <div class="content">
    
    
    
        <div class="no-products">
            <p class="woocommerce-info">No products were found matching your selection.</p>
        </div>
    
    
    </main>
    

    顺便说一句,我已经暂时删除了WooCommerce面包屑,这就是为什么你在上面的代码中看不到它们。

    当我移除第一个动作钩子时,大多数动作钩子似乎都是这么做的,但我仍然发现其他的动作钩子放错了位置 <main> 源代码中的元素。

    1 回复  |  直到 7 年前
        1
  •  1
  •   nsilva    7 年前

    固定的

    我没有意识到这些特定的操作正在输出布局代码,所以将其更改为:

    {% block before_article %}
        {% do action('woocommerce_before_main_content') %}
    {% endblock %}
    

    然后重新定位 {% do action('woocommerce_after_main_content') %} 结果是相对正确的 {% do action('woocommerce_before_main_content') %} 关闭标签。