Cómo elegir un destinatario de correo electrónico en el Formulario de contacto 7 según la información del estado de la dirección en forma y guardar en la base de datos [cerrado]

3

Uso del formulario de contacto 7

Situation

Cuando un visitante completa un formulario en el sitio web, ingresa:

  • nombre
  • correo electrónico
  • teléfono
  • Dirección (calle, ciudad, estado, código postal)
  • mensaje

Necesito guardar esta información en la base de datos para futuras referencias y debo enviar un correo electrónico a una dirección de correo electrónico central y a una dirección de correo electrónico específica, que cambia según el estado del visitante.

Básicamente, los vendedores tienen territorios y los contactos del sitio web deben enviarse a la dirección de correo electrónico principal del sitio web, así como a la persona a cargo del territorio.

No todos los estados tienen un vendedor asignado.

Pasos tomados

Instalé Formulario de contacto de formulario de contacto para guardar todos los envíos a la base de datos .

Estoy utilizando el método descrito en el sitio web de Contact Form 7 para seleccionar el destinatario - Destinatario seleccionable con tuberías . Estoy usando el nombre del estado como el menú desplegable seleccionable y la dirección de correo electrónico del vendedor después de la canalización.

[select* state 
"Alabama|john@example.com"
"Alaska"
"Arizona|john@example.com"
"Arkansas|mary@example.com"
"California|mary@example.com"
"Colorado"
]

Configuré el "Correo" de CF7 para enviarlo a la dirección de correo electrónico central del sitio web y a la dirección de correo electrónico del vendedor que opera en el estado seleccionado.

central@example.com,[state]

Los problemas

Cuando un visitante selecciona un estado que tiene un vendedor asignado, la dirección de correo electrónico del vendedor se ingresa en la base de datos, no en el estado.

Cuando un visitante selecciona un nombre de estado que no tiene un vendedor designado, el nombre del estado se ingresa en la base de datos, pero no se envía ningún correo electrónico.

También intenté configurar "Correo" para enviar a central@example.com y "Correo (2)" para enviar a [state] (dirección de correo electrónico del vendedor), sin embargo, no se envió ningún correo electrónico a central@example.com cuando se envió una dirección de correo electrónico no se proporciona para el nombre del estado en el menú desplegable.

Por último, intenté ingresar el nombre del estado en este formato - "Alaska|" . En este caso, no se ingresó nada en la base de datos para state y no se envió ningún correo electrónico. Probé esto usando las dos opciones de "Correo" enumeradas anteriormente.

¿La solución?

Ahora, entiendo, simplemente puedo ingresar central@example.com para todos los nombres de estados sin un vendedor designado, y eso está bien.

El problema con esto: la dirección de correo electrónico aún se ingresa en la base de datos para state .

Imagino que necesito una forma de tomar el nombre del estado ([_raw_state]) y pasarlo a un campo oculto de CF7, para que pueda guardarse en la base de datos, pero parece que no entiendo cómo.

    
pregunta Travis Pflanz 28.01.2013 - 08:30

1 respuesta

2

Gracias a Michael Simpson, de Contact Form DB. La solución aparece (tipo de oculto) en el sitio web de Formulario de contacto en el artículo - Menús de CF7 con canalizaciones

Añadir a functions.php

function myFilter($formData) {
// Change $formData
return $formData; // be sure to return it
}

add_filter('cfdb_form_data', 'myFilter');

function location_form_handler($formData)
{
$formName = 'ExtendedContact'; // change this to your form's name
$fieldName = 'state'; // change this to your field's name
if ($formData && $formName == $formData->title && $formData->scanned_form_tags) {
    $emailSelected = $formData->posted_data[$fieldName];
    $valueSelected = null;
    foreach ($formData->scanned_form_tags as $tag) {
        if ($tag['name'] == $fieldName) {
            foreach ($tag['raw_values'] as $rawValue) {
                // value|email
                $valuesArray = explode('|', $rawValue);
                if (count($valuesArray) == 2 && $valuesArray[1] == $emailSelected) {
                    $valueSelected = $valuesArray[0];
                    break;
                }
            }
        }
        if ($valueSelected != null) {
            break;
        }
    }
    if ($valueSelected != null) {
        $formData->posted_data[$fieldName] = $valueSelected;
        $formData->posted_data[$fieldName . '_email'] = $emailSelected;
    }
}
return $formData;
}
add_filter('cfdb_form_data', 'location_form_handler');

Esto creará una entrada en la base de datos con el nombre del estado (campo antes de la canalización) como state y un segundo campo (dirección de correo electrónico después de la tubería) con la dirección de correo electrónico asociada como state_email .

Finalmente, actualice la definición del formulario en el Formulario de contacto 7 de la siguiente manera: [estado_correo]

NOTA

También quiero mencionar, en caso de que alguien más se encuentre con esta situación -

En mi formulario, los visitantes que completan el formulario seleccionan el estado en el que se encuentran, luego el vendedor que es responsable de ese estado recibe el correo electrónico. Además, necesitaba que el correo electrónico se enviara a una dirección de correo electrónico central (corporativa).

Sin embargo, no todos los estados tienen un vendedor asignado, ya que la compañía se centra en el medio oeste.

Con el Formulario de contacto 7, si la dirección de correo electrónico después de la canalización estaba vacía, los correos electrónicos no se enviarían en absoluto. El método descrito por Michael en realidad permite un campo vacío después de la tubería.

Configuré "Correo" en el formulario para enviarlo al correo electrónico central y "Correo (2)" para enviarlo al vendedor (si existe).

    
respondido por el Travis Pflanz 29.01.2013 - 23:28

Lea otras preguntas en las etiquetas