Как перенести расширенные значения повторителя настраиваемого поля в оператор preg_match if? - PullRequest
0 голосов
/ 17 апреля 2019

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

// Add custom validation for CF7 form fields
function is_company_email($email){ // Check against list of common public email providers & return true if the email provided *doesn't* match one of them

    if(
        preg_match('/@gmail.com/i', $email) ||
        preg_match('/@hotmail.com/i', $email) ||
        preg_match('/@live.com/i', $email) ||
        preg_match('/@msn.com/i', $email) ||
        preg_match('/@aol.com/i', $email) ||
        preg_match('/@yahoo.com/i', $email) ||
        preg_match('/@inbox.com/i', $email) ||
        preg_match('/@gmx.com/i', $email) ||
        preg_match('/@me.com/i', $email)
    ){
        return false; // It's a publicly available email address
    }else{
        return true; // It's probably a company email address
    }
}

function custom_email_validation_filter($result, $tag) {  

 $tag = new WPCF7_Shortcode( $tag );

   if ( 'email-address' == $tag->name ) {

 $the_value = isset( $_POST['email-address'] ) ? trim( $_POST['email-address'] ) : '';

           if(!is_company_email($the_value)){
                     $result->invalidate( $tag, "Please Enter a valid Business Email address. Email domains like hotmail or yahoo are excluded." );
           }
      }
       return $result;
 }

add_filter( 'wpcf7_validate_email', 'custom_email_validation_filter', 10, 2 );
add_filter( 'wpcf7_validate_email*', 'custom_email_validation_filter', 10, 2 );

Однако я хотел бы сделать список адресов электронной почты для блокировки редактируемым в WP Admin. Я создал повторитель настраиваемых полей на странице параметров:

$exclusions = get_field('excluded_email_addresses','options');

Однако я не уверен, как пройти через этот повторитель, сохраняя при этом функциональность preg_match.

Я пытался включить цикл foreach, но думаю, что он возвращал несколько результатов.

Любая помощь будет высоко ценится.

...