У світі немає людей, які б не любили плагін 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