- Как вывести на странице список всех записей сайта?
- Вывод постов на странице, постраничная навигация
- Плагин постраничной навигации WP-PageNavi
- Комментарии — 32
- wp_get_recent_posts() WP 1.0.0
- Возвращает
- Шаблон использования
- Использование
- Примеры
- #1. Последние записи
- #2. Для версий ниже 3.1
- Данные, возвращаемые для каждого поста
- Вывод постов по значениям произвольных полей при помощи meta_query класса WP_Query
- Часть 1. Примеры использования meta_query
- Вывод постов по значению произвольного поля
- Вывод постов по диапазону значений произвольного поля
- Сравнивание значений произвольных полей
- Вывод постов по значениям нескольких произвольных полей
- Использование параметра compare_key
- Часть 2. Работа с произвольными полями без помощи meta_query
- Смотрите также
- Комментарии — 81
Как вывести на странице список всех записей сайта?
Очень часто на форумах поддержки WordPress возникает вопрос о том, как в записи или на странице вывести список всех существующих на сайте записей. Зачем это нужно каждый решает сам. Кто-то таким образом вручную создает карту сайта, а кому-то это надо для замены рубрик. В большинстве случаев, подобная задача решается с помощью сторонних плагинов. Но если вам надо просто вывести список записей и ничего больше, то использование сторонних плагинов тут будет неоправданным. Вывести список всех записей можно с помощью небольшого шорткода [allposts], который вы вольны добавить куда угодно. Совсем недавно я рассматривал вопрос о том, как вывести список всех меток или рубрик сайта в алфавитном порядке, с записями принцип практически тот же. Для этого вам необходимо добавить в файл functions.php вашей темы следующий код:
//вывод списка всех записей сайта с помощью шорткода start function wph_allposts_shortcode($atts, $content) < $args = array( 'post_type' =>‘post’, ‘post_status’ => ‘publish’, ‘posts_per_page’ => -1, ‘orderby’ => ‘title’, ‘order’ => ‘ASC’ ); $query = new WP_Query( $args ); if( $query->have_posts() ) < echo '
- ‘; while ( $query->have_posts() ) < $query->the_post(); echo ‘
- ‘ . get_the_title() . ‘ ‘; > echo ‘
‘; > wp_reset_postdata(); > add_shortcode(‘allposts’, ‘wph_allposts_shortcode’); //вывод списка всех записей сайта с помощью шорткода end
При желании вы можете поправить аргументы WP_Query, если вам надо получить список записей с какими-либо дополнительными условиями (фильтрация по рубрикам, датам и т.д.). По умолчанию шорткод выведет список в алфавитном порядке.
Источник
Вывод постов на странице, постраничная навигация
Прежде чем я покажу готовый код, давайте подробнее рассмотрим, что имеется ввиду в заголовке и когда это лучше применять.
Вывести посты на странице в WordPress — это значит создать шаблон страницы (page template) и забацать туда цикл, query_posts.
Для чего нужно такое вытворять? Рассмотрим несколько вариантов:
- представьте, что вам нужно вывести на одной странице записи сразу из нескольких категорий
Вообще можно скомбинировать любые условия, используя эту статью. Параметры, которые описаны для WP_Query также подойдут и для query_posts.
Теперь я думаю порядок действий вам понятен? Создаете шаблон страницы, пихаете наверх query_posts, потом цикл, потом постраничную навигацию…
Кстати о ней. Просто так она не будет работать. Как это исправить?
Пожалуй стоит описать порядок действий более подробно.
- Создать шаблон страницы.
- Определить номер текущей страницы.
- Использовать query_posts с необходимым набором аргументов, при этом не забыв включить в него номер текущей страницы.
- Добавить цикл.
- Добавить функцию постраничной навигации, например wp_pagenavi().
А теперь полностью готовый код:
Это конечно же обобщенный пример, поэтому не забудьте про get_header() и get_footer(), если они у вас используются.
Плагин постраничной навигации WP-PageNavi
В предыдущем примере я использовал функцию wp_pagenavi() . Она отвечает за постраничную навигацию и является составляющей частью плагина WP-PageNavi (русское название: Список страниц).
Если вы используете данный код как есть и при этом у вас не установлен WP-PageNavi, то вероятнее всего вы получите ошибку.
Плагин очень легко устанавливается через админку сайта и так же легко настраивается — так что для этих целей рекомендую использовать именно его.
Впервые познакомился с WordPress в 2009 году. Организатор и спикер на конференциях WordCamp. Преподаватель в школе Нетология.
Если вам нужна помощь с сайтом или разработка с нуля на WordPress / WooCommerce — пишите. Я и моя команда будем рады вам помочь!
Комментарии — 32
Кучу статей перерыла, чтобы решить свою проблему с навигацией на пользовательской странице — ничего толкового нигде нет. И только ваша статья действительно помогла. Спасибо!
я рад, что смог помочь))
Почитал Ваш пост, чувствую, что ответ где то здесь :).
Такая задача. Есть статья на 12 килознаков, я хочу разбить её на 3 части. По нажатию на ссылку на статью в меню, читатель должен попадать на вначале первую часть, далее читает вторую часть и напоследок третью. Однако в начале каждой части должна быть ссылка на статью в полном варианте, для тех кто хочет открыть сразу всю статью и читать не листая страницы туда-сюда. Понятно что нужно сделать три страницы для каждой из трех частей отдельно. Но как их собрать в кучу? подойдет ли для этого код помещенный в статье, там речь идет о постах (записях) а не о страницах? Или можно как то проще это реализовать?
попробуй сделать GET-запрос в single.php)
Я правильно понимаю вставляю код на свою страницу в таком виде
почемуто не работает.
Классная статья, очень помогла!
Спасибо тебе Огромное!)
пожалуйста) рад, что помог)
Все понял теперь выводятся.
Может быть сможеш разобратся как сделать чтобы хлебные крошки работали на странице. допустим страница у меня «Новости» на ней выводятся заметки из категории допустим «Блог» вот когда я на странице «Новости» перехожу по заметке то в хлебные крошки пдстовляется уже не «Новости» а «Блог» и потом название заметки.
Хлебные крошки использую от dimox
суй код после хлебных крошек)
Привет, подскажи пожалуйста как вывести 3 определенные записи в слайдер, (например: post=754,234,432)? Спасибо
используй параметр post__in = array(754,234,432) для query_posts.
Полный список параметров смотри здесь.
А можешь показать куда вставить)(что удалить) на примере
тот огрызок кода вообще нерабочий) на третьей строчке есть две скобки — где они открываются?
Спасибо, информация очень помогла.
Спасибо! Очень полезная и позновательная статья.
Наконец-то все работает) Спасибо))
У меня вопрос: Пытаюсь таким куском кода на одной странице выводить посты с разных категории, но столкнулась с проблемой: как только нет постов с такой категории — то дальнейшие if-ы уже не обрабатываются. Почему? Разве if не подразумевает, что если нет подходящего условия — идти дальше? Почему обрывается исполнение?
Попробуйте небольшие изменения:
Вы мой спаситель))
Это логично ставить изначально условие)) Спасибо еще раз)
пожалуйста) рад помочь)
Задача была такая: вывести на главной странице посты из 2-х категорий с id 102 и 103, с сортировкой по дате добавления в хронологическом порядке, и с количеством постов на странице 12 шт. Получилось вот так:
Все отлично работает, но вот беда все же одна есть: на главной странице отображаются посты из нужных категорий, т.е. с id 103 и 102, а вот на второй странице отображаются посты из всех других категорий, к примеру, с id 3 или 4 или 5. В принципе, мне и не нужна эта вторая страница вовсе (эта та, которая выглядит как сайт.ru/page/2/, т.к. вся нужная мне информация присутствует на первой. Но вот как от этой второй и последующих страниц избавиться?
Посмотрела, у меня в шаблоне index.php количество страниц задано через переменную
В php не сильна, но пришла такая мысль в голову: может, присвоить этой переменной значение 1, и все? Подскажите, пожалуйста, как решить проблему.
Источник
wp_get_recent_posts() WP 1.0.0
Получает последние записи (посты) сайта, включая черновики, запланированные и записи на модерации. Получит 10 последних записей.
В параметре post_type можно указать записи какого типа нужно получить, по умолчанию post — т.е. получаются посты сайта.
Функция является оберткой для get_posts(), отличия в том, что она получает 10, а не 5 записей и пытается получить записи всех возможных статусов, включая черновики, запланированные, личные и ожидающие модерации.
Возвращает
Массив|false . Список постов в виде ассоциативного массива из объектов записей. В индексах массива будет находится ID записи, а в значении объект WP_Post, т.е. сама запись (пост).
Шаблон использования
Использование
Массив аргументов по которым нужно получить последние посты. Какие аргументы можно использовать смотрите в описании query_posts().
Аргументы стали возможны только с версии 3.1, до этого в этот параметр передавалось число — сколько последних постов выводить.
По умолчанию: предустановки
Тип возвращаемых данных.
- ARRAY_A — массив массивов с данными постов, в индексах массива будет ID поста.
- OBJECT — массив объектов WP_Post, в индексах массива будут числа по порядку.
Примеры
#1. Последние записи
Выведем список из 6-ти ссылок на последние уже опубликованные записи из категории 5:
#2. Для версий ниже 3.1
Работает для версий ниже 3.1. Это пример, показывает как использовать функцию wp_get_recent_posts , для того чтобы вывести список из 7 последних постов на экран. Список будет в виде ссылок на посты.
Данные, возвращаемые для каждого поста
Какого типа вложения нужно получить. Можно использовать, когда параметр post_type = attachment .
- image/jpeg
- image/png
- image/gif
- image — для любых картинок
- audio/mpeg
- application/pdf
- application/zip
Вместо одно миме типа можно указать несколько в массиве. Полный список миме типов смотрите здесь.
comment_count(число) Количество комментариев у записи.
Источник
Вывод постов по значениям произвольных полей при помощи meta_query класса WP_Query
Пост будет состоять из двух частей, в первой разберемся вообще с тем, что можно сделать при помощи meta_query, а во-второй рассмотрим несколько примеров по работе с произвольными полями без использования meta_query вообще.
Часть 1. Примеры использования meta_query
Вывод постов по значению произвольного поля
Начнем с самого простого примера, предположим, нам нужно вывести все товары синего цвета:
Если вы заглянете на страницу редактирования любого из полученных в данном примере товаров, то в блоке «Произвольные поля» вы увидите следующее:
Хочу заметить, что примеры упрощены, в массиве аргументов по-любому должны быть такие параметры, как posts_per_page (количество постов, отображаемых на странице) и скорее всего post_type (отдельный тип поста для товаров). То есть мы рассматриваем чисто meta_query и ничего лишнего.
Также можно сделать и наоборот — то есть, чтобы выводились все товары, кроме товаров синего цвета:
А теперь те же самые примеры, но только добавим еще один цвет. Итак, сначала выводим все товары синего или красного цвета:
А теперь все товары, кроме товаров синего и товаров красного цвета:
Вывод постов по диапазону значений произвольного поля
Ну в случае с товарами удобно будет вывести их по диапазону цен, например выведем все товары, которые дороже 1000 и дешевле 3000:
Сравнивание значений произвольных полей
Разделим предыдущий пример на два примера:
- В первом — цена товаров будет больше 1000 (или равна 1000)
- Во втором — цена товаров будет строго меньше 3000
Вывод постов по значениям нескольких произвольных полей
Ничего особо нового придумывать здесь не буду — просто объединю предыдущие примеры, например, чтобы товар был синего цвета И чтобы его цена была от 1000 до 3000, вот как будет выглядеть массив параметров:
Использование параметра compare_key
Начиная с версии WordPress 5.3 вы можете сравнивать не только значения произвольных полей, но и их мета ключи. Подробнее об этом с примерами тут.
Часть 2. Работа с произвольными полями без помощи meta_query
Тут особо и не о чем рассказывать, если параметр WP_Query meta_key (название параметра) и есть meta_value (значение параметра, для числовых значений — meta_value_num ) . А ещё есть параметр сопоставления meta_compare .
Теперь рассмотрим пример. Допустим, некоторые из постов мы должны отобразить на главной странице. Давайте выведем эти посты:
А теперь получим все остальны посты, т.е. у которых параметр homepage_show_it не равен on.
Смотрите также
Впервые познакомился с WordPress в 2009 году. Организатор и спикер на конференциях WordCamp. Преподаватель в школе Нетология.
Если вам нужна помощь с сайтом или разработка с нуля на WordPress / WooCommerce — пишите. Я и моя команда будем рады вам помочь!
Комментарии — 81
Добрый день! Спасибо за статью. Подскажите, пожалуйста, у меня стоит плагин ‘Advanced Custom Fields’, и добавлен тип поля чекбокс, где есть 2 значения «желтый» и «темный», название поля «оттенок», как мне вывести все статьи скажем, со значнием «желтый»? пробовал просто писать meta_key=оттенок&meta_value=темный, но так не работает. Очень надеюсь на Вашу помочь, спасибо)
Вы можете мне помочь? Очень необходима Ваша помочь.
Добрый день!
сорри за долгий ответ.
значение meta_value скорее всего будет on
Привет, Миша!
Я опять к тебе за советом)).
Как бы реализовать вывод похожих по произвольным полям страниц?
Попыталась видоизменить с похожих по тегам записей:
Но что-то видимо не то.. не работает..
Можешь подсказать?
Я понимаю, что надо как-то получить массив значений этих трех произвольных полей и затем сравнивать их в строке ‘value’ => $search_color_value
Но как — башка под утро уже не варит..
Привет)
А можно поконкретнее, какая задача перед нами стоит? Что-то я не совсем понял. Выводим страницы, у которых. ?
Привет),
сама спросила, сама решила)
Нужно было на статической странице выводить список похожих страниц, по совпадению значений произвольных полей.
Я использовала get_post_custom_values, чтобы получить значения.
Скажите, пожалуйста, у вас получилось наладить вывод похожих страниц? Я вот бьюсь несколько дней над подобной задачей — вывести похожие записи, если значения в чекбоксах совпадают. Но все бестолку. Выводит неправильно:( Можно на ваш кусок кода готовый посмотреть и на сайт взглянуть, где это реализовано? Если бы одно значение похожее — не было бы проблемы похожие записи вывести, а с массивами у меня беда. Спасибо.
У себя в похожих записях я указываю их IDы, если же IDы не указаны, то записи выводятся рандомно.
Мне хочется избежать ручного ввода, т.к. много записей — карточек товаров. У каждого товара есть характеристика (custom field) — color. У него может быть несколько значений одновременно — красный, бежевый, синий. Как вывести другие карточки товаров с одним или несколькими совпадающими значениями цвета? Т.е. надо, чтобы анализировалось значение color текущего товара и на основании этого значения выводились записи с таким же значением.
чтобы анализировалось значение color текущего товара и на основании этого значения выводились записи с таким же значением
Вы сами ответили на свой вопрос 🙂
Миша, стукнулась к вам в скайп.
Здравствуйте!! Помогите мне пожалуйста с проблемой. У меня установлен ACF плагин который в админке ставит кастомное поле селекта со множественным выбором. На сайте есть форма на ней 4 чекбокса мне надо что бы по щелчку по чекбоксу просходила выборка постов в помеченными пунктами селекта которые указаны в админке.
Т.е у меня в ACF написано так
prin : Принтер
scan : Сканер
copy : Копир
fax : Факс
в HTML так Принтер
Сканер
Копир
Факс
и по отправке формы все значения чекбокса влетают в переменную пробовал вот так но у меня ничего не просходит
пожалуйста помогите мне разобраться!!
Здравствуйте! Это нужно смотреть и разбираться, сходу не смогу сказать.
Привет, снова я к тебе =), спустя полгода обнаружила проблему.
Написала я фильтр, который ищет по цвету, размеру, типу и цене. Загвоздка, если у страницы нет произвольного поля цены, то она не показывается.
Код meta_query такой:
Как бы дописать, чтобы в результатах были страницы, не только с заданным интервалом, но и в том числе вообще без поля цены?
Привет!)
Я думаю, что:
А как же быть с остальными параметрами? В них-то нужна логика «И» — красный и 10х10..
Тогда мне нужен полный первоначальный код, в том числе содержимое переменных:
У тебя всегда нереальные задачи 🙂 Не в смысле невыполнимые, а в смысле сложные и интересные. Итак:
Что-то не срабатывает. При любых запросах выводит — одинаковое количество страниц.
Такой вариант тоже не работает:
Попробовала принудительно вписать остальные ключи цвет и размер, но опять то же кол-во страниц. Т.е. почему-то не срабатывает цикл, если вложенный.
Всё, поняла почему, у меня ВП 4.0, а вложенность только с 4.1
Здравствуйте! У меня на сайте стоит плагин для поиска по пользовательским полям WP Custom Fields Search. И он отлично работает со всеми полями и рубриками, за исключением тех, названия которых (с смысле значения поля или рубрик) на русском. К примеру, если есть польз. поле zvet и его значение «красный», то в форме поиска, которую можно создать с помощью плагина, поле выбора цвета пустое. Если написать на английском, к примеру, krasnyi, то в поле появляется эта надпись. Интуитивно понимаю, что проблемы с кодировкой. Но не могу понять, как это исправить? Какой файл нужно сохранить в другой кодировке. Может, вы что-то подскажите?
Здравствуйте!
Плагин просто не поддерживает кириллицу, как исправить, не знаю. Возможно попробовать поменять строковые функции в файлах плагина на mb_ аналоги.
Михаил, приветствую! Есть произвольные поля у записей, поля числовые. Одним словом есть много записей с одним произвольным полем. Надо сложить все эти поля чтобы получить их сумму. И вывести на отдельной странице. Вопрос как это сделать, если это вообще возможно?
Если складываться не будет, можно в intval() обернуть)
Спасибо большое. Не, надо оборачивать, все отлично складывает. Вопрос в другом, у меня поля прилепляются к записям плагином. Так называемые — повторяющиеся поля, которые выводятся перебором, примерно так (цикл в цикле — это подтягиваются названия из других записей)
И как вытащить из этого перебора конкретное поле мне пока не понятно. Может что-то присоветуете?
Для начала гляньте, что содержится в массиве $fields и сразу всё станет понятно:
Огромная благодарность! Совет помог. Даже складывает все))) Но есть другой момент — почему-то он мне выводить данные из одной и той же записи. Цикл пробегает, а данные не изменяются. Поставил сброс данных не помогает.
Совет тот же — смотреть содержимое $fields и разбираться 🙂
Миша, а как переориентировать тоже самое, только на комментарий? Нужно вывести в комментарии результат сложения сохраненных мета данных, которые были введены в форме этого комментария при его отправке.
Формула, я так понял, будет такая:
И нужно условие поменять, вроде как на такое:
Ну на первый взгляд примерно так, да
Задача решилась через WP_Comment_Query().
Миша, подскажи плиз, как быть: в каждом комментарии есть расчетная переменная через формулу. Как мне теперь сложить все эти переменные для поста от каждого комментария?
Это расчетное значение получается, что уже не метаданные, поэтому не могу ничего сложить.
Может через глобальные переменные?
Добрый вечер.
Подскажите, на главной необходимо вывести несколько постов по количеству просмотров, они записываются в произвольное поле. К примеру я могу вывести все записи с просмотрами от 20 до 30 (неважно). Как мне вывести допустим 4-5 записи с максимальным числом просмотров?
Спасибо большое. Все работает
Миша, добрый день!
А как записать значение произвольного поля, если оно будет известно только при добавлении страницы.
Сейчас я завожу постоянно новый шаблон для каждой марки машины и выважу таким образом
query_posts(array( ‘meta_key’ => ‘auto’, ‘meta_value’ => ‘Audi’, ‘meta_compare’ => ‘=’ )); , может можно как то сделать так вот, query_posts(array( ‘meta_key’ => ‘auto’, ‘meta_value’ => ‘значение, которое будет отображаться когда будет заведен шаблон страницы’, ‘meta_compare’ => ‘=’ ));
Добрый день! Сорри, не понял вопроса 🙂
Уже вопрос, снят) там и без этого куча всякого вылезает в котором не разобраться и не сформулировать)
Приветствую!
Есть произвольное поле «Скидки» (в процентах). Можно ли упорядочить посты по размеру скидки в порядке убывания? Т.е. на первом месте пост с самой большой скидкой, на последнем — с самой маленькой (между ними соответственно идут другие посты в порядке убывания скидки).
Спасибо!
Привет!
А значок % присутствует в произвольном поле?
Значок % присутствует, но можно и убрать, если это мешает
Да, лучше убрать, и параметры сортировки для WP_Query будут примерно такими:
Миша, привет. Столкнулся с такой задачей:
Есть набор постов с параметрами. У каждого поста есть одинаковое польз. поле со значением (числовым). Мне нужно перебрать их все и вывести из них минимальное значение в ячейку на странице, потом в соседнюю ячейку максимальное, т.е. чтобы была запись что-то вроде от ___ до ____. Как это можно сделать, можешь подсказать?
Привет, я думаю тут оптимальнее всего использовать сортировку по проивольному полю, как например:
Тогда еще придется вывести в ячейку значение польз. поля поста, который в сортировке первый/последний (мин./макс), так?
В общем если просто нужно из всех постов выбрать максимальное и минимальное значение произвольного поля, то тут способа три наверное, и как например можно использовать значения $args , которые я выше привел, тогда получается самый первый пост в цикле будет иметь максимальное, а самый последний — минимальное значение.
С циклом подразобрался, сейчас выводится ряд числовых значений полей (500 400 300 . ). А как мне оставить на странице первое значение (500) и убрать остальные значения?
Я нашел сайт с примером о том, что я спрашивал про вывод макс. и мин. значений в формате от и до: http://moscow.stomatologija.su/ceny-na-uslugi . Посмотри пожалуйста. Я в этом деле начинающий, но, насколько я понял, что в ответе ты мне написал про сортировку по убыванию постов, но мне же нужно вывести на странице не сами посты,а только значение п/п у поста с мин или макс. значением.
Окей, смотри, тут достаточно базовых знаний массивов, например:
Спасибо, мастер! Твой способ работает, то, что было мне нужно! Я в мануале по php нашел функцию array_shift (извлечь первый элемент массива), но что-то не сработало как мне надо.
Пожалуйста 🙂 Рад, что помог!
Выяснился один нюанс: заполнил нужные поля в постах, в ячейках через идет вывод мин и макс (. Определился, допустим, минимум в одном посте. Если я потом удалю число из значения п/п, то минимум больше не выводится вообще, хотя должен вывести значение от другого поста, но когда обратно указываю значение, то всё считается и минимум может быть уже в другом посте, если у него меньше, главное, чтобы ячейка была не пустая у поста, в котором первый раз был минимум. Видимо образуется какая-то привязка к первому определению значений. По ощущениям не хватает какого-то обновления в цикле. Или может можно цикл попробовать перестроить иначе?
А, я понял, надо добавить еще проверку на пустое значение, примерно такой параметр:
Источник