¿Cómo puedo enviar a múltiples destinatarios en Contact Form 7 basado en los datos del formulario?

7 dic 2016, 10:40:17
Vistas: 24.4K
Votos: 4

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.

0
Todas las respuestas a la pregunta 1
7

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]

Ingresar descripción de la imagen aquí

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.

7 dic 2016 11:00:36
Comentarios

Esto resulta en un error de sintaxis

mikemike mikemike
7 dic 2016 11:06:31

haz que todos esos campos de email sean obligatorios, @mikemike

GKS GKS
7 dic 2016 11:14:53

Pero no son obligatorios :(

mikemike mikemike
7 dic 2016 11:15:39

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

GKS GKS
7 dic 2016 11:19:21

Sí, de ahí mi pregunta

mikemike mikemike
7 dic 2016 11:20:23

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

GKS GKS
7 dic 2016 12:14:13

¿Qué se supone que debe retornar toda la función? Según puedo ver en el código, solo puede retornar algo cuando $contactformsubmition es verdadero. ¿Qué pasa si $contactformsubmition no es verdadero?

Karue Benson Karue Karue Benson Karue
30 may 2020 18:41:29
Mostrar los 2 comentarios restantes