Динамическое изменение адресата в форме CF7
Бывают случаи, когда авторы статей присылают свои материалы редакторам сайта, а те уже их публикуют. Как в таких случаях дать возможность читателям статьи отослать письмо реальному автору статьи, а не редактору, через форму Contact Form 7? Рассмотрим один из вариантов решения задачи.
При добавлении статьи реактором, он должен указать почту реального автора в произвольное поле. Оно может быть создано с помощью штатного функционала WP, с помощью ACF или аналогами. Я в своем примере использую произвольное поле с ключом email_author_article
. Тогда код примет вид:
add_filter( 'wpcf7_contact_form_properties', 'modify_email_author' ); /** * Изменяет адрес электронный почты, указанный в форме, на ту, что указана в произвольном поле. * * @param array $properties * * @return array */ function modify_email_author( $properties ) { $submission = WPCF7_Submission::get_instance(); // Это не отправка формы - прекращаем работу if ( ! $submission ) { return $properties; } $post_id = $submission->get_meta( 'container_post_id' ); // ID записи не пришёл - прекращаем работу if ( ! $post_id ) { return $properties; } // Получаем почту реального автора из произвольного поля $email = get_post_meta( $post_id, 'email_author_article', true ); // Если почта не введена или данные не являются почтой - прекращаем работу if ( ! ( $email && is_email( $email ) ) ) { return $properties; } // Все проверки прошли успешно - переопределяем почту, куда будет отправлено письмо $properties['mail']['recipient'] = $email; return $properties; }
Если ID записи определен, то можно добавить другие разнообразные проверки, например работать с записями типа product или теми, которые входят в рубрику "Новости".