WordPress сортировка произвольных полей

WP Magazine

Про WordPress на русском языке

Работа с произвольными полями в WP_Query

Произвольные поля (или мета-данные) в WordPress позволяют добавлять дополнительную информацию к записям, страницам и пользовательским типам данных. Использовать произвольные поля можно в самых разных сценариях, например:

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

Работа с произвольными полями в WordPress

» data-medium-file=»https://wpmag.ru/wp-content/uploads/2014/01/wordpress-custom-fields.png?fit=300×93″ data-large-file=»https://wpmag.ru/wp-content/uploads/2014/01/wordpress-custom-fields.png?fit=1024×317″ src=»https://wpmag.ru/wp-content/uploads/2014/01/wordpress-custom-fields.png» alt=»Работа с произвольными полями в WordPress» width=»766″ height=»237″ srcset=»https://wpmag.ru/wp-content/uploads/2014/01/wordpress-custom-fields.png 2164w, https://wpmag.ru/wp-content/uploads/2014/01/wordpress-custom-fields.png?fit=300×93 300w, https://wpmag.ru/wp-content/uploads/2014/01/wordpress-custom-fields.png?fit=768×238 768w, https://wpmag.ru/wp-content/uploads/2014/01/wordpress-custom-fields.png?fit=1024×317 1024w, https://wpmag.ru/wp-content/uploads/2014/01/wordpress-custom-fields.png?fit=1536×476 1536w, https://wpmag.ru/wp-content/uploads/2014/01/wordpress-custom-fields.png?fit=2048×634 2048w» sizes=»(max-width: 2164px) 100vw, 2164px»/>

Работа с произвольными полями в WordPress

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

Напоминаем вам, что WP_Query это один из основных API в WordPress. Данный класс позволяет обращаться к базе данных WordPress и получать статьи, страницы и произвольные типы данных. В данной статье мы рассмотрим параметры к классу WP_Query , которые отвечают за работу с мета-данными.

Параметр meta_query

Основным параметром для работы с мета-данными в WP_Query является meta_query , который реализован классом WP_Meta_Query . Параметр meta_query — это массив, где каждый элемент является в свою очередь массивом с параметрами мета-запроса. Рассмотрим простой пример:

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

Как видно из примера, meta_query содержит массив с одним элементом, который указывает ключ и значение произвольного поля с помощью key и value . Данный пример вернет записи, которые мы опубликовали в хорошем настроении.

Каждый массив в meta_query может содержать следующие элементы:

  • key — это ключ (или имя) нашего произвольного поля
  • value — значение произвольного поля, строкой или массивом
  • compare — тип сравнения, например: = , != , > , >= , , , LIKE , NOT LIKE , IN , NOT IN , BETWEEN , NOT BETWEEN , EXISTS , NOT EXISTS
  • type — тип значения, например: NUMERIC , BINARY , CHAR , DATE , DATETIME , DECIMAL , SIGNED , TIME , UNSIGNED

Рассмотрим еще один пример с использованием чисел и другого типа сравнения:

Здесь мы запрашиваем у WP_Query записи произвольного типа property , где значение произвольного поля price меньше или равно 50,000.

Важно отметить, что все значения произвольных полей в WordPress имеют текстовый тип, а значение параметра type позволяет преобразовать все значения в требуемый тип перед сравнением. В нашем случае это число ( NUMERIC ).

Читайте также:  Linux mint нет спящего режима

Несколько запросов meta_query

Как мы уже упомянули, параметр meta_query является массивом массивов, что позволяет легко указать более одного запроса или условия. Например:

Данный запрос вернет записи типа product у которых в произвольных полях указан красный цвет и размер XL. По умолчанию в meta_query запросы будут производиться с оператором «и», а не «или», но это легко изменить с помощью аргумента relation :

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

Сортировка с помощью произвольного поля

Часто при работе с мета-данными в WordPress приходится учитывать их при сортировке результатов. За это в классе WP_Query отвечает параметр orderby , где можно указать:

  • meta_value — сортировать по значению мета-поля
  • meta_value_num — сортировать по численному значению мета-поля
  • для сортировки по дате, заголовку и другим полям см. нашу статью

При использовании значений для сортировки по произвольным полям необходимо в параметрах к WP_Query так же указать ключ для сортировки с помощью аргумента meta_key . Простой пример вывода автомобилей по их цене по возрастанию:

Более сложный пример: вывод красных автомобилей мощностью от 100 до 150 лошадиных сил, и сортировка по цене по убыванию:

Производительность meta_query

Параметр meta_query действительно позволяет делать многое с произвольными полями в WordPress, но не стоит забывать о производительности, особенно если речь идет о большом количестве данных и о сложных запросах с мета-полями.

Поле meta_value таблицы wp_postmeta в базе данных MySQL не имеет индекса из-за его типа LONGTEXT . Но даже если бы был индекс, пользы от него было бы мало, поскольку запросы с meta_query используют MySQL функцию CAST для перевода типа данных при поиске, а присутствие подобной функции в запросе значит, что индекс использован не будет.

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

Если у вас остались вопросы по работе с произвольными полями в WP_Query , оставьте комментарий и мы обязательно вам ответим.

Константин Ковшенин 07.01.2014 21.10.2014

Сооснователь журнала WP Magazine и первой конференции WordCamp в России. Работал в Automattic, WordPress.com, WooCommerce. Принимает активное участие в развитии ядра WordPress. Любимый язык программирования: Python.

Подписаться на рассылку

Подписаться → Подпишитесь на бесплатную рассылку журнала WP Magazine и получайте новости, события, подборки тем и плагинов, уроки, советы и многое другое в мире WordPress!

Читайте также

Вебинары на WordPress.com

Вебинары на WordPress.com

Как добавить заголовок Sender в wp_mail()

Contributor Day после WordCamp SF 2013

WordPress Meetup в Санкт-Петербурге пройдет 14 октября

Локальный сервер для WordPress за 5 минут с VVV, VirtualBox и Vagrant

Раз в неделю, только все самое новое про WordPress и никакого спама!

Читайте также:  Как работает принтер самсунг scx 3200

Поиск по сайту

Бесплатная книга

Как защитить свой сайт от хакеров? Читайте в нашей электронной книге.

Вакансии

  • WordPress разработчик в компанию Grooni
  • Web-разработчик со знанием WordPress в Pravmir.ru
  • Ведущий WordPress-программист в компанию UpSolution
  • WordPress-ниндзя в команду Pressjitsu
  • WordPress разработчик в компанию Automattic

Ищете крутую тему для WordPress? Попробуйте Maker от ThemePatio:

Источник

Сортируемые колонки в админке

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

В качестве произвольного поля я взял количество просмотров записи, ну, и если вы кликнете по заголовку таблицы «Количество просмотров», то посты соответственно будут сортироваться по возрастанию или убыванию просмотров (если кликнуть второй раз).

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

Также хочу порекомендовать вам свой видеокурс по созданию темы WordPress на основе готовой HTML-вёрстки ⚡️

1. Добавление колонки

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

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

2. Делаем колонку сортируемой

А вот нам придётся познакомиться с хуком manage__sortable_columns , значение для страницы записей будет edit-post , а значит и хук примет вид manage_edit-post_sortable_columns . Чтобы узнать можете воспользоваться функцией get_current_screen().

Или можете например воспользоваться таблицей:

Экран Хук
Записи manage_edit-post_sortable_columns
Страницы manage_edit-page_sortable_columns
Произвольные типы постов manage_edit-<тип поста>_sortable_columns
Рубрики manage_edit-category_sortable_columns
Метки manage_edit-post_tag_sortable_columns
Произвольные таксономии manage_edit-<таксономия>_sortable_columns
Библиотека файлов manage_upload_sortable_columns
Комментарии manage_edit-comments_sortable_columns
Пользователи manage_users_sortable_columns

Суть легка – в массив сортируемых колонок добавляем нашу:

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

