✅ Новости WEB и WordPress, темы, плагины. Здесь мы делимся советами и лучшими решениями для веб-сайтов.

Программное создание контента из записей Gravity Forms

30

Этот пост расскажет вам, как создавать любой контент (пользователей, посты или что-то другое) на основе записей в форме Gravity Forms. Мы добавим область на экране сведений о записи в админке для создания контента на основе предоставленной информации.

Что мы сделаем

Мы создадим новый метабокс на экране сведений о входе в Gravity Form. В этом метабоксе мы добавим кнопку. Идея состоит в том, что конечный пользователь может просмотреть запись и, если он одобрит детали записи, он может нажать кнопку, чтобы инициировать создание контента.

Программное создание контента из записей Gravity Forms

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

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

Идентификация полей

Первое, что мы должны сделать, это как идентифицировать поля. Другими словами, нам нужно знать, какое поле является чем. Имейте в виду, что значения записи в Gravity Forms относятся к их идентификаторам полей формы. И даже с доступом к информации о каждом поле формы — нам нужен верный способ узнать, какие поля содержат какую информацию. Форма может состоять из четырех вводов текста — нам нужно знать, какой из четырех вводов текста предназначен для имени.

У вас есть несколько альтернатив здесь. Вы можете жестко закодировать идентификаторы полей (например, определить, что идентификатор поля 2 является фамилией), но это очень подвержено ошибкам и не рекомендуется. Простым способом является использование одного из существующих входных данных поля в Gravity Forms, например, имя класса CSS. Но имейте в виду, что конечный пользователь может указать несколько имен классов, чтобы получить желаемый стиль, и ваш код может легко сломаться, если вы неправильно разберете эту строку. Способ, который я определенно рекомендую, – это добавлять свои собственные пользовательские данные в поля:

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

Настройка формы

Первым шагом является, естественно, настройка формы с полями и типами полей, которые вам нужны. Затем вы вставляете идентификаторы полей на свои места. В качестве примера у меня есть эта форма:

Программное создание контента из записей Gravity Forms

И для каждого поля, которое я хочу включить, я предоставляю собственный класс CSS, на который я могу ориентироваться в своем коде. Например, для имени;

Программное создание контента из записей Gravity Forms

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

Добавление метабокса в сведения о записи

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

Чтобы создать собственный метабокс для ввода сведений, мы можем использовать фильтр gform_entry_detail_meta_boxes. Это фильтр, который возвращает массив всех метабоксов для отображения в деталях записи. Мы просто добавляем новый элемент массива, чтобы создать новый метабокс, и определяем функцию обратного вызова для отображения его содержимого. Мы устанавливаем хороший описательный заголовок в ‘ title‘ и определяем его положение, чтобы оно отображалось в ‘ side‘.

И затем нам нужно определить функцию обратного вызова: awp_gf_create_user_metabox_render()в нашем коде. Эта функция отвечает за рендеринг содержимого метабокса. В качестве параметра этой функции мы получаем массив аргументов, в котором мы можем получить форму и объект ввода;

function awp_gf_create_user_metabox_render($args) { $form = $args['form']; // Form array. Here we find all the fields in $form['fields'] $entry = $args['entry']; // Entry array. Here we find all values in this current submission $render = ''; echo $render; }

Все, что нам нужно сделать в этой функции, — создать некоторый HTML и вывести его.

Что касается добавления кнопки для запуска действия, мы будем следовать тому же методу, что и сама Gravity Forms. Существует элемент формы, обертывающий весь экран сведений о записи, и все, что нам нужно сделать, это добавить событие onclick к кнопке отправки, которое изменит actionсвойство ‘ ‘. Мы определяем собственное имя пользовательского действия, чтобы знать, когда оно было запущено, и оно не конфликтует с действиями Gravity Forms.

Давайте назовем наше пользовательское действие ‘ awp_gf_create_user‘ и отобразим кнопку отправки с событием onclick следующим образом:

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

Программное создание контента из записей Gravity Forms

Сейчас ничего не происходит при нажатии на кнопку. Это просто потому, что мы еще не написали никакого кода для его прослушивания.

Извлечение значений из записи

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

Программное создание контента из записей Gravity Forms

На изображении выше поле ID 1 предназначено для имени, ID 2 — для фамилии и так далее. Но подождите – что происходит с 5.1, 5.3 и так далее? В Gravity Forms мы получаем «вспомогательные идентификаторы» для специального поля, которое принимает несколько значений. Я добавил в свою форму адресное поле, которое представляет собой одно поле, но несколько входов. Каждый вход в этом поле получает свои собственные идентификаторы, добавленные к основному идентификатору. и точка. Если вы не используете ни одно из этих полей с несколькими входами, отлично! Код становится очень простым. Но я включил это специальное поле, чтобы мы могли увидеть, как получить к нему доступ.

Сейчас наша проблема в том, что код не знает, для чего предназначены поля с идентификаторами 1, 2 или 3. Эта информация содержится в массиве форм, точнее в $form['fields']элементе. Этот элемент содержит все поля формы, и у нас есть полный доступ к каждому объекту поля. Именно здесь мы можем найти выбранный нами метод идентификации; в моем примере cssClass.

Мы можем просто перебирать эти поля и искать идентификаторы, которые мы хотим извлечь. Я помещу все свои идентификаторы в массив, и мы сможем просто проверить, является ли поле в цикле одним из них.

Но сначала нам нужно знать, что кнопка была нажата. Это довольно просто; мы можем просто проверить, находится ли наше пользовательское действие в $_POSTмассиве. Но поскольку мы работаем с Gravity Forms, мы можем использовать файлы [rgpost](https://docs.gravityforms.com/rgpost/)(). Функция Gravity Forms rgpost()просто возвращает значение запроса POST. Проверка rgpost('awp_gf_create_user')и $_POST['awp_gf_create_user']точно такая же. Но мы будем использовать функцию Gravity Forms.

В строке #8мы определяем массив со всеми пользовательскими идентификаторами, которые мы хотим найти. Это все значения, которые я ввел как класс CSS в своей форме. Затем в цикле для каждого поля мы проверяем, является ли поле одним из этих идентификаторов. В моем примере я использую класс CSS для идентификации полей, но я рекомендую использовать настраиваемые входные данные. Этот код также не будет работать, если задано несколько классов CSS.

Затем в строке #12мы добавляем новый элемент в наш окончательный массив значений с идентификатором в качестве ключа. Затем мы используем идентификатор поля и ссылаемся на массив записей. В конце этого цикла $valuesдолжны быть заполнены любые представленные значения, которые имеют отношение. Любые поля, оставленные пустыми или не включенные в массив идентификаторов, будут исключены.

Если вы добавили специальное множественное поле ввода, вам нужно будет добавить дополнительный код, чтобы правильно ссылаться на дополнительные идентификаторы. Я знаю, что awp_addressэто тип поля адреса. Типы адресных полей в Gravity Forms следуют фиксированному шаблону дополнительных идентификаторов, и я включил только три возможных ввода (уличный адрес 1 имеет дополнительный идентификатор 1, почтовый индекс имеет дополнительный идентификатор 3, а город имеет дополнительный идентификатор 5). Чтобы обрабатывать такие поля, нам нужно сделать что-то вроде этого:

В строке #4я объединяю все значения, так что конечная строка представляет собой стандартизированный однострочный формат адреса («, «).

Теперь у нас есть все необходимые значения, красиво отсортированные по ключам-идентификаторам в массиве $values. То, что вы будете делать с этим, полностью зависит от вас и потребностей вашего проекта. Но я приведу пример создания пользователя в WordPress.

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

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

Затем мы просто определяем awp_gf_create_user()функцию. Я приведу простой пример программного создания пользователя в WordPress. Это просто предназначено в качестве примера, чтобы показать, как использовать извлеченные значения.

Сначала мы проверяем, существует ли пользователь с данным адресом электронной почты с расширением [get_user_by](https://developer.wordpress.org/reference/functions/get_user_by/)(). Если нет, мы используем [wp_insert_user](https://developer.wordpress.org/reference/functions/wp_insert_user/)(), чтобы добавить пользователя. Я также включил пример хранения пользовательских метаданных пользователя (поле нашего адреса). Наконец, наш метод должен вернуть результат создания пользователя. Если пользователь уже существовал, мы возвращаем -1. В противном случае мы возвращаем идентификатор пользователя.

Вернувшись к нашему рендерингу метабокса, мы теперь можем условно добавить сообщение конечному пользователю на основе результата этого. Это простой пример; если возвращенное значение равно -1, пользователь с указанным адресом электронной почты уже существует. И если возвращаемое значение больше 0, мы знаем, что пользователь успешно создан. Таким образом, мы выводим сообщение о том, что создание пользователя прошло успешно.

Избегайте дублирования контента

Простой пример выше наследственно отключит создание нескольких пользователей из одной и той же записи, потому что он проверяет, существует ли уже пользователь с указанным адресом электронной почты. Но в других случаях у вас может не быть такой возможности. Таким образом, еще одна стратегия, позволяющая избежать создания конечными пользователями дублирующегося контента из одной и той же записи, — это добавление метаданных пользовательской записи. Другими словами; если действие было успешным, мы добавляем к этой записи пользовательскую мета. А затем мы просто проверяем, существует ли эта пользовательская мета, прежде чем начать действие.

Gravity Forms предлагает методы добавления пользовательских метаданных к записям; [gform_add_meta](https://docs.gravityforms.com/gform_add_meta/)()а также получение значений: [gform_get_meta](https://docs.gravityforms.com/gform_get_meta/)().

В строке #4мы получаем нашу пользовательскую мета-запись. Если он существовал (не пустой), мы устанавливаем сообщение, информирующее конечного пользователя о том, что он или она уже пытались создать контент из этой записи ранее. Если пользовательская мета не существует, мы продолжаем создавать наш контент. Когда контент был успешно создан, нам нужно добавить пользовательскую мета к записи (строка #10).

Заключение и окончательный код

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

И вот окончательный код:

Источник записи: awhitepixel.com

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