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