WooCommerce архив для продажи Продукты не имеют всех возможностей - PullRequest
0 голосов
/ 21 ноября 2018

Я создаю сайт электронной коммерции на основе 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], и по крайней мере мои фильтры снова заработали.Моя нумерация страниц все еще не появляется ...

1 Ответ

0 голосов
/ 21 ноября 2018

Я собираюсь сделать попытку помочь.Пожалуйста, прости меня, если я с базы.Гутенбургские блоки мне все еще трудно понять.

Ваш sale.twig динамически извлекает данные и использует JS для заполнения контента через включение php, но на самом деле он никогда не записывает содержимое через хуки WP в базу данных, из которой страница / запись / продажа извлекает данные,Это преднамеренно?

Также обратите внимание, что веточка js, которая должна обеспечить вам разбиение на dom, не соответствует dom, созданному через link_template.php, выглядит как

Я думаю, выпридется позвонить по этому

<?php previous_post_link( '<strong>%link</strong>' ); ?> 

link_template

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...