2014-10-15 21 views
5

Wordpress ve php konusunda yeniyim, wordpress web sitemdeki iletişim formu 7'yi kullanıyorum. Bunun için e-posta adresini doğrulamam gerekiyor, gmail, yahoo, vb. Gibi tüm serbest alanları bloke etmeliyim. Hint telefon numarasını ülke koduyla doğrulamam gerekiyor.Wordpress'te İletişim Formu 7'deki iş e-postalarını ve telefon numaralarını kontrol etmek için özel doğrulama

4 tür iletişim formum vardı ancak yalnızca bir form için bu özel doğrulama gerekiyor. Ben googled ve this bulundu, ancak çalışmıyor. Birisi bana bu konuda yardım edin.

Teşekkürler.

cevap

5

temasında yer alan adlı öğenin functions.php dosyasını ekleyin.

// 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 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 

İstediğiniz sonucu yukarıdaki kodla elde edebilirsiniz.

NOT: Ben E-posta için yaptığı gibi sadece Email valide var .Arzu temas için aynısını yapabilirsiniz. İkinci sorun için

Cevap: Artık

Eğer o zaman böyle bir şey yapabileceği tek bir form için istediğiniz belirttiğim gibi: Sonra

wpcf7_add_shortcode('yourid', 'wpcf7_text_shortcode_handler', true); 

, böyle bir etiketi kullanabilirsiniz Form içinde:

[yourid your-id-number-field] 

etiket sözdizimi sonra bu page geçmesi anlamak istiyorsak

.

Umut size yardımcı olur.

+0

Hey Rohil, kodunuzu denedim, ama işe yaramıyor. :(Kopyaladım + yapıştırdım ve ayrı bir eklenti olarak yükledim. [E-posta] alanında her e-posta adresini girebiliyorum. Ne yapabilirim? – Ben

+0

Bu eklentiyi etkinleştirdiğinizden emin olun ve eğer etkinleştirilmişse lütfen bazı hata ayıklama yapın. :) –

+0

Elbette, bu aktive edilir. :) Hata ayıklama yapıldığından daha kolay söyleniyor. PHP'de hiç bir şey yapmadım, sadece Ruby ve JS .... – Ben

1

şu kodu kullanın, ben işi yapacak biraz,

if ('email' == $tag->basetype || 'email*' == $tag->basetype) { 
      $arr = explode('@', $_POST[$name]); 
      if(! empty($arr[1])){ 
        $domain = strtolower(trim($arr[1])); 
      } else { 
        $domain = false; 
      } 

      if ('email*' == $type && '' == $_POST[$name]) { 
        $result['valid'] = false; 
        $result['reason'][$name] = wpcf7_get_message('invalid_required'); 
      } elseif ('' != $_POST[$name] && ! is_email($_POST[$name])) { 
        $arr = explode('@', $_POST[$name]); 
        $result['valid'] = false; 
        $result['reason'][$name] = wpcf7_get_message('invalid_email'); 
      } elseif ($domain && in_array($domain, $FREE_DOMAINS)) { 
        $result['valid'] = false; 
        $result['reason'][$name] = wpcf7_get_message('invalid_email'); 
      } 
    } 

iletişim formu 7 eklenti modülü içinde text.php dosyada yukarıdaki kodu yapıştırın deđiţtirdiđiniz.

+0

Kodlama :-) Teşekkür aşağıda ile değiştirebilirsiniz. OP eklentiyi güncellemek istediğinde ne olur? – rnevius

+0

@mevius Pls bunu başarmanın bir yolunu söylüyor. –

0

Çözüm:

1) açın, iletişim formu 7 eklenti text.php dosya,

contact-form-7/modules/text.php 
) tarayıcı/Metin Düzenleyicisi'nde, Basın Ctrl + F, sonra aşağıdaki kodu arayın.

if ('email' == $tag->basetype) { 
     if ($tag->is_required() && '' == $value) { 
      $result->invalidate($tag, wpcf7_get_message('invalid_required')); 
     } 
     elseif ('' != $value && ! wpcf7_is_email($value)) { 
     $result->invalidate($tag, wpcf7_get_message('invalid_email')); 
     }  
     } 

3)

if ('email' == $tag->basetype) { 

    /*add the domain names you want to block in the $domains array*/ 
    $domains = array("gmail.com","yahoo.com","yahoo.co.in"); 
    /*explode will store the string into array 
     e.g: [email protected] 
       array(example, gmail.com)*/ 
    $udomain = explode('@', $value); 

    //select the email domain from the above splitted array 
    $email_domain = $udomain[1]; 

    // check name is 'company-email' else default validation will work 
    if('company-email' == $tag->name) { 
     //check entered value = $value exists in $domain array 
     if(in_array($email_domain, $domains)) { 
      //display error 
      $result->invalidate($tag, "Please enter your company email address"); 
     } 
    } 

    //email field is empty 
    if ($tag->is_required() && '' == $value) { 
     $result->invalidate($tag, wpcf7_get_message('invalid_required')); 
    } 

    //check basic email validation 
    elseif ('' != $value && ! wpcf7_is_email($value)) { 
     $result->invalidate($tag, wpcf7_get_message('invalid_email')); 
    } 
} 

Not Yukarıdaki kod değiştirin: Ben dizi, özgür eposta etki

herhangi bir sayıda ekleyebilirsiniz $ alan adlarında

4) İletişim formunu güncelleyin 7 text.php dosyası.

5) Serbest alanları engellemek için. Aşağıdaki formu kullanarak iletişim formu doldurun,

6) Wordpress'in tadını çıkarın !!

0

Teşekkürler @Palani Kamaraj. Ancak, tüm alt alanın ücretsiz barındırma sağlayıcılarını engellemek istersem; google.co. **, yahoo.co. **, vb? Dizi değerlerim artmaya devam ediyor.

Bunun için başka bir çözüm buldum ve diziyi önce iki kere '@', sonra da 'ile tekrar iki kez patlattım.' Yani yukarıdaki kodunuzda adım 3 için, kod bunu başarmak için çekirdek CF7 işlevselliğini değiştirmek için kesinlikle gerek yok

if ('email' == $tag->basetype) { 

    /*add the domain names you want to block in the $domains array*/ 
    $domains = array("gmail","yahoo","hotmail","aol","yahoo", "email", "ymail", "live", "msn"); 

    /*explode will store the string into array 
     e.g: [email protected] 
       array(example, yahoo.co.in)*/ 
    $lasta = explode('@', $value); 

    /*once again explode yahoo.**.** if the previous explode is not null 
     e.g: yahoo.co.in 
       array(yahoo, co, in)*/ 

    if ($lasta != "") { 
     $host = explode('.',$lasta[1]);      
    } 

    /* select the email domain from the above splitted array eg: yahoo */ 
    $email_domain = $host[0]; 


    // check name is 'company-email' else default validation will work 
    if('company-email' == $tag->name) { 
     //check entered value = $value exists in $domain array 
     if(in_array($email_domain, $domains)) { 
      //display error 
      $result->invalidate($tag, "Please enter your company email address"); 
     } 
    } 

    //email field is empty 
    if ($tag->is_required() && '' == $value) { 
     $result->invalidate($tag, wpcf7_get_message('invalid_required')); 
    } 

    //check basic email validation 
    elseif ('' != $value && ! wpcf7_is_email($value)) { 
     $result->invalidate($tag, wpcf7_get_message('invalid_email')); 
    } 
} 

Mutlu :-)