Add the following code to your functions.php theme .
// 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 a publicly available email address }else{ return true; // It probably a company email address } } function your_validation_filter_func($result,$tag){ $type = $tag['type']; $name = $tag['name']; if('yourid' == $type){ // Only apply to fields with the form field name of "company-email" $the_value = $_POST[$name]; if(!is_company_email($the_value)){ // Isn't a company email address (it matched the list of free email providers) $result['valid'] = false; $result['reason'][$name] = 'You need to provide an email address that isn\'t hosted by a free provider.<br />Please contact us directly if this isn\'t possible.'; } } return $result; } add_filter( 'wpcf7_validate_text', 'your_validation_filter_func', 10, 2 ); // Email field or contact number field add_filter( 'wpcf7_validate_text*', 'your_validation_filter_func', 10, 2 ); // Req. Email field or contact number
You can achieve the desired result with the above code.
NOTE. I checked only Email . You can do the same for contact as for email.
Answer the second problem:
Now that you mentioned that you want it for only one form, you can do something like this:
wpcf7_add_shortcode( 'yourid', 'wpcf7_text_shortcode_handler', true );
Then use this tag inside the form:
[yourid your-id-number-field]
If you want to understand the tag syntax, go to this page .
Hope this helps you.
source share