Wp pagenavi не работает

Не за#буйте с вашей пагинацией.

Решаем один из самых популярных вопросов у разработчиков WordPress: «Почему не работает пагинация?»

Для начала нужно разобраться с тем, на какой странице вы хотите вывести пагинацию.

Существуют страницы постов (постов/страниц/кастомных типов постов(CPT)) или архивные страницы(архивные/терминов страницы и страница поиска).

Пагинация на странице постов

В целом пагинацию можно разбить на 3 небольших этапа:

  • Делаем правильную выборку с помощью WP_Query ;
  • Выводим пагинацию;
  • Выводим 404, когда это необходимо

WP_Query для пагинации

Нужно обратить внимание на параметр paged в WP_Query , он говорит о том, какую страницу данного запроса вывести. С помощью функций get_query_var() мы получаем номер текущей страницы …/page/<# страницы>. В зависимости от типа страницы мы должны использовать get_query_var( ‘paged’ ) или get_query_var( ‘page’ ) . Я решил написать универсальный вариант, который подойдет к любому типу страниц.

Вывод пагинации

Для вывода пагинации используем функцию paginate_links :

В функцию paginate_links нужно передать два параметра: total — количество страниц и current — текущую страницу.

Так же можно использовать the_posts_pagination , но важно помнить, что данная функция работает только с глобальным wp_query и ее вызов выглядит примерно так:

Вывод 404 в случае, когда данных нет

Устанавливаем 404 ответ в глобальный WP_Query . Ставим 404 статус ответа для сервера. nocache_headers — позволяет сбросить кеш для заголовков ответа во всех браузерах. И подключаем 404 страницу с помощью require get_404_template() .

Важно, чтобы до вывода данных ф-ций ничего не выводилось на странице!

Результат

Пагинация на архивный страницах

Например я хочу сделать так, чтобы на странице поиска отображались записи только с конкретной категории. Тут важно понимать, что пагинация из примера выше работать не будет т.к. страница поиска является архивной страницей и имеет свою пагинацию. На архивных страницах можно изменить глобальный WP_Query с помощью хука pre_get_posts .

Пример страницы

Пагинация

Для архивных страниц можно использовать функцию the_posts_pagination .

Важно, что данная функция работает только с глобальным wp_query .

Изменяем результат запроса с помощью pre_get_posts

Добавляем в functions.php :

С данным хуком нужно быть осторожным. Для начала нужно проверить, что данный запрос является основным с помощью метода is_main_query . Так же проверить, что данных запрос вызывается на фронте с помощью is_admin и то, что данный запрос является поиском is_search . Затем устанавливаем конкретную категорию set( ‘cat’, 10 );

Суровый русский тимлид. Жил в Магадане, в офисе московских веб студий и в Тульской деревне. Виртуозно знает WordPress, PHP, ООП, Vue.js и вот это вот все.

Делает крутые высоконагруженные сайты, поэтому уже почти захватил весь рынок WordPress разработки в России. Не дает никому делать сайты без спроса.

Ведет блог о разработке, дайджест в телеграмме и в ВК.

Источник

Не работает постраничная навигация, пагинация, ошибка 404 на WordPress

Доброго времени суток. 🙂

Сегодня речь пойдет о проблеме, которая может возникнуть у Вас при работе с WordPress. Данная проблема за частую возникает из за построения пути к записям, то есть через постоянные ссылки.

Если использовать стандартные виды, то скорее всего, проблем не возникнет, но если Вам нужно сделать специфический путь, то возможно проявление разного рода «глюков». Один из самых распространенных — это 404 ошибка при переходе на вторую страницу. Второй — при переходе на вторую, третью и тд страницу, вы остаетесь на первой.

Все это возникает часто при использовании такого строения постоянных ссылок:

ваш_сайт.com/название_рубрики/название_записи/

Как видите, нет ничего необычного, кроме одного момента — отсутствует слово category. В стандартном пути, WordPress использует category и путь выглядит так:

ваш_сайт.com/category/название_рубрики/название_записи/

Вот как раз из за удаления category из УРЛа иногда и приводит к проблеме с пагинацией. Чаще всего чтобы удалить category, делают как описано в этой статье — Как убрать category из URL адреса WordPress. В настройках прописывают — /%category%/%postname%/, а в «Префикс рубрик» — ставят точку. После этого, category исчезнет из ссылки, но иногда начинаются проблемы с пагинацией.

Мне помогают 2 способа решить данную проблему с пагинацией.

Способ номер 1. Способ простой и заключается в обычной установке плагина Wp-no-category-base Плагин доступен в базе плагинов https://wordpress.org/plugins/wp-no-category-base/. Перед тем как его устанавливать, нужно удалить точку из «Префикса рубрик», если вы ее ставили, как описывает инструкция из прошлой статьи. Чаще всего, данный способ, является основным и должен решить проблему. Если этого не произойдет, можно попробовать еще один вариант.

Способ номер 2. Если Вы прописали настройки постоянным ссылкам и поставили точку в префикс рубрик. Откройте файл пользовательских функций functions.php и в самый конец добавить такой вот код:

Если в конце functions.php , в самой последней строке, есть закрывающий тег PHP — ?> то вставить нужно перед ним.

Если после использования обеих способов, у Вас всеравно осталась проблема, то к проблеме нужно подходить индивидуально. Возможно придется поменять скрипт или плагин пагинации, в зависимости от того что у Вас установлено. Также пробовать сменить тему и смотреть на другие плагины, которые могут влиять на работу пагинации.

На этом все, спасибо за внимание. 🙂

Если Вам был полезным мой труд, можете финансово поддержать сайт или отключить блокировщик рекламы, что займет 2 минуты 🙂

Источник

WordPress.org

Русский

Не работает пагинация

Добрый день, не работает пагинация на странице с постами, пробовал разные решения, но ничего не помогло, сайт на своей теме, дорабатывал с программистом, но он в отключке,
менять ‘posts_per_page’=>-1 на другое значение пробовал, код на сегодняшний день:

Буду благодарен за помощь!

  • Тема изменена 1 год, 2 месяца назад пользователем conver100 .

Какая может быть пагинация, если ‘posts_per_page’=>-1 ?

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

Пробовал ставить значение ‘posts_per_page’=>10 — не помогло, выводит 10 постов, но не выводит кнопки пагинации, при этом на странице результата поиска, всё работает.

При указании страницы блога в настройках wordpress, слетает вообще вся вёрстка — она, повторюсь самописная.

  • Ответ изменён 1 год, 2 месяца назад пользователем conver100 .

Не работает и не выводится — две большие разницы.

при этом на странице результата поиска, всё работает.

Потому что результат поиска — список записей. А то, что Вы мучаете, судя по Template Name: Blog — одинокая статическая страница. Движок ничего не знает о том, что внутри шаблона формируется альтернативная выборка записей. Для него это одна запись типа page.

Мой совет: используйте возможности движка. Еще раз: если главной назначена статическая страница, то другую статическую страницу можно назначить страницей записей. Всё остальное сделает wordpress.

Мой совет: используйте возможности движка. Еще раз: если главной назначена статическая страница, то другую статическую страницу можно назначить страницей записей. Всё остальное сделает wordpress.

Конечно это пробовал, вёрстка слетает и не устраивает вывод движком, у нас сделана нормальная вёрстка под сайт без лишней информации, т.к. это не блог, а статьи.

Решается шаблоном, причем без лишней выборки. Ну да ладно, вам виднее на что время убивать. Удачи.

Решается шаблоном, причем без лишней выборки. Ну да ладно, вам виднее на что время убивать. Удачи.

Если кто-то может помочь конкретным советом, буду благодарен.

  • Ответ изменён 1 год, 2 месяца назад пользователем conver100 .

Источник

Не работает пагинация. Сайт на wordpress?

Имеется сайт на вордпресс. Шаблон делал сам, после того как внес все изменения и прописал все функции, сталкнулся с тем что не работает пагинация в рубрике НОВОСТИ. На сайте она одна. вот код файла category.php

страница открывается, вывод новостей работает, сам код все отрабатывает. пагинация выводится плагином wp_pagenavi, при нажатии на страницу два, в крошках видно что страница поменялась, путь меняется, но вот новости остаются те же.

  • Вопрос задан более двух лет назад
  • 761 просмотр

а как они будут меняться, если вы каждый раз делаете выборку по одной и той же странице?

раз уж вы делаете кастомный запрос, то вот сюда
$query = new WP_Query( ‘cat=2&posts_per_page=3’ );
нужно передавать текущую страницу

но вообще все сделано неправильно. правильнее было повесить фильтр на pre_get_posts и там выводить нужное количество постов в категориях.
как сейчас у вас делается несколько лишних запросов на этой странице и паджинация будет работать не корректно.
допустим, у вас 100 постов в этой категории, в настройках сайта указано выводить по 10 (всего 10 страниц в архиве этой категории). вот этим кодом вы ожидаете, что будет выводится по 3 и в архиве категории должно получиться 34 страницы. но если попробуете открыть страницу /page/25, то оно выдаст ошибку

Источник

Информационный портал

Не работает постраничная навигация даже с модулем wp-pagenavi

Ура, свершилось! Победа!

Уже несколько дней бьюсь над проблемой нормальной постраничной навигации. Вопрос вроде простой, а решить не получалось. Перекопал весь интернет, а решения так и не нашел. Все как-то близко, но мне не подходило. И вот наконец-то проблема решена.

Но все по порядку.

Всем известно, что стандартно, постраничная навигация в WordPress решена отвратительно “Предыдущая”, “Следующая”, “Вперед”, “Назад” , “Старые записи” , “Свежие записи” или их аналоги на любимом всеми английском языке – “Previous”, “Next”, “forward” , “back” , “Older Entries” , “Recent Entries”, вот что, как правило, увидит владелец сайта, внизу главной страницы своего ресурса, при стандартной установки Вордпресса.

Исправить это безобразие, впрочем, так же легко, для этого достаточно установить плагин wp-pagenavi

Но у меня была еще одна проблема – я хотел что бы на главной странице сайта не выводились посты из определенной рубрики. Ну, вот так мне хотелось.

Решение было найдено достаточно быстро, для этого в файл index.php моей темы, достаточно было ввести функцию query_posts с указанием категории, которую выводить не надо:

где -27 это как раз ID той категории, посты из которой не должны публиковаться на главной странице. ID можно указывать через запятую, если надо запретить вывод постов нескольких категорий.

Данную функцию ставил перед:

Все отлично работало, запрещенные посты не выводились, НО вот незадача – не работала и постраничная навигация на главной странице сайта.

Т.е. при переходе на следующую (вторую и последующие) страницу открывалась опять первая и отображались все те же посты, расположенные на первой странице, хотя в строке браузера и указывалось, что открыта та страница, на которую вы переходили.

Без знаний php сам я эту проблему решить не мог, а все варианты найденные в сети мне не помогали.

И вот на одном из сайтов мне попалось описание нечто подобного и вроде как очень близкого, но опять же мне не подошедшего

В статье говорилось, что надо вставить код:

При этом, как Вам наверное понятно, будут выводиться посты только из первой категории, что мне опять же было не нужно, НО натолкнуло меня на мысль – соединить:

Соединил, как говориться – “Наобум”, но О ЧУДО, все заработало, как мне было надо!

Источник

Читайте также:  De vente корректирующая лента как починить
Оцените статью