Posts in page не работает

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

Решаем один из самых популярных вопросов у разработчиков 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 разработки в России. Не дает никому делать сайты без спроса.

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

Источник

NextGen конфликтует с Post in Page (решение)

Я угробил на это два часа и три чашки чая!(( Проблема не новая, сталкиваюсь уже не первый раз, просто сегодня ей не повезло, ибо достала окончательно.

Читайте также:  Не работает розетка тойота камри

В чем суть? Да в том… А давай по порядку что-ли…

Недостаток WordPress

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

Вот например, хочу я выводить в конце поста или страницы какие-нибудь анонсы с других страниц (заголовок и немного текста). В функционале этого не предусмотрено.

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

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

Плагин Page-list

Плагин Page-list позволяет выводить анонсы подстраниц какой-нибудь страницы в любом месте поста или другой страницы. Это удобно!

Создаю себе страницу Услуги, а к ней, например, кучу подстраниц с описанием каждой услуги отдельно.

Дальше, на страницу услуги вставляю короткий шоткод, и вуаля.

Вот как тут например. Описание услуг можно удалить, внешний вид поменять. Тут CSS тебе в помощь.

Плагин Posts in Page

Плагин Posts in Page, сам по себе, отличная финтифлюшка. Позволяет выводить анонсы постов, опять-же, внутри страницы или другого поста. Конечно в WordPress’е есть страница рубрики, куда все это добро и так валится, но что делать, если я хочу, скажем, до анонсов поставить картинку с текстом, а после них — контактную форму?

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

Еще одна финтифлюшка плагина в том, что из его папки можно перетащить один файлик (posts_loop_template.php) в Тему и хорошенько поглумиться над шаблоном вывода. Это нужно для того, чтобы добавить свой функционал и при обновлении плагина он не затерся.

Так я добавил туда вывод превьюшки поста.

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

В общем, все было тип-топ, пока на одну из страниц не понадобилось поставить, ко всем перечисленным вещам еще и галерею.

С выбором все просто — NextGen Gallery. Это лучший и удобнейший, на мой вкус, плагин галереи. Описаний по интернету полно, так что мнение составить не проблема. Работать с ним одно удовольствие.

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

Конфликт между плагинами

Но есть у NextGen Gallery одна неприятность. Ну не хочет он работать одновременно с Posts in Page. Хоть тресни! Тупо не разворачивает галерею на странице, радуя унылой никак не оформленной превьюшкой, от которой никакого толку. Вот и пришлось плясать с бубном особенно яро.

Столько кода перелопатил и в одном и в другом, аж в глазах зарябило. В итоге нашел! Стоит отключить в шаблоне плагина Posts in Page функцию the_excerpt();, как галерея тут же начинает работать. Вот только в анонсе поста, что логично, исчезает текст. Заголовок — есть, превьюка — тоже, а текста нет.

Читайте также:  Как настроить роутер для работы с модемом yota

Ну не хочет галерея сосуществовать с вызовом the_excerpt(); Не хочет ни в какую.

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

Итак, вот тут нашел функцию, которая обрезает переменную по словам. Привожу код.

Вставил ее в конец шаблона плагина. На место the_excerpt(); поставил вот этот код.

И всё. Теперь работает как надо.

Дело в том, что the_excerpt(); как раз отвечает за вывод анонса. Т.е. обрезанного поста. Я же заменил ее на get_the_content(); и получил полный текст поста, что мне, естественно, не нужно. Вот и обрезал это безобразие до 50 слов функцией.

Можно конечно обрезать по количеству букв, это и быстрее и проще, но из за того, что сайт в кодировке UTF-8, каждый символ на самом деле состоит из двух, и когда его пополамят, получается ромбик со знаком вопроса. Это очень не красиво смотрится в тексте.

Вот такая история. Ну а раз я планирую пользовать все эти плагины и впредь, пишу этот пост, чтобы не забыть. Может и тебе пригодится? Ну мало ли?))

А не проще отказаться от всех этих плагинов, заменить их просто кодом, и проблемы будут решены.

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

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

Источник

WordPress.org

Русский

Не выводится пагинация

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

Проблема.
Посты выводятся, пагинация отсутствует.

пагинацию в шаблоне пользовательской страницы

У статической страницы нет и не может быть пагинации.

the_posts_pagination()
Выводит на экран ссылки пагинации на след./пред. сет постов. Используется на страницах архивов (рубрики, метки, …).
wp-kama

Для пагинации альтернативной выборки WP_Query можно использовать функцию paginate_links().

Подскажите. Как правильно написать в запросе query_posts код в шаблоне category.php или как прописать через wp_query?
Имеется такой код

Как правильно написать в запросе query_posts код в шаблоне category.php

Вы же спрашивали про «в шаблоне пользовательской страницы», а не рубрику.
Зачем там еще query_posts, если на момент подключения шаблона выборка уже сделана?

Зачем if( is_category() ) в шаблоне category.php? Что еще там может быть?

@jonni148, почему в чужом вопросе пишете? Правила форума не читали?

И код надо оформлять как код, а не как попало.

Как правильно написать в запросе query_posts

Извините, не читал правила.

Т.к. в шаблоне странице нельзя вывести, то что мне нужно, поэтому спрашиваю, чтобы выводить через шаблон категории.
Как правильно применить переменную $cat_name в запросе query_posts?
Я не силен в wordpress на столько, надеюсь на вашу помощь.

Ну так прочтите и перестаньте их нарушать каждым своим постом

Источник

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, при нажатии на страницу два, в крошках видно что страница поменялась, путь меняется, но вот новости остаются те же.

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

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

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

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

Источник

Оцените статью