サポート » プラグイン » MW WP FORMでのフリーメール除外

  • 解決済 yossymorisaki

    (@yossymorisaki)


    MW WP FORMを使用しておりまして、Gmailなどのフリーメールを除外するValidationを追加したいのですが、
    以下のようにしても動きませんでした。

    原因と対処方法をご存知の方がございましたら、
    お力添えいただけますと幸いです。

    何卒、よろしくお願いいたします。

    function validate_email_reject_freemail($Validation, $data, $Data){
    $tag = $Data->get( ‘メールアドレス’ ) ;
    $freemails = array(
    ‘gmail.com’,
    ‘yahoo.co.jp’,
    ‘msn.com’,
    ‘hotmail.co.jp’,
    ‘hotmail.com’,
    );
    $email = isset ($tag) ? trim($tag) : ”;
    if(!empty($email)){
    foreach($freemails as $freemail){
    if(preg_match(“/@” . preg_quote($freemail) . “$/ui”,$email)){
    $Validation->set_rule( ‘メールアドレス’, ‘mail’, array(
    ‘message’ => ‘フリーメールはお使いになれません’
    ) );
    }
    }

    }
    return $Validation;
    }

    add_filter( ‘mwform_validation_mw-wp-form-145’, ‘validate_email_reject_freemail’, 10, 2 );

5件の返信を表示中 - 1 - 5件目 (全5件中)
  • 「フリーメールはお使いになれません」のくくりは、どういうものでしょう。ヂースイーツや、ヤフーメール、グーメールは使えますか。

    こんにちは

    お書きになっているソースがちょっと理解できない部分があったので、私ならこう書くかな・・・と書き換えて見ました。

    私はこのプラグインを使ったことが無いので、get やら set_rule やらの使い方の正しさについては分かりません。

    function validate_email_reject_freemail( $Validation, $data, $Data ) {
    
    	$email = trim( $Data->get( 'メールアドレス' ) );
    
    	$freemails = array(
    		'gmail.com',
    		'yahoo.co.jp',
    		'msn.com',
    		'hotmail.co.jp',
    		'hotmail.com',
    	);
    
    	if ( ! empty( $email )
    	     && 1 === preg_match( '/^.+?@(.*)$/', $email, $maatches ) ) {
    		if ( in_array( $maatches[1], $freemails ) ) {
    			$Validation->set_rule( 'メールアドレス', 'mail', array(
    				'message' => 'フリーメールはお使いになれません'
    			) );
    		}
    
    	}
    
    	return $Validation;
    }
    

    ※1 add_filter は修正が面倒だったので省いていますが必要です
    ※2 $Data->get( ‘メールアドレス’ )が取得できていないと話になりませんが、そこはvar_dumpなどで確認してください。
    ※3 ソースコードを貼り付ける場合は、CODEボタンを押してバッククォートで囲ってください。

    トピック投稿者 yossymorisaki

    (@yossymorisaki)

    munyaguさん

    アドバイスありがとうございます!
    その後色々調べまして、MW WP FORMにオリジナルのバリデーションを追加するには以下のような形で組み込むのが良いとわかりました。munyaguさんに教えていただいたように組み込んでみました。検証してみます。ありがとうございます。

    if ( class_exists( 'MW_WP_Form_Abstract_Validation_Rule' ) ) {
      class MW_WP_Form_Validation_Rule_Freemail extends MW_WP_Form_Abstract_Validation_Rule {
        protected $name = 'freemail';
    
        public function rule( $key, array $options = array() ) {
          $value = $this->Data->get( $key );
    
          $freemails = array(
                    'gmail.com',
                    'yahoo.co.jp',
                    'msn.com',
                    'hotmail.co.jp',
                    'hotmail.com',
            );
    
           if ( ! empty( $value )
                 && 1 === preg_match( '/^.+?@(.*)$/', $value, $maatches ) ) {
                    if ( in_array( $maatches[1], $freemails ) ) {
                            return;
     
                    }
    
            } 
    
          $defaults = array(
            'message' => 'フリーメールはお使いになりません'
          );
          $options = array_merge( $defaults, $options );
          return $options['message'];
        }
    
        public function admin( $key, $value ) {
          ?>
          <label><input type="checkbox" <?php checked( $value[ $this->getName() ], 1 ); ?> name="<?php echo MWF_Config::NAME; ?>[validation][<?php echo $key; ?>][<?php echo esc_attr( $this->getName() ); ?>]" value="1" />フリーメール除外</label>
          <?php
        }
      }
    
      function mwform_validation_rule_freemail( $validation_rules ) {
        $instance = new MW_WP_Form_Validation_Rule_Freemail();
        $validation_rules[$instance->getName()] = $instance;
        return $validation_rules;
      }
    
      add_filter( 'mwform_validation_rules', 'mwform_validation_rule_freemail' );
    }
    

    条件分岐に入ったらフリーメールなので、そちらでバリデーションエラーをセットしないといけないですね。

    • この返信は4年、 1ヶ月前にmunyaguが編集しました。
    • この返信は4年、 1ヶ月前にmunyaguが編集しました。
    トピック投稿者 yossymorisaki

    (@yossymorisaki)

    下記で解決しました!munyaguさんありがとうございました!

    if ( class_exists( 'MW_WP_Form_Abstract_Validation_Rule' ) ) {
      class MW_WP_Form_Validation_Rule_Freemail extends MW_WP_Form_Abstract_Validation_Rule {
        protected $name = 'freemail';
    
        public function rule( $key, array $options = array() ) {
          $value = $this->Data->get( $key );
    
          $freemails = array(
                    'gmail.com',
                    'yahoo.co.jp',
                    'msn.com',
                    'hotmail.co.jp',
                    'hotmail.com',
            );
    
            
    
            if(!empty($value)){
        foreach($freemails as $freemail){
          if(preg_match("/@" . preg_quote($freemail) . "$/ui",$value)){
             $defaults = array(
            'message' => 'フリーメールはお使いになりません'
          );
          $options = array_merge( $defaults, $options );
          return $options['message'];
          }
        }
      }  
    
         
        }
    
        public function admin( $key, $value ) {
          ?>
          <label><input type="checkbox" <?php checked( $value[ $this->getName() ], 1 ); ?> name="<?php echo MWF_Config::NAME; ?>[validation][<?php echo $key; ?>][<?php echo esc_attr( $this->getName() ); ?>]" value="1" />フリーメール除外</label>
          <?php
        }
      }
    
      function mwform_validation_rule_freemail( $validation_rules ) {
        $instance = new MW_WP_Form_Validation_Rule_Freemail();
        $validation_rules[$instance->getName()] = $instance;
        return $validation_rules;
      }
    
      add_filter( 'mwform_validation_rules', 'mwform_validation_rule_freemail' );
    }
    
5件の返信を表示中 - 1 - 5件目 (全5件中)
  • トピック「MW WP FORMでのフリーメール除外」には新たに返信することはできません。