「フリーメールはお使いになれません」のくくりは、どういうものでしょう。ヂースイーツや、ヤフーメール、グーメールは使えますか。
こんにちは
お書きになっているソースがちょっと理解できない部分があったので、私ならこう書くかな・・・と書き換えて見ました。
私はこのプラグインを使ったことが無いので、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ボタンを押してバッククォートで囲ってください。
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さんありがとうございました!
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' );
}