Всем привет! Не буду тратить время на лишние вводные слова, а сразу перейду к сути. В этой небольшой статье я поделюсь своим опытом интеграции WordPress с CRM-системами.
Часто клиенты хотят, чтобы данные, собранные с контактных форм, автоматически отправлялись в их CRM. Так как же реализовать это в WordPress? Давайте разберемся.
Лично мне встречались три типа форм, которые используются в WordPress: формы, созданные с помощью плагина Contact Form 7, формы, разработанные в Elementor, и самописные формы, работающие на AJAX. В редких случаях может возникнуть необходимость в интеграции с WooCommerce.
Сontact Form 7
<?php
add_action('wpcf7_before_send_mail', 'custom_wpcf7_before_send_mail');
function custom_wpcf7_before_send_mail($contact_form) {
// Получаем данные формы
$submission = WPCF7_Submission::get_instance();
if ($submission) {
$data = $submission->get_posted_data(); // Получаем данные формы
// Доступ к данным формы
$name = isset($data['your-name']) ? $data['your-name'] : ''; // Замените 'your-name' на имя вашего поля
$email = isset($data['your-email']) ? $data['your-email'] : ''; // Замените 'your-email' на имя вашего поля
// Отправка данных на внешний сервис
$response = wp_remote_post('https://example.com/api', array(
'method' => 'POST',
'body' => json_encode(array(
'name' => $name,
'email' => $email,
)),
'headers' => array(
'Content-Type' => 'application/json',
),
));
// Проверка ответа
if (is_wp_error($response)) {
// Обработка ошибки
error_log('Ошибка отправки данных на внешний сервис: ' . $response->get_error_message());
} else {
// Обработка успешного ответа
error_log('Данные успешно отправлены на внешний сервис');
}
}
}
Тут все просто. Мы перехватываем POST данные через хук wpcf7_before_send_mail.
Мы можем проанализировать что конкретно отправляется в форме и подставить свои значения.
Elementor
<?php
add_action('elementor_pro/forms/new_record', function($record, $handler) {
// Получаем данные формы
$raw_data = $record->get( 'fields' );
// Форматируем данные для отправки
$data_to_send = [];
foreach ( $raw_data as $key => $value ) {
// Здесь вы можете добавить фильтрацию или проверку
$data_to_send[$key] = sanitize_text_field($value);
}
// Теперь отправьте данные на ваш сервис статистики
$response = wp_remote_post('https://your-stats-service.com/api/endpoint', [
'method' => 'POST',
'body' => json_encode($data_to_send),
'headers' => [
'Content-Type' => 'application/json',
],
]);
// Обработка ответа
if ( is_wp_error( $response ) ) {
// Логирование ошибки или другие действия
} else {
// Данные успешно отправлены
}
// Сохраняем данные в сессии или делаем другие операции, если нужно
}, 10, 2 );
Тут примерно тоже самое что и первом варианте.
Elementor предоставляет хук elementor_pro/forms/new_record, который позволяет вам перехватывать данные формы сразу после их отправки, но перед тем, как они будут обработаны. Вы можете использовать этот хук в вашем файле functions.php вашей темы.
WordPress и AJAX
<?php
// Обработка AJAX-запроса
add_action('wp_ajax_my_form_submission', 'handle_my_form_submission');
add_action('wp_ajax_nopriv_my_form_submission', 'handle_my_form_submission');
function handle_my_form_submission() {
// Получаем данные из запроса
$name = isset($_POST['name']) ? sanitize_text_field($_POST['name']) : null;
$email = isset($_POST['email']) ? sanitize_email($_POST['email']) : null;
// Здесь вы можете добавить код для обработки данных, например, отправка в CRM
// Возвращаем ответ
wp_send_json_success(array('message' => 'Данные успешно отправлены!'));
}
Тут я показал типичный пример использования AJAX в WP. Нечто подобное нужно найди в коде проекта. Можно искать по ключевому слову 'wp_ajax_'. И уже по ситуации использовать код который будет отвечать за отправку данных в CRM.
WooCommerce
Иногда возникают ситуации, когда необходимо отправить данные сразу после завершения заказа.
<?php
add_action( 'woocommerce_thankyou', 'custom_after_order_received', 10, 1 );
function custom_after_order_received( $order_id ) {
// Получение данных заказа
$order = wc_get_order( $order_id );
//при желании можно получить и передать список купленых товаров!
//$products = get_product_list_by_string( $order_id );
$name = $order->get_billing_first_name() . ' ' . $order->get_billing_last_name();
$phone = $order->get_billing_phone();
$email = $order->get_billing_email();
// Отправка данных на внешний сервис
$response = wp_remote_post('https://example.com/api', array(
'method' => 'POST',
'body' => json_encode(array(
'name' => $name,
'phone' => $phone
'email' => $email,
)),
'headers' => array(
'Content-Type' => 'application/json',
),
));
// Проверка ответа
if (is_wp_error($response)) {
// Обработка ошибки
error_log('Ошибка отправки данных на внешний сервис: ' . $response->get_error_message());
} else {
// Обработка успешного ответа
error_log('Данные успешно отправлены на внешний сервис');
}
}
Хук woocommerce_thankyou является частью системы хуков в WooCommerce и позволяет разработчикам выполнять определенные действия в момент, когда пользователь завершает покупку и видит страницу благодарности (Thank You page) после оформления заказа.
Если у вас есть вопросы или ваш собственный опыт в этом вопросе, делитесь в комментариях! Спасибо за внимание!
Комментарии (4)
Gannshe
20.08.2024 12:41+1Было интересно почитать, спасибо за статью)
Было бы мне интересно почитать,как реализовать интеграцию Woocommerce и Битрикс24. На данный момент как раз этим и занимаюсь, но так как в серверной части не силен, нашел только одно решение, в виде плагина от Flamix, но для его работы нужна подписка Битрикс24 Маркет, которая в цене кусается.spoot1986 Автор
20.08.2024 12:41Вам спасибо что прочитали) В вашей задачке Woocommerce и Битрикс24 по любому нужно будет серверную часть делать.
dmitrijtest24
Поменяйте на 4ре, все едино перечисляете 4ре. И после "И еще В редких" либо и еще уберите.
P.S. в целом с WordPress не работал и спасибо за обзор, но проверьте орфографию.
spoot1986 Автор
Спасибо, подправил. Я конечно больше разраб, чем писатель)