¿Cómo puedo enviar a múltiples destinatarios en Contact Form 7 basado en los datos del formulario?
Estamos realizando un concurso donde necesitamos enviar correos electrónicos a direcciones que se ingresan en un formulario. Estoy usando Contact Form 7 para esto.
Pensé que sería sencillo, pero el formulario no acepta la sintaxis de:
[friend1-email], [friend2-email], [friend3-email], [friend4-email], [friend5-email]
En el campo Para o CCO.
Creo que la solución podría ser codificar un valor fijo en el campo Para y luego sobrescribirlo con un gancho (hook), pero no puedo determinar cuál sería ese filtro/gancho.
Cualquier ayuda es apreciada.

No es necesario escribir ningún código, Contact Form 7 tiene la función de Encabezados Adicionales en la sección Mail
. En ella solo necesitas escribir el encabezado del correo dentro del cuadro de texto de Encabezados adicionales en la sección Mail
(segunda pestaña).
Coloca esto dentro del cuadro de texto de Encabezados Adicionales.
Cc: [friend1-email], [friend2-email], [friend3-email], [friend4-email], [friend5-email]
O
Puedes modificar los datos del encabezado del correo mediante el hook wpcf7_before_send_mail
, prueba con el siguiente código.
add_action('wpcf7_before_send_mail','dynamic_addcc');
function dynamic_addcc($WPCF7_ContactForm){
// Verificar el ID del formulario de contacto.
if (33 == $WPCF7_ContactForm->id()) {
$currentformInstance = WPCF7_ContactForm::get_current();
$contactformsubmition = WPCF7_Submission::get_instance();
if ($contactformsubmition) {
$cc_email = array();
/* -------------- */
// reemplaza con los nombres de los campos de email
if(is_email($_POST['friend1-email'])){
array_push($cc_email, $_POST['friend1-email']);
}
if(is_email($_POST['friend2-email'])){
array_push($cc_email, $_POST['friend2-email']);
}
/* -------------- */
// separar todos los emails por comas.
$cclist = implode(', ',$cc_email);
$data = $contactformsubmition->get_posted_data();
if (empty($data))
return;
$mail = $currentformInstance->prop('mail');
if(!empty($cclist)){
$mail['additional_headers'] = "Cc: $cclist";
}
// Guardar el cuerpo del correo
$currentformInstance->set_properties(array(
"mail" => $mail
));
// retornar la instancia actual de cf7
return $currentformInstance;
}
}
}
El hook wpcf7_before_send_mail
se ejecuta antes de enviar el correo, puedes modificar los datos del formulario.

Todos los correos electrónicos dentro de Cc:
deben estar presentes de lo contrario arrojará un error,

@mikemike He actualizado mi respuesta, reemplaza con tu ID de formulario de contacto y los nombres de los campos.