3. Сортируем посты

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

  • Вам не нужно писать этот код для стандартных значений параметра orderby , например, если вы хотите отсортировать пользователей по дате их регистрации, то скипаем смело этот шаг.
  • Фильтр pre_get_posts у нас сработает для любых типов постов – записей, страниц, библиотеки файлов и любых произвольных.
  • Для пользователей можете использовать pre_get_users .
  • Для комментариев pre_get_comments .
  • Для рубрик, меток и таксономий – pre_get_terms .

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

Ну и ещё раз то, что у нас получилось:

Впервые познакомился с WordPress в 2009 году. Организатор и спикер на конференциях WordCamp. Преподаватель в школе Нетология.

Пишите, если нужна помощь с сайтом или разработка с нуля.

Источник

Сортировка по произвольному полю (WordPress)

Рассмотрим, как отсортировать по произвольному полю (ACF) в WordPress. Для примера будем использовать select, но здесь нет разницы какие элементы форм использовать.

Какие шаги необходимо предпринять:

Создание произвольного поля

Пусть произвольное поле будет цена — будем сортировать по нему (по возрастанию и убыванию).

HTML-разметка фильтра сортировки

Начнём с простой HTML-разметки, далее сделаем её динамической, т.е. будем проверять какой тип сортировки в текущий момент выбран.

Вывод товаров

Пусть у нас есть таксономия «Товары» my_product и таксономия «Категории товаров» my_product_category .

Выведем товары с сортировкой по умолчанию (ASC). Для упрощения, как уже говорил выше, после того как у нас всё выведется по умолчанию, только тогда мы добавим динамики.

Обратите внимание, мы сортируем по произвольному полю ACF price.

Пагинация. Более подробно о создании пагинации можно прочитать в этой статье — Пагинация в WordPress без плагинов.

Доработка формы фильтра

Если все вышеописанные шаги у вас не вызвали проблем и всё успешно работает, добавим динамики.

При отправке формы и перезагрузке страницы мы увидим хвосты в URL — GET-параметры. Будем добавлять атрибут checked выбранному select option :

Вывод товаров для выбранной сортировки

Осталось получить и добавить текущее значение сортировки в запрос WP_Query.

Отправка формы при выборе option

Можно добавить автоматическую отправку формы при выборе какого-либо option:

На этом на сегодня всё. Может пригодиться:

  • Шпаргалка по работе с WordPress.
  • Шпаргалка по работе с ACF.

Надеюсь, вам понравилась данная информация. Если вам интересна тема web-разработки, то можете следить за выходом новых статей в Telegram.

Источник

Сортировка записей по произвольным полям в консоли управления WordPress

В прошлый раз мы говорили о том как немного упростить жизнь контент-менеджера с помощью фильтрации по таксономиям списка записей WordPress. Сегодня мы пойдём дальше, добавим в список записей колонку со значениями из произвольных полей (custom fields) и сделаем по этим данным сортировку записей.

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

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

Формулируем задачу.

Имеется тип данных (CPT) — portfolio с несколькими записями, каждая из которых содержит произвольное поле price с числовым значением. Необходимо в листинге записей вывести колонку с ценами с возможностью сортировки по-возрастанию и убыванию относительно значений price. Говоря проще, контент-менеджер должен иметь возможность сортировки записей от дешёвых к дорогим и наоборот.

1. Регистрируем в WordPress новую колонку с помощью хука manage_edit-$_columns. Где $ — это тип данных, для которого мы регистрируем новую колонку. В нашем примере для portfolio — manage_edit- portfolio _columns. В $columns[‘price’] мы задаём заголовок колонке, в нашем случае это «Цена».

2. Выводим в созданную колонку мета-данные из произвольного поля «price».

3. Делаем сортировку с помощью фильтра manage_<$screen->id>_sortable_column. Где <$screen->id> в нашем случае edit-portfolio. Чтобы сделать невозможной дефолтную сортировку по дате, расскоментируйте строку unset($columns[‘date’]);

4. Новая сортировка по умолчанию.

Конечно, это самый простой и примитивный пример, который скорее даст лишь общие представления о работе с контентом в WordPress и покажет некоторые способы упрощения управления им.

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

Источник

КомпСовет