Зберігаємо Contact Form 7 в базу даних

У світі немає людей, які б не любили плагін CF7 під вордпрес. Звісно, є люди, які про нього не знають, але щоб не любили — нема 🙂

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

Звісно, Ви можете скористатись якимись із вже існуючих плагінів, наприклад Flamingo, або cfdb. Вони подбають про збереження листів не гірше і запропонують свіженький інтерфейс.

Проте буває, коли стоїть нестандартна задача. Наприклад, Вам потрібно зберігати листи до таблиці з публікаціями, а також маніпулювати ними в майбутньому. Тут нам допоможе хук: add_action(‘wpcf7_before_send_mail’);. Саме він допоможе вивести функцію збереження у потрібне місце.

/**
// Save CF7 to DB
*/
add_action('wpcf7_before_send_mail', 'save_form_cf7');
 
function save_form_cf7( $wpcf7 ) {
 global $wpdb; 
 $submission = WPCF7_Submission::get_instance();
 
 if ($submission) {
 $postarr = array( 
 'post_content' => serialize($submission->get_posted_data()) ,
 'post_status' => 'publish',
 'post_title' => $wpcf7->title(),
 'post_type' => 'cf7-saved'
 );
 wp_insert_post($postarr);
 }
}

Кілька слів про логіку конструкції:

  • оголошуємо функцію save_form-cf7 та про всяк випадок ініціалізовуємо $wpdb;
  • присвоюємо для $submission результати діяльності форми;
  • формуємо масив $postarr для подальшого створення публікації через wp_insert_post().

Тепер усі повідомлення, включно зі спамом роздуватимуть базу даних клієнтам на радість. Проте це вже буде геть інша історія.

UPD. на деяких темах назва функції save_form-cf7 викликає кнфлікти — було замінено на save_form_cf7

Залишити відповідь