Динамическое изменение адресата в форме 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 или теми, которые входят в рубрику "Новости".