Как пофиксить пагинацию в таксономии?
На других страницах она работает, а в таксомии при переходе с первой страницы на 2,3 итд выдает 404.
Код пагинации для страницы таксономии
$al_cat_slug = get_queried_object()->slug; $al_cat_name = get_queried_object()->name;?> <div class="book-items row"> <?php global $post; $paged = (get_query_var('paged')) ? get_query_var('paged') : 1; $args = array ( 'post_type' => 'book', 'sortby'=>'name', 'caller_get_posts'=>1, 'posts_per_page'=> 2, 'paged'=>$paged, 'tax_query' => array( array( 'taxonomy' => 'book-categories', 'field' => 'slug', 'terms' => $al_cat_slug ) ) ); query_posts( $args ); if ( have_posts() ): while ( have_posts() ) : the_post();?> <div class="book-item col-12"> <a href="<?php the_permalink()?>"> <h2 class="book-title"> <?php if( get_field('catalog_order') ): ?> <span class="catalog-order"><?php the_field('catalog_order')?></span> <?php endif; ?> <?php the_title(); ?> <?php if( get_field('book_author') ): ?> <span class="book-author"> — <?php the_field('book_author')?></span> <?php endif; ?> </h2> </a> </div> <?php endwhile; echo the_posts_pagination(); endif; wp_reset_query();?> </div> |
$al_cat_slug = get_queried_object()->slug; $al_cat_name = get_queried_object()->name;?> <div class="book-items row"> <?php global $post; $paged = (get_query_var('paged')) ? get_query_var('paged') : 1; $args = array ( 'post_type' => 'book', 'sortby'=>'name', 'caller_get_posts'=>1, 'posts_per_page'=> 2, 'paged'=>$paged, 'tax_query' => array( array( 'taxonomy' => 'book-categories', 'field' => 'slug', 'terms' => $al_cat_slug ) ) ); query_posts( $args ); if ( have_posts() ): while ( have_posts() ) : the_post();?> <div class="book-item col-12"> <a href="<?php the_permalink()?>"> <h2 class="book-title"> <?php if( get_field('catalog_order') ): ?> <span class="catalog-order"><?php the_field('catalog_order')?></span> <?php endif; ?> <?php the_title(); ?> <?php if( get_field('book_author') ): ?> <span class="book-author"> — <?php the_field('book_author')?></span> <?php endif; ?> </h2> </a> </div> <?php endwhile; echo the_posts_pagination(); endif; wp_reset_query();?> </div>
Гуглил проблему, вот это добавить в functions.php не помогло.
function taxonomy_rewrite_fix($wp_rewrite) { $r = array(); foreach($wp_rewrite->rules as $k=>$v){ $r[$k] = str_replace('catalog=$matches[1]&paged=','catalog=$matches[1]&page=',$v); } $wp_rewrite->rules = $r; } add_filter('generate_rewrite_rules', 'taxonomy_rewrite_fix'); |
function taxonomy_rewrite_fix($wp_rewrite) { $r = array(); foreach($wp_rewrite->rules as $k=>$v){ $r[$k] = str_replace('catalog=$matches[1]&paged=','catalog=$matches[1]&page=',$v); } $wp_rewrite->rules = $r; } add_filter('generate_rewrite_rules', 'taxonomy_rewrite_fix');
Есть рабочее решене?
Дополнительно:
Извиняюсь за банальный вариант, но пробовали сменить структуру ссылок? У WP же частая беда с этим.
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Пагинация в таксономии обычно ломается из-за одного из трёх факторов: неверный параметр
paged, конфликт rewrite slug или кастомныйWP_Query, который не передаёт общее количество страниц вpaginate_links(). Исправлять нужно не шаблон ссылок вслепую, а сам запрос и rewrite.В шаблоне таксономии для кастомного запроса используйте:
$paged = max(1, get_query_var('paged'), get_query_var('page')); $query = new WP_Query([ 'post_type' => 'product', 'posts_per_page' => 12, 'paged' => $paged, 'tax_query' => [ [ 'taxonomy' => 'brand', 'field' => 'slug', 'terms' => get_queried_object()->slug, ], ], ]); echo paginate_links([ 'total' => $query->max_num_pages, 'current' => $paged, ]);
Если используется главный запрос таксономии, лучше не создавать новый
WP_Query, а менять его черезpre_get_posts:add_action('pre_get_posts', function (WP_Query $query) { if (is_admin() || ! $query->is_main_query()) { return; } if (is_tax('brand')) { $query->set('posts_per_page', 12); } });
Проверьте также, не совпадает ли slug таксономии со slug страницы или post type. После изменения rewrite-настроек один раз пересохраните постоянные ссылки. Если на странице
/taxonomy/page/2/404, проблема чаще в rewrite. Если открывается первая страница вместо второй — обычно неверныйpagedили кастомный запрос.Перед внедрением на рабочем сайте проверьте решение на копии или хотя бы сделайте резервную копию изменяемого файла. После правки включите отображение ошибок, откройте проблемную страницу в обычном и приватном окне, проверьте консоль браузера и логи PHP. Если задача связана с WordPress, WooCommerce или ACF, дополнительно проверьте поведение после очистки кэша и после выхода из админки: часть ошибок видна только для незалогиненного пользователя.
Если код работает только в одном шаблоне, лучше не оставлять его разрозненно в нескольких файлах. Вынесите повторяемую логику в функцию, небольшой плагин или template part, а в шаблоне оставьте только вызов. Так проще поддерживать решение после обновления темы, плагинов и PHP.