Вопрос или проблема
В настоящее время я разрабатываю небольшой портал на WordPress для клиента, где пользователям необходимо отправлять формы (созданные с помощью Gravity Forms). Я хотел бы иметь возможность сохранять данные из этих форм после подачи в пользовательскую базу данных, которую я создал в phpmyadmin. У меня все таблицы и структура настроены, но я не знаю, как передать данные.
Я знаю, что в конечном итоге мне нужно использовать хуки ‘gform_after_submission’, но не знаю, с чего начать.
Спасибо!
Вы можете использовать что-то вроде следующего. В основном, после отправки формы мы получаем данные $entry
, извлекаем значения, которые нам нужны (в примере $val1, $val2, $val3
), затем вставляем эти данные в пользовательскую таблицу с помощью $wpdb
:
add_action('gform_after_submission', 'save_to_my_custom_table', 10, 2);
function save_to_my_custom_table($entry, $form)
{
global $wpdb;
// обновите имя вашей таблицы (это предполагает, что таблица находится в той же базе данных, что и другие wp таблицы)
$tablename = $wpdb->prefix . "my_custom_tablename";
// извлекаем значения из записи
$val1 = rgar( $entry, '1' );
$val2 = rgar($entry, '2');
$val3 = rgar($entry, '3');
// базовая вставка
$sql = "INSERT INTO `$tablename` (`val1`,`val2`, `val3`) values (%s, %s, %d)";
// используем подготовленный оператор
$stmt = $wpdb->prepare($sql, $val1, $val2, $val3);
// выполняем запрос
$wpdb->query($stmt);
}
Если вы хотите подключиться к базе данных, полностью отличной от приложения WP, я думаю, вам стоит рассмотреть возможность настройки API для связи между ними. В этом случае вы все равно можете подойти к этому очень похоже. См. ниже:
add_action('gform_after_submission', 'save_to_my_custom_table', 10, 2);
function save_to_my_custom_table($entry, $form)
{
global $wpdb;
// обновите имя вашей таблицы (это предполагает, что таблица находится в той же базе данных, что и другие wp таблицы)
$tablename = $wpdb->prefix . "my_custom_tablename";
// извлекаем значения из записи
$val1 = rgar( $entry, '1' );
$val2 = rgar($entry, '2');
$val3 = rgar($entry, '3');
// отправляем POST запрос к API для другой базы данных
$endpoint="api.example.com";
$body = [
'val1' => $val1,
'val2' => $val2,
'val3' => $val3,
];
$body = wp_json_encode( $body );
$options = [
'body' => $body,
'headers' => [
'Content-Type' => 'application/json',
],
'timeout' => 60,
'redirection' => 5,
'blocking' => true,
'httpversion' => '1.0',
'sslverify' => false,
'data_format' => 'body',
];
wp_remote_post( $endpoint, $options );
}
Ответ или решение
Чтобы хранить данные форм, собранные с помощью плагина Gravity Forms, в базе данных, созданной с помощью phpMyAdmin, вам нужно использовать хук gform_after_submission
. Этот хук срабатывает сразу после того, как форма отправлена и позволяет вам выполнять дополнительные действия, такие как запись данных в пользовательскую таблицу. Ниже приведены шаги и пример реализации этого процесса.
Шаг 1: Создание пользовательской таблицы
Прежде всего, убедитесь, что у вас есть таблица для сохранения данных. Например, вы можете создать таблицу с именем my_custom_tablename
с такими полями, как id
, val1
, val2
и val3
.
CREATE TABLE my_custom_tablename (
id INT AUTO_INCREMENT PRIMARY KEY,
val1 VARCHAR(255),
val2 VARCHAR(255),
val3 INT
);
Шаг 2: Использование хука gform_after_submission
Добавьте следующий код в файл functions.php вашей темы или в специальный плагин. Этот код сохранит данные формы в вашей пользовательской таблице.
add_action('gform_after_submission', 'save_to_my_custom_table', 10, 2);
function save_to_my_custom_table($entry, $form)
{
global $wpdb;
// Укажите вашу таблицу (это предполагает, что таблица находится в той же базе данных, что и другие таблицы WP)
$tablename = $wpdb->prefix . "my_custom_tablename";
// Извлечение значений из сущности entry
$val1 = rgar($entry, '1'); // Замените '1' на ID поля формы
$val2 = rgar($entry, '2'); // Замените '2' на ID поля формы
$val3 = rgar($entry, '3'); // Замените '3' на ID поля формы
// SQL запрос на вставку данных
$sql = "INSERT INTO `$tablename` (`val1`, `val2`, `val3`) VALUES (%s, %s, %d)";
// Подготовка запроса
$stmt = $wpdb->prepare($sql, $val1, $val2, $val3);
// Выполнение запроса
$wpdb->query($stmt);
}
Шаг 3: Проверка и отладка
После того как вы добавили данный код, можете протестировать форму, чтобы убедиться, что данные правильно сохраняются в вашей таблице. Откройте phpMyAdmin, выберите вашу базу данных и проверьте содержимое таблицы my_custom_tablename
.
Альтернативный вариант: Использование API
Если вы хотите сохранить данные в базе данных, которая не связана с вашей установкой WordPress, вы можете настроить API для обмена данными между сайтами.
Пример отправки данных через API выглядит следующим образом:
add_action('gform_after_submission', 'send_api_request', 10, 2);
function send_api_request($entry, $form)
{
// Сбор данных
$val1 = rgar($entry, '1');
$val2 = rgar($entry, '2');
$val3 = rgar($entry, '3');
// Конфигурация API
$endpoint = "https://api.example.com";
$body = json_encode(['val1' => $val1, 'val2' => $val2, 'val3' => $val3]);
$options = [
'body' => $body,
'headers' => ['Content-Type' => 'application/json'],
'timeout' => 60,
'blocking' => true,
];
// Отправка POST-запроса
wp_remote_post($endpoint, $options);
}
Заключение
Используя предоставленный код, вы сможете эффективно сохранять данные форм Gravity Forms в вашей пользовательской таблице MySQL, управляемой через phpMyAdmin. Убедитесь, что вы протестировали функциональность и отладили код для надёжного сохранения данных. Если у вас возникли дополнительные вопросы или вам нужна помощь с конкретными ошибками, не стесняйтесь обращаться за помощью в сообщество WordPress или к эксперту в области веб-разработки.