WordPress и CRM-системы

от автора

Всем привет! Не буду тратить время на лишние вводные слова, а сразу перейду к сути. В этой небольшой статье я поделюсь своим опытом интеграции 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) после оформления заказа.

Если у вас есть вопросы или ваш собственный опыт в этом вопросе, делитесь в комментариях! Спасибо за внимание!


ссылка на оригинал статьи https://habr.com/ru/articles/837306/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *