- Как подключить пагинацию используя функцию get_posts() ?
- Не за#буйте с вашей пагинацией.
- Пагинация на странице постов
- WP_Query для пагинации
- Вывод пагинации
- Вывод 404 в случае, когда данных нет
- Результат
- Пагинация на архивный страницах
- Пример страницы
- Пагинация
- Изменяем результат запроса с помощью pre_get_posts
- get_posts() WP 1.2.1
- Возвращает
- Шаблон использования
- Использование
- Аргументы параметра $args
- Примеры
- #1 Выведем записи из рубрики
- #2 Вывод постов с отступом
- #3 Вывод постов с отступом, без нарушения основного цикла.
- #4 Возможность использовать специальные функции Цикла ВП
- #5 Последние посты отсортированные по заголовку
- #6 Случайные посты
- #7 Получить все прикрепленные файлы
- #8 Прикрепленные файлы определенного поста
- #9 Последние записи из той же рубрики
- Заметки
Как подключить пагинацию используя функцию get_posts() ?
Очень удобная функция, но не удается заставить работать штатную пагинацию. Поиск в инете выдает рекомендацию использовать вместо нее WP_Query.
Но можно ли как-то подключить пагинацию именно к get_posts()
Базовая функция работает на основе глобальной $wp_query . Попробуйте использовать WP_Query вместо get_posts() . И запишите результат в глобальную $wp_query . Но предварительно сохраните $wp_query , а после кода верните её в прежнее состояние.
Если первый вариант не сработает, попробуйте сделать все это с помощью query_posts():
П.С. Также для понимания проблемы вам могут пригодиться эти статьи:
Спасибо за содержательный ответ. Попробую.
А какой вариант из двух предпочтительнее использовать, первый?
В общем-то нет принципиальной разницы, принцип и тут и там одинаковый: доп запрос и т.д. Какой больше нравится такой используй! Второй вроде покороче будет, можно его.
Навигация на страницу вставилась, но когда перехожу по ссылке 2 например, меняется адрес в адресной строке, а содержимое страницы не меняется .. В чем может быть причина? Посты есть.
Код покажи, по идее должна работать пага.
Вот код, проблема та же. меняется url — но посты остаются теми же..
Ну так ты в запрос то передавай страницу пагинации. Параметр paged в него укажи get_query_var(‘paged’) или в какой переменной там у тебя номер стр пагинации лежит..
П.С. ну вы ребята даете конечно. Ну как же так? Функция — это же не чудеса, ну элементарная же логика, что спросил то и отдает и если ты не спрашиваешь посты со страницы 2, то как же потом можно ждать что вернутся посты со страницы 2?
Нашел на просторах интернета
Ниже приведена базовая конструкция цикла пользовательского запроса с правильно работающими функциями пагинации:
Источник
Не за#буйте с вашей пагинацией.
Решаем один из самых популярных вопросов у разработчиков 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 разработки в России. Не дает никому делать сайты без спроса.
Ведет блог о разработке, дайджест в телеграмме и в ВК.
Источник
get_posts() WP 1.2.1
Получает записи (посты, страницы, вложения) из базы данных по указанным критериям. Можно выбрать любые посты и отсортировать их как угодно.
Это обертка для класса WP_Query, т.е. в функцию можно передать такие же параметры.
У этой функции есть предустановленные параметры. Иногда их нужно изменить, чтобы они не мешали. Предустановленные параметры:
- post_type = post — если мы указываем вывод таксономии для типа записи отличного от post, то параметр post_type нужно изменить — он по умолчанию равен post .
- numberposts = 5 — если мы забудем изменить параметр numberposts , то долго можем недоумевать почему выводится только 5 записей вместо нужных 20.
- suppress_filters = true — этот параметр отключает работу некоторых фильтров (хуков). Читать подробнее.
get_posts() — это аналог query_posts(). Отличается тем, что get_posts() не вмешивается в глобальный запрос WP, а создает отдельный экземпляр класса WP_Query . Подробнее читайте здесь.
Возвращает
Пустой массив, если не удалось получить записи.
Массив WP_Post объектов (записей). Каждый объект в массиве выглядит так:
Шаблон использования
Использование
Аргументы параметра $args
Эта функция является оберткой для WP_Query, поэтому она может принимать такие же параметры.
- numberposts (число)
- posts_per_page (число)
- offset (число)
- category (число/строка/массив)
- category_name (строка)
- tag (строка)
- include (строка/число/массив)
- exclude (строка/число)
- meta_key и meta_value (строка)
- meta_query (массив)
- date_query (массив)
- post_type (строка/массив)
- post_mime_type (строка/массив)
- post_status (строка)
- post_parent (число)
- nopaging (логический)
- orderby (строка)
- order (строка)
- suppress_filters (true/false)
numberposts(число) posts_per_page(число) Количество выводимых постов. Установить на 0 , чтобы ограничить вывод максимальным числом постов на страницу (устанавливается в настройках ВП) или поставить -1 чтобы убрать ограничения вывода (LIMIT).
По умолчанию: 5 offset(число) Отступ от первого поста (записи). category(число/строка/массив)
Укажите ID категории из которой нужно получить посты. Можно указать ID со знаком минус -3 , тогда эта категория будет исключена (будут получены все записи, кроме записей из категории 3). Можно указать несколько ID через запятую в виде строки 3,5,12 или -3,-5,12 ).
В значении нужно передавать ID, а не название категории.
Смотрите также описание параметра cat у WP_Query .
category_name(строка) Показывать посты только из этой категории (указывается название или альтернативное имя(slug) категории).
По умолчанию: » tag(строка) Получить записи имеющие указанные в этом параметре метки. Нужно указывать альтернативное имя (slug) метки. Если указать несколько имен (меток) через запятую, то будут получены записи соответствующие любой метке, а если разделить пробелами, то будут получены записи имеющие все указанные метки.
По умолчанию: » include(строка/число/массив)
ID постов, которые нужно получить. Если указывается строка, то ID нужно разделять запятыми или пробелами. Пример, получит 6 постов: ‘45,63,78,94,128,140’.
Важно: Указав этот параметр, бессмысленно указывать параметры posts_per_page , offset , category , exclude , meta_key , meta_value и post_parent .
По умолчанию: »
exclude(строка/число) ID постов которые нужно исключить из выборки, указывать через запятую или пробел.
По умолчанию: » meta_key и meta_value(строка)
Получить посты имеющие указанное произвольное поле (meta_key) со значением (meta_value).
Можно указать meta_key и meta_value , тогда будут получены посты, у которых есть указанное метаполе и значение которого равно указанному значение.
Или можно указать только meta_key , тогда будут получены все записи у которых это метаполе есть и не важно какое там значение.
meta_query(массив) Выборка записей по произвольным полям. Подробнее см. в описании WP_Query (meta_query).
По умолчанию: [] date_query(массив) Выборка записей по датам. Подробнее см. в описании WP_Query (date_query).
По умолчанию: [] post_type(строка/массив)
Какого типа посты нужно получать, может быть:
- any — все типы, кроме revision и типов у которых указан параметр exclude_from_search=true .
attachment — прикрепленные записи.
по умолчанию WP_Query ставит статус ‘post_status’=>’publish’ , а вложения имеют статус ‘post_status’=>’inherit’ , поэтому чтобы вывести вложения нужно еще изменить параметр post_status на ‘inherit’ или ‘any’.
По умолчанию: ‘post’
Какого типа вложения нужно получить. Можно использовать, когда параметр post_type = attachment .
- image/jpeg
- image/png
- image/gif
- image — для любых картинок
- audio/mpeg
- application/pdf
- application/zip
Вместо одно миме типа можно указать несколько в массиве. Полный список миме типов смотрите здесь.
Статус записи. Можно передать несколько статусов через запятую. Может принимать:
- publish — опубликовано
- private — личная запись
- draft — черновик
- future — запланировано
- pending — на модерации
- inherit — вложение, любое вложение получает этот статус. Ставиться автоматически, при $post_type=’attachment’
- any — все статусы
По умолчанию: publish
post_parent(число) Показать только дочерние записи к указанному ID.
По умолчанию: 0 nopaging(логический) Включить или отключить пагинацию, если стоит true параметр $numberposts игнорируется.
По умолчанию: false orderby(строка)
Сортировать результат по указанным полям. Можно указывать несколько полей сортировки, через пробел. Допустимые поля:
- author — сортировать по ID авторов.
- content — сортировать по контенту.
- date — сортировать по дате создания записи.
- ID — сортировать по ID записи. Указываются ID в массиве или через запятую.
- menu_order — сортировать по полю menu_order . Используется для постоянных страниц и вложений (картинки, файлы и т.п.).
- mime_type — сортировать по MIME типу. Используется для вложений.
- modified — сортировать по дате изменения.
- name — сортировать по альтернативному имени (slug).
- rand — случайная сортировка. Создает повышенную нагрузку на БД.
- status — сортировать по статусу (черновик, опубликовано и т.п.)
- title — сортировать по названию.
- parent — сортировать по ID родителя (parent ID).
- password — сортировать по паролю.
- type — сортировать по типу (пост, страница и т.д. ).
- comment_count — по количеству комментариев.
- meta_value — по значению указанного произвольного поля.
- post__in — учитывает порядок указанных ID в параметре include.
Префикс post_ у полей таблицы опускается для удобства. Например вместо date можно написать post_date , вместо content post_content и т.д.
По умолчанию: ‘date’
меню order(строка) В каком направлении упорядочить, указанное в параметре $orderby , поле:
ASC — по порядку (от меньшего к большему: а,б,в).
DESC — в обратном порядке (от большего к меньшему: в,б,а).
По умолчанию: ‘DESC’ suppress_filters(true/false)
При true (по умолчанию) пропускает все хуки изменения SQL запроса, такого типа posts_* или comment_feed_* .
Какие именно фильтры отключаются смотрите здесь.
В функциях WP_Query и query_posts() этот параметр отключен по умолчанию (равен false).
suppress_filters = true не виляет на работу фильтра pre_get_posts.
Такое отключение фильтров по умолчанию, может ввести в замешательство, если есть плагины влияющие на вывод записей, через фильтры SQL запроса, например WPML. В таких случаях suppress_filters нужно отключить.
По умолчанию: true
Примеры
#1 Выведем записи из рубрики
Допустим у нас в категориях есть рубрика «Статьи» (ярлык articles ) в которую добавляются записи ( post_type=post ). Нам нужно вывести 6 таких записей на произвольной странице.
#2 Вывод постов с отступом
Если у вас на главной выводится один, последний пост, а нужно вывести еще 5 предыдущих из категории 1, то можно использовать такой код:
#3 Вывод постов с отступом, без нарушения основного цикла.
Если была использована функция get_posts() и после нее нужно использовать стандартный цикл WordPress, то нужно сохранить глобальную переменную $post , делает это так:
#4 Возможность использовать специальные функции Цикла ВП
Стандартно в цикле основанном на get_posts() невозможно использовать, например, функцию the_content() или the_date() . Эта проблема решается функцией setup_postdata() которой нужно передать переменную $post :
Данные можно также получить через обращение к свойству объекта (объект->свойство_объекта). Например, для этого примера $post->ID будет равно ID поста, $post->post_content будет содержать контент записи. Свойство объекта это колонка таблицы БД posts. Название колонок можно посмотреть тут.
Не забывайте, что на экран данные выводятся через php оператор echo :
#5 Последние посты отсортированные по заголовку
Получим последние посты отсортированные по заголовку в алфавитном порядке. Следующий пример выведет дату, заголовок и цитату поста:
#6 Случайные посты
Получим 5 случайных постов, реализуется за счет параметра ‘orderby’ => ‘rand’ :
#7 Получить все прикрепленные файлы
Используется за пределами Цикла WordPress. Следующий код выведет заголовок, ссылку и цитату прикрепленного файла:
#8 Прикрепленные файлы определенного поста
Код нужно использовать внутри Цикла WordPress, где переменная $post->ID :
#9 Последние записи из той же рубрики
Выведем список последних записей текущей рубрики, в которой находится запись. При этом исключим текущую запись:
Заметки
С версии 2.6 изменен ряд передаваемых значений у параметра orderby — префикс post_ был удален, например, было post_title, стало просто title.
Хотите дешево купить просмотры в Инстаграме на видео или ТВ-трансляцию, но не знаете, где? Попробуйте посетить сайт Doctor SMM, где Вам будет предложена одна из самых низких цен по рунету на просмотры. Торопитесь, так как предложение действует ограниченное время! К тому же здесь Вы сможете очень быстро приобрести ресурс с оптимальным, конкретно для Вашей страницы, скоростным режимом. Развивайте аккаунт быстро и легко!
Источник