Я создаю сайт электронной коммерции на основе WooCommerce и использую Timber (Twig) для шаблонов.Сейчас я пытаюсь создать страницу (e.g. domain.com/sale)
, в которой перечислены все мои продукты, которые продаются.Поскольку я полностью настроил всю структуру шаблона WooCommerce (потому что я использую шаблоны в Twig), шорткоды не подходят.
Моя проблема:
Мне удалось создать пользовательский запроспоказывать мои продукты в продаже, но, похоже, я что-то упустил, так как в нижней части страницы не отображается ни одна страница, ни мои фильтры AJAX не работают ... и т. д. Возможно, потому что я не вызываю запрос по умолчанию?Даже если я пойду без AJAX-пути: domain.com/sale/page/2
, он вернет мне те же результаты, которые я уже получил на первой странице.буквально ничего не меняя ...
Что я сделал:
Я создал страницу в моем WordPress под названием "Продажа".Пошел к моему index.php
и добавил следующий код:
<!-- index.php -->
$products = Timber::get_posts(
array(
'post_type' => 'product',
'nopaging' => false,
'posts_per_archive_page' => '24',
'meta_query' => array(
'relation' => 'OR',
array( // Simple products type
'key' => '_sale_price',
'value' => 0,
'compare' => '>',
'type' => 'numeric'
),
array( // Variable products type
'key' => '_min_variation_sale_price',
'value' => 0,
'compare' => '>',
'type' => 'numeric'
)
)
)
);
$context['products'] = $products;
Timber::render( '/pages/landingpages/sale.twig', $context );
В моем варианте это полностью работает нормально.И, конечно же, это окружено правильными предложениями if для вызова при запросе domain.com/sale
.Теперь я перешел к моему sale.twig
файлу и добавил следующий код:
sale.twig
$context = Timber::get_context();
{% block content %}
<div id="product_list" class="product_listing grid">
{{ fn('woocommerce_breadcrumb', breadcrumb_settings) }}
<h1>Sale</h1>
<div id="product_list" class="product_listing grid">
{# Filters #}
<div class="product_filter">
{{ fn('do_shortcode', '[br_filters_group group_id=7861]') }}
</div>
{# Order by #}
<div class="product_sorting">
<label for="orderby">Order by:</label>
{{ fn('woocommerce_catalog_ordering') }}
</div>
{# Products #}
<div class="product_listing-content">
<ul class="product_results products">
{% for product in products %}
{% include ('partials/loop-product.twig') %}
{% endfor %}
</ul>
<div class="products-footer">
{% include 'partials/pagination.twig' %}
</div>
</div>
</div>
</div>
{% endblock content %}
На данный момент я должен сказать,что я использую BeRocket AJAX Filters для своих фильтров.Включенные файлы loop-product.twig
и pagination.twig
выглядят так:
loop-product.twig // удалили несколько строк для простоты
<li id="{{ 'product-' ~ product._sku }}" class="product-item {{ product._stock_status }}">
{{ product.name }}
</li>
pagination.twig
<ul class="pagination clearfix">
{% if posts.pagination.prev %}
<li class="prev-item">
<a href="{{posts.pagination.prev.link}}" class="prev {{posts.pagination.prev.link|length ? '' : 'invisible'}}">
<span class="sr-only">Prev</span>
</a>
</li>
{% endif %}
{% for page in posts.pagination.pages %}
<li class="page">
{% if page.link %}
<a href="{{page.link}}" class="{{page.class}}">{{page.title}}</a>
{% else %}
<span class="{{page.class}}">{{page.title}}</span>
{% endif %}
</li>
{% endfor %}
{% if posts.pagination.next %}
<li class="next-item">
<a href="{{posts.pagination.next.link}}" class="next {{posts.pagination.next.link|length ? '' : 'invisible'}}">
<span class="sr-only">Next</span>
</a>
</li>
{% endif %}
</ul>
Опять же, чтобы не ошибиться: я получаю все мои продукты в правильном порядке.Моя проблема в том, что он не ведет себя как страница архива.Нумерация страниц, фильтры и т. Д.
Может быть, к этой теме совершенно другой подход, но, похоже, он единственный.Я нашел в Интернете множество фрагментов кода с похожими проблемами, но ни один из них не подходит для меня ...
Любая помощь приветствуется!
Редактировать:
Только для тестирования я попытался добавить общий шорткод WooCommerce [sale_products]
, и по крайней мере мои фильтры снова заработали.Моя нумерация страниц все еще не появляется ...