Объедините регистр Switch с &&, чтобы включить другие переменные - PullRequest
0 голосов
/ 10 мая 2019

Я использую здесь какой-то PHP, который отправляет электронное письмо на основе выпадающего списка в контактной форме 7. Я хотел бы, чтобы оно выполнялось и отправляло электронное письмо только в том случае, если один из трех других входных данных - число 10

Я попытался скомбинировать переключатель с && и ||операторы, но он не может быть выполнен по желанию.Я здесь ограничен в обучении, поэтому буду признателен за любую помощь, которую вы сможете оказать.

/ * переключатель автоответчика cf7 * /

подключить к wpcf7_mail_sent - это произойдет после отправки формы

add_action ('wpcf7_mail_sent', 'contact_form_autoresponders');

наша функция автоответчиков

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 );
    }

}

Так что я ожидаю, что электронное письмо 'A' будет отправлено, если в раскрывающемся списке формы будет выбран любой из первых случаев, и электронное письмо 'B', если оно будет отправленовторичный регистр выбран, но только если один из трех размеров равен 10, в противном случае он отправляет электронное письмо «А».

Ответы [ 3 ]

1 голос
/ 10 мая 2019

Вы, вероятно, должны использовать in_array() для такого рода проверок.

Просто измените ваш переключатель на оператор if и определите 2 массива со значениями, с которыми вы хотите сравнить.

$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";
}
1 голос
/ 10 мая 2019

Немного анализа кода:

....
case 'SE':
case 'WC':
case 'EC':  

До этого момента коммутатор является ИЛИ (||) вызова case инструкций выше, начиная с вашего последнего break. Если вы измените следующую часть на:

   if ( $posted_data['size1'] == 10 
        || $posted_data['size2'] == 10 
        || $posted_data['size3] == 10 )
   {
        $msg="email b";
   }

... тогда все условие if выполняется в AND'е для случаев, описанных выше ⇒ $msg="email b" выполняется только в том случае, если хотя бы один из случаев является действительным AND , если условие выполняется TRUE.

0 голосов
/ 10 мая 2019

Переключатели просто так не работают.

Вам нужно переключиться на шаблон if / else-if или использовать поисковый словарь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...