Estoy usando un PHP desde aquí que envía un correo electrónico basado en una selección desplegable en el Formulario de contacto 7. Me gustaría que solo se ejecute y envíe el correo electrónico si una de las otras tres entradas es el número 10
Intenté combinar el interruptor con && y || operadores pero no se ejecuta según lo deseado. Estoy limitado por mi aprendizaje aquí, por lo que agradecería cualquier ayuda que pueda brindarme.
/ * interruptor de respuesta automática cf7 * /
Conéctese a wpcf7_mail_sent: esto sucederá después de enviar el formulario
Add_action ('wpcf7_mail_sent', 'contact_form_autoresponders');
Nuestra función de autorespondedores
function contact_form_autoresponders( $contact_form ) {
if( $contact_form->id==14 ){ #your contact form ID - you can find this in contact form 7 settings
#retrieve the details of the form/post
$submission = WPCF7_Submission::get_instance();
$posted_data = $submission->get_posted_data();
#set autoresponders based on dropdown choice
switch( $posted_data['location'] ){ #your dropdown menu field name
case 'AB':
case 'AL':
case 'B':
case 'BA':
case 'BB':
case 'BD':
$msg="email a";
break;
case 'NW':
case 'N':
case 'E':
case 'W':
case 'SW':
case 'SE':
case 'WC':
case 'EC':
``` && if ( $posted_data['size1'] == 10 || $posted_data['size2'] == 10 || $posted_data['size3] == 10) ```
$msg="email b";
else $msg="email a";
break;
}
#mail it to them
mail( $posted_data['femail-610'], 'Thanks for your enquiry', $msg );
}
}
Por lo tanto, esperaría que se envíe el correo electrónico 'A' si se selecciona alguno de los primeros casos del menú desplegable del formulario y el correo electrónico 'B' para enviar si se selecciona alguno de los casos secundarios, pero solo si uno de los tres tamaños es igual a 10 más envía correo electrónico 'A'.
3 respuestas
Probablemente debería usar in_array()
para este tipo de comprobaciones .
Simplemente cambie su interruptor a una declaración if y defina 2 matrices con los valores con los que desea comparar.
$locationsForEmailA = ['AB', 'AL', 'B', 'BA', 'BB', 'BD'];
$locationsForEmailB = ['NW', 'N', 'E', 'W', 'SW', 'SE', 'WC', 'EC'];
if(in_array($posted_data['location'], $locationsForEmailA, true) ||
in_array($posted_data['location'], $locationsForEmailB, true) &&
!($posted_data['size1'] == 10 || $posted_data['size2'] == 10 || $posted_data['size3'] == 10)){
$msg = "email a";
} else {
$msg = "email b";
}
Un pequeño análisis de código:
....
case 'SE':
case 'WC':
case 'EC':
Hasta aquí, el cambio es un OR (||
) de las instrucciones de llamada case
anteriores que comienzan desde su última break
. Si cambia la siguiente parte a:
if ( $posted_data['size1'] == 10
|| $posted_data['size2'] == 10
|| $posted_data['size3] == 10 )
{
$msg="email b";
}
... entonces toda la condición if
se ANDA a los casos anteriores ⇒ $msg="email b"
solo se ejecuta, si al menos uno de los casos es válido AND lo siguiente si La condición es VERDADERA.
Los interruptores simplemente no funcionan así.
Debe cambiar a un patrón if / else-if o usar un diccionario de búsqueda.
Preguntas relacionadas
Nuevas preguntas
php
PHP es un lenguaje de secuencias de comandos interpretado, dinámico, orientado a objetos y ampliamente utilizado, diseñado principalmente para el desarrollo web del lado del servidor. Se utiliza para preguntas sobre el lenguaje PHP.