将Switch case与&&合并以包含其他变量

时间:2019-05-10 17:10:00

标签: php wordpress

我从这里开始使用一些PHP,该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”,如果选择了任何第二种情况,但仅当三个大小之一等于10时,电子邮件“ B”将发送否则它将发送电子邮件“ A”。

3 个答案:

答案 0 :(得分:0)

开关根本不能那样工作。

您需要切换到if / else-if模式或使用查找字典。

答案 1 :(得分:0)

您可能应该使用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";
}

答案 2 :(得分:0)

一些代码分析:

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

直到此处,该开关是从上一个||开始的上述调用case指令的OR(break)。如果将下一部分更改为:

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

......然后将整个if条件与上述情况进行“与”运算⇒$msg="email b"仅在其中至少一种情况有效的情况下才执行 AND 如果条件为TRUE,则以下内容。