Пагинация постов по категории через Ajax
-
Здравствуйте.
На сайте используется 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» закрыта для новых ответов.