Вордпресс, почему не выводится пагинация на странице поиска?
На странице поиска Search - есть две ошибки.
Объясняю: всего на сайте три способа поиска.
Первый - форма поиска на главной странице (реализована через ivory search)
Вторая - форма поиска на странице Search.
Третья - древовидная форма поиска по таксономиям.
Запускаю цикл, в аргументах s.
В вордпрессе админке выставил 4 поста на странице.
Сейчас у меня пагинация выводится только когда я ввожу запрос на главной странице и он находит его на странице search.php
Но в других двух случаях - пагинация не выводится.
И ещё, мне нужно чтобы когда с главной при нажатии на ссылку человек переходил страницу поиска (search.php), то тоже выводилась пагинация.
Вот сайт, который я разрабатывал - https://trophy.fishing
И вот страница поиска. На неё также можно перейти нажав на карточку "Fish species"
https://trophy.fishing/search/
И ещё, на всякий случай скажу что у меня страница поиска с Template Name: Search. Мне это нужно было раньше, но сейчас уже нет, так что темлейт нэйм могу убрать.
Дополнительно:
Ответы:
Пагинация на Вашей статической странице /search/ не выводится потому, что функция the_posts_pagination() работает с изначальной выборкой (у статической страницы это всегда только одна запись) и ничего не знает о том, какие WP_Query имеют место в шаблоне. Для пагинации произвольных выборок больше подходит функция paginate_links(), которой можно передать total и current из кастомной выборки.
Правильное использование структуры шаблонов WP не нуждается в получении данных в коде страницы.
Я предлагаю сначала почитать документацию и навсегда (в 99% ситуаций) избавиться от WP_Query в шаблонах.
Сейчас получается так что поиск и так обрабатывает запрос, а после этого ты делаешь тоже самое но только у тебя это не работает как надо.
убери шаблон. Что значит три способа поиска? Три формы поиска? Если 3 формы, то из 3х сделай одну. Что даёт использование ivory search? Если в ivory нужды нет, старайся использовать форму поиска wrdpress.
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос


Пагинация на странице поиска в WordPress чаще всего не выводится или даёт неправильные ссылки из-за двух причин: используется отдельный
WP_Queryбез передачиpaged, либо пагинация строится по глобальному запросу, а записи выводятся из другого запроса.Для обычной страницы поиска лучше использовать основной query WordPress. В
search.phpдостаточно:if (have_posts()) { while (have_posts()) { the_post(); get_template_part('template-parts/content', 'search'); } the_posts_pagination(); }
Если Вы делаете свой запрос, обязательно передайте текущую страницу:
$paged = max(1, get_query_var('paged'), get_query_var('page')); $query = new WP_Query([ 's' => get_search_query(), 'post_type' => 'post', 'posts_per_page' => 10, 'paged' => $paged, ]);
И пагинацию строите по этому объекту:
echo paginate_links([ 'total' => $query->max_num_pages, 'current' => $paged, ]);
После кастомного цикла не забудьте:
wp_reset_postdata();
Если поиск расположен на обычной странице, а не на
search.php, URL пагинации может отличаться. Тогда нужно явно указатьbaseи сохранять параметрs. Но лучше не превращать обычную страницу в самодельный поиск, если можно использовать стандартный search endpoint.Для древовидной формы по таксономиям проблема похожая: выбранные параметры должны сохраняться в ссылках пагинации. Используйте
add_args:echo paginate_links([ 'total' => $query->max_num_pages, 'current' => $paged, 'add_args' => array_filter([ 's' => get_search_query(), 'category' => $_GET['category'] ?? null, ]), ]);
И не используйте
query_posts(). Он ломает глобальный запрос и часто именно из-за него пагинация ведёт себя непредсказуемо.Итог: один запрос — одна пагинация. Либо используйте основной поиск WordPress, либо аккуратно передавайте
paged,total,currentи сохраняйте GET-параметры фильтра.