• Здравствуйте.
    На сайте используется Timber.
    Нужно было сделать ajax фильтрацию по категориям постов. С этим проблем не было до момента работы пагинации с отфильтрованными постами.
    Вот что в методе где происходит обработка фильтрации:

    function handler_insights_category()
    {
        global $paged;
    
        $context['exist_filter'] = true;
    
        $category = $_POST['category_slug'];
    
        $context = Timber::context();
    
        if (!isset($paged) || !$paged){
            $paged = 1;
        }
    
        $insightsQuery = array(
            'posts_per_page' => get_option('posts_per_page'),
            'paged' => $paged,
            'post_type' => 'post',
            'orderby' => 'menu_order',
            'order' => 'ASC',
            'post_status' => 'publish',
        );
    
        if ($category !== 'all') {
            $taxQuery = array('tax_query' => array(
                array(
                    'taxonomy' => 'category',
                    'field' => 'slug',
                    'terms' => $category,
                )
            ));
    
            $insightsQuery = array_merge($insightsQuery, $taxQuery);
        }
    
        $context['insights'] = new Timber\PostQuery($insightsQuery);
    
        $base = '/insights/' . $category;
        $orig_req_uri = $_SERVER['REQUEST_URI'];
        $_SERVER['REQUEST_URI'] = $base;
        get_pagenum_link( $paged - 1 );
    
        Timber::render('views/partial/filter-insights.twig', $context);
    
        $_SERVER['REQUEST_URI'] = $orig_req_uri;
    
        die();
    }

    Во вьюхе filter-insights.twig происходит вывод постов и пагинации

    {% if insights.pagination.pages|length > 0 %}
    
        <div class="c-pagination">
    
            <ul class="c-pagination__list">
    
                {% if insights.pagination.prev %}
                    <li class="c-pagination__item c-pagination__item--prev">
                        <a href="{{ insights.pagination.prev.link }}">
                            <svg viewbox="0 0 24 24">
                                <use xlink:href="#icon-arrow-left-black"></use>
                            </svg>
                        </a>
                    </li>
                {% else %}
                    <li class="c-pagination__item c-pagination__item--prev c-pagination__item--disabled">
                        <svg viewbox="0 0 24 24">
                            <use xlink:href="#icon-arrow-left-black"></use>
                        </svg>
                    </li>
                {% endif %}
                {% for page in insights.pagination.pages %}
                    <li class="c-pagination__item">
                    {% if page.link %}
                        <li class="c-pagination__item">
                            <a href="{{ page.link }}" class="{{ page.class }}">{{ page.title }}</a>
                        </li>
                    {% else %}
                        <li class="c-pagination__item c-pagination__item--current">
                            <span class="{{ page.class }}">{{ page.title }}</span>
                        </li>
                    {% endif %}
                    </li>
                {% endfor %}
                {% if insights.pagination.next %}
                    <li class="c-pagination__item c-pagination__item--next">
                        <a href="{{ pagination.next.link }}">
                            <svg viewbox="0 0 24 24">
                                <use xlink:href="#icon-arrow-left-black"></use>
                            </svg>
                        </a>
                    </li>
                {% else %}
                    <li class="c-pagination__item c-pagination__item--next c-pagination__item--disabled">
                        <svg viewbox="0 0 24 24">
                            <use xlink:href="#icon-arrow-left-black"></use>
                        </svg>
                    </li>
                {% endif %}
            </ul>
    
        </div>
    {% endif %}

    Пагинация формируется как надо. Если всех постов 3 страницы пагинации то допустим у самой большой категории 2 страницы пагинации.
    Проблема с переходом по пагинации. Изначально ссылка была такого вида http://localhost/wp-admin/admin-ajax.php/page/2

    Сделать урл вида http://localhost/insights/for-individuals/page/2 удалось после ответа со stackoverflow вот таким образом

        $base = '/insights/' . $category;
        $orig_req_uri = $_SERVER['REQUEST_URI'];
        $_SERVER['REQUEST_URI'] = $base;
        get_pagenum_link( $paged - 1 );

    Но теперь при переходе по пагинации получаю 404. Пытался задать правило записи через add_rewrite_rule банальным образом хотя бы так

    add_action('init', 'my_add_custom_rewrite_rules');
    function my_add_custom_rewrite_rules()
    {
        $page_num = 2;
        $page_slug = 'insights/for-individuals';
        $category = 'for-individuals';
    
        add_rewrite_rule(
            'insights/([^/]+)/' . $category . '/([^/]+)/page/([0-9]{1,})/?',
            'index.php?pagename=' . $page_slug . '/page/' . $page_num, 'top'
        );
    }

    но нечего не вышло.
    Подскажите пожалуйста как сделать чтобы пагинация для фильтрованных постов отображалась по урлу http://localhost/insights/for-individuals/page/2
    Заранее спасибо!

  • Тема «Пагинация постов по категории через Ajax» закрыта для новых ответов.