Title: MW WP FORMでのフリーメール除外
Last modified: 2020年3月9日

---

# MW WP FORMでのフリーメール除外

 *  解決済 [yossymorisaki](https://ja.wordpress.org/support/users/yossymorisaki/)
 * (@yossymorisaki)
 * [6年、 7ヶ月前](https://ja.wordpress.org/support/topic/mw-wp-form%e3%81%a7%e3%81%ae%e3%83%95%e3%83%aa%e3%83%bc%e3%83%a1%e3%83%bc%e3%83%ab%e9%99%a4%e5%a4%96/)
 * 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件中)

 *  [천궁 메텔](https://ja.wordpress.org/support/users/digitmaetel/)
 * (@digitmaetel)
 * [6年、 7ヶ月前](https://ja.wordpress.org/support/topic/mw-wp-form%e3%81%a7%e3%81%ae%e3%83%95%e3%83%aa%e3%83%bc%e3%83%a1%e3%83%bc%e3%83%ab%e9%99%a4%e5%a4%96/#post-11662933)
 * 「フリーメールはお使いになれません」のくくりは、どういうものでしょう。ヂースイーツ
   や、ヤフーメール、グーメールは使えますか。
 *  [munyagu](https://ja.wordpress.org/support/users/munyagu/)
 * (@munyagu)
 * [6年、 7ヶ月前](https://ja.wordpress.org/support/topic/mw-wp-form%e3%81%a7%e3%81%ae%e3%83%95%e3%83%aa%e3%83%bc%e3%83%a1%e3%83%bc%e3%83%ab%e9%99%a4%e5%a4%96/#post-11662935)
 * こんにちは
 * お書きになっているソースがちょっと理解できない部分があったので、私ならこう書く
   かな・・・と書き換えて見ました。
 * 私はこのプラグインを使ったことが無いので、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;
       }
       ```
   
 * ※１ add_filter は修正が面倒だったので省いていますが必要です
    ※２ $Data->get( ‘
   メールアドレス’ )が取得できていないと話になりませんが、そこは`var_dump`などで
   確認してください。 ※３ ソースコードを貼り付ける場合は、CODEボタンを押してバック
   クォートで囲ってください。
 *  トピック投稿者 [yossymorisaki](https://ja.wordpress.org/support/users/yossymorisaki/)
 * (@yossymorisaki)
 * [6年、 7ヶ月前](https://ja.wordpress.org/support/topic/mw-wp-form%e3%81%a7%e3%81%ae%e3%83%95%e3%83%aa%e3%83%bc%e3%83%a1%e3%83%bc%e3%83%ab%e9%99%a4%e5%a4%96/#post-11662938)
 * 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' );
       }
       ```
   
 *  [munyagu](https://ja.wordpress.org/support/users/munyagu/)
 * (@munyagu)
 * [6年、 7ヶ月前](https://ja.wordpress.org/support/topic/mw-wp-form%e3%81%a7%e3%81%ae%e3%83%95%e3%83%aa%e3%83%bc%e3%83%a1%e3%83%bc%e3%83%ab%e9%99%a4%e5%a4%96/#post-11662941)
 * 条件分岐に入ったらフリーメールなので、そちらでバリデーションエラーをセットしない
   といけないですね。
    -  この返信は6年、 7ヶ月前に[munyagu](https://ja.wordpress.org/support/users/munyagu/)
      が編集しました。
    -  この返信は6年、 7ヶ月前に[munyagu](https://ja.wordpress.org/support/users/munyagu/)
      が編集しました。
 *  トピック投稿者 [yossymorisaki](https://ja.wordpress.org/support/users/yossymorisaki/)
 * (@yossymorisaki)
 * [6年、 7ヶ月前](https://ja.wordpress.org/support/topic/mw-wp-form%e3%81%a7%e3%81%ae%e3%83%95%e3%83%aa%e3%83%bc%e3%83%a1%e3%83%bc%e3%83%ab%e9%99%a4%e5%a4%96/#post-11662944)
 * 下記で解決しました！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でのフリーメール除外」には新たに返信することはできません。

## タグ

 * [MWWPForm](https://ja.wordpress.org/support/topic-tag/mwwpform/)

 * フォーラム: [プラグイン](https://ja.wordpress.org/support/forum/plugins/)
 * 5件の返信
 * 3人の参加者
 * 最後の返信者: [yossymorisaki](https://ja.wordpress.org/support/users/yossymorisaki/)
 * 最後の活動: [6年、 7ヶ月前](https://ja.wordpress.org/support/topic/mw-wp-form%e3%81%a7%e3%81%ae%e3%83%95%e3%83%aa%e3%83%bc%e3%83%a1%e3%83%bc%e3%83%ab%e9%99%a4%e5%a4%96/#post-11662944)
 * 状態: 解決済

## トピック

### 人気のトピック

### 返信がないトピック

### サポート関連ではないトピック

### 解決済みのトピック

### 未解決のトピック

### すべてのトピック
