Как Работают Расширенные Настраиваемые Поля В Wordpress



Часть 1. Немного текстов Чаще всего в сети публикуются материалы по начальному уровню работы с Wordpress. В лучшем случае обсуждаются документированные возможности самого Wordpress и различных его плагинов.

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

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

Advanced Custom Fields (ACF) — один из популярных плагинов WordPress. Основная задача — создание блоков дополнительной информации для Постов, Страниц и Товаров.

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

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

Он имеет встроенную возможность отображать редактирование статьи во внешнем интерфейсе.

Позволяет создавать поля на основе условий и связывать поля с нужными сообщениями.

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

категорию и потребовать ее заполнения.

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

найти на официальном сайте .

Для тех, кто еще не освоил иностранные языки, есть хорошая сайт с документацией на русском языке .

В моем случае не было достаточно документированных инструментов и мне пришлось иметь дело с устройством ACF.



Часть 2. Получение полей ACF

Итак, от прелюдии к действию.

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

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

Например, в категории «Фрукты» появляется поле «Разновидность», а в категории «Телефоны» — поле «Бренд» и так далее.

Если работать через административную панель, то задача тривиальна.

Но у вашего менеджера есть ограничения — его никто не собирался пускать в административную панель.

Поэтому функционал административной панели у вас отключен.

Стандартная функциональность ACF не предоставляет возможности запроса по условиям.

Поля отображаются вместе с идентификатором сообщения.

Это связано с особенностями сохранения в базе данных.

Условие «Категория товара» не привязано к сохраняемой информации.

Поэтому начинаем искать поля и условия.

Самая популярная таблица базы данных — записи, что обусловлено широким набором инструментов, разработанных для этой таблицы.

Здесь хранятся наши поля.

Для полей ACF зарезервировано два типа записей — в столбце «post_type» мы находим поля типов «acf-field-group» и «acf-field».

Первый тип записей, как следует из названия, отвечает за группу полей, второй тип записей отвечает непосредственно за поле.

Связь между ними происходит через поле post_parent.

Как работают расширенные настраиваемые поля в Wordpress

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

Мы не планировали оформлять поля списком, тем более что это наша основная задача — оформлять поля по условию.

Вся необходимая нам информация содержится в столбце post_content.

Как работают расширенные настраиваемые поля в Wordpress

Он хранит условия и значения в формате сериализованного массива.

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

  
  
   

a:12:{s:8:"location";a:1: {i:0;a:1: {i:0;a:3 {s:5:"param";s:13:"post_taxonomy";s:8:"operator";s:2:"==";s:5:"value";s:27:"product_cat:fruit";} } } s:8:"position";s:6:"normal";s:5:"style";s:7:"default";s:15:"label_placement";s:4:"left";s:21:"instruction_placement";s:5:"label";s:14:"hide_on_screen";s:0:"";s:11:"description";s:0:"";s:18:"acfe_display_title";s:0:"";s:13:"acfe_autosync";s:0:"";s:9:"acfe_form";i:0;s:9:"acfe_meta";s:0:"";s:9:"acfe_note";s:0:""; }

Вы будете проверять по своим условиям, для понимания всей этой ерунды выделю важные в этой сфере моменты:

s:5:"param";s:13:"post_taxonomy";s:8:"operator";s:2:"==";s:5:"value";s:27:"product_cat:fruit";

Вот вся информация, которая нам нужна:
  • параметр условия «post_taxonomy»;
  • значение согласно условию должно быть "==";
  • ну и само значение «product_cat:fruit»;
Теперь мы знаем, какую группу полей нам нужно использовать, можно перейти к самим полям.

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

Вернемся к данным поля post_content, теперь наши данные выглядят немного иначе:

a:10: {s:4:"type";s:4:"text";s:12:"instructions";s:0:"";s:8:"required";i:1;s:17:"conditional_logic";i:0;s:7:"wrapper";a:3: {s:5:"width";s:0:"";s:5:"class";s:0:"";s:2:"id";s:0:"";} s:13:"default_value";s:0:"";s:11:"placeholder";s:0:"";s:7:"prepend";s:0:"";s:6:"append";s:0:"";s:9:"maxlength";s:0:"";}

Здесь для нас упакована информация, относящаяся к отображаемому полю:

  • тип поля – «текст»;
  • обязательный – «обязательный»;
  • класс, длина, значение по умолчанию, заполнитель и т. д.
Теперь получив эту информацию, мы можем приступить к созданию нашего запроса и передаче полей во фронтенд. То есть при выборе категории мы отправляем запрос в базу данных, находим группу полей по условиям, выбираем поля и готовим форму.



Часть 3. Сохранение информации

Но остается еще один вопрос – что делать с полученной информацией? Поэтому нам необходимо понять, как хранится информация ACF. Для дополнительной информации и возможных настроек поста в Wordpress предусмотрена специальная таблица мета-постов.

В нем хранится самая разнообразная информация и, конечно, разработчики ACF воспользовались этой возможностью.

Но следует отметить, что они не использовали прямой подход. Типичная запись в таблице postmeta состоит из 4 полей — уникальный ключ в базе данных (порядковый номер записи), ID поста, с которым связано поле, идентификатор (по которому разработчик получает поле с помощью метода get_post_meta( ) функция) и значение.

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

Но разработчики ACF разделили задачу на две составляющие: При сохранении данных ACF делается запись с именем и значением поля.



Как работают расширенные настраиваемые поля в Wordpress

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




Вот и все.

Надеюсь, что полученные знания помогут вам в вашем развитии.

Всем удачи! Теги: #backend #php #MySQL #бэкэнд-программирование #разработка #wordpress #CMS #плагины WordPress #плагин #acfs #бэкэнд-разработка

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.