✅ WEB і WordPress новини, теми, плагіни. Тут ми ділимося порадами і кращими рішеннями для сайтів.

Програмне створення вмісту із записів форм Gravity

15

Ця публікація допоможе вам створити будь-який вміст (користувачі, публікації чи щось інше на замовлення) на основі записів у формі Gravity Forms. Ми додамо область на екрані деталей запису в адміністраторі для створення вмісту на основі наданої інформації.

Що ми зробимо

Ми створимо нове метабокс на екрані даних форми Gravity Form. У це метабокс ми додамо кнопку. Ідея полягає в тому, що кінцевий користувач може переглянути запис і, якщо він схвалить деталі запису, він може натиснути кнопку, щоб розпочати створення вмісту.

Програмне створення вмісту із записів форм Gravity

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

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

Ідентифікація полів

Перше, що ми маємо розглянути, це те, як визначити поля. Іншими словами, нам потрібно знати, яке поле є чим. Майте на увазі, що значення запису в Gravity Forms посилаються на їхні ідентифікатори полів форми. І навіть маючи доступ до інформації про кожне поле форми, нам потрібен надійний спосіб знати, які поля є якою інформацією. Форма може складатися з чотирьох текстових вводів – нам потрібно знати, який із чотирьох текстових вводів призначено для імені.

Тут у вас є кілька альтернатив. Ви можете жорстко закодувати ідентифікатори полів (наприклад, визначити, що поле ID 2 є прізвищем), але це дуже схильне до помилок і не рекомендується. Простим способом є використання одного з наявних вхідних даних поля в Gravity Forms, наприклад ім’я класу CSS. Але майте на увазі, що кінцевий користувач може надати кілька імен класів, щоб отримати потрібний стиль, і ваш код може легко зламатись, якщо ви неправильно розберете цей рядок. Спосіб, який я однозначно рекомендую, це додавання власних власних вводів до полів:

Якщо вам потрібен надійний метод ідентифікації полів для вашого коду, обов’язково перевірте, як це зробити в публікації вище. Але для простоти в цьому дописі я використаю клас CSS і припустимо, що користувач не введе нічого, крім значень, які нам потрібні в цій області.

Налаштування форми

Першим кроком є ​​налаштування форми з потрібними полями та типами полів. Потім ви вставляєте ідентифікатори полів у правильні місця. Як приклад у мене така форма:

Програмне створення вмісту із записів форм Gravity

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

Програмне створення вмісту із записів форм Gravity

Тепер давайте перейдемо до коду та того, як створити функціональність, яка перетворює подання на власний вміст.

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

Першим кроком є ​​додавання певного тригера дії для створення нашого спеціального вмісту. Природне місце знаходиться на екрані деталей запису. Це дозволяє кінцевому користувачеві переглядати подані значення, а потім вирішувати, чи створювати з них вміст чи ні. 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

Зараз при натисканні на кнопку нічого не відбувається. Це просто тому, що ми ще не написали жодного коду для його прослуховування.

Вилучення значень із запису

Як згадувалося раніше, усі подані значення в масиві записів ідентифікуються за їхніми ідентифікаторами полів.

Програмне створення вмісту із записів форм Gravity

На зображенні вище поле ID 1 призначене для імені, ID 2 – для прізвища тощо. Але почекайте – що відбувається з 5.1, 5.3 і так далі? У Gravity Forms ми отримуємо «суб-ідентифікатори» для спеціального поля, яке приймає кілька значень. Я додав поле адреси до своєї форми, яке є одним полем, але містить кілька вхідних даних. Кожен вхід у цьому полі отримує власні ідентифікатори, додані до основного ідентифікатора і крапка. Якщо ви не використовуєте жодне з цих полів із кількома введеннями, чудово! Код стає дуже простим. Але я включив це спеціальне поле, щоб ми могли бачити, як до нього отримати доступ.

Зараз наша проблема полягає в тому, що код не знає, для чого призначені поля ID 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. В іншому випадку ми повертаємо ID користувача.

Повернувшись до нашого рендеру метабокса, ми тепер можемо умовно додати повідомлення кінцевому користувачеві на основі результату цього. Це простий приклад; якщо повернуто значення -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, щоб покращити ваш досвід. Ми припустимо, що з цим все гаразд, але ви можете відмовитися, якщо захочете. Прийняти Читати далі