MW WP FormでバリデーションルールにNGワードを追加する方法

WordPressのお問い合わせフォームに「MW WP Form」というプラグインを使っていますが、ここ最近は迷惑な宣伝投稿が増えてきました。

人間が投稿しているのであれば我慢も出来ますが、おそらく誰かがWordPressフォームのURLを収集、リスト化してボットが定期的に自動投稿しているものと考えられます。

パケットの無駄なので、これらの社名・サービス名・ドメイン名をNGワードにして二度と投稿出来ない設定を簡単に追加したのでシェアします(他のプラグインに頼らずに実装)


以下のコードをfunctions.phpに追加する

<?php
//---------------------------------------------
//   + 問い合わせフォームのSPAM排除
//---------------------------------------------

function mwform_validation_nospam($p_rules){

	if(!class_exists('MW_Validation_Rule_NoSPAM')) {

		class MW_Validation_Rule_NoSPAM extends MW_WP_Form_Abstract_Validation_Rule{

			protected $name = 'nospam';

			//---独自ルールの追加
			public function rule($name , $options = []){

				//---NGキーワード配列
				$ng_keyword_ary = [
					'XXXXXXXXXXXX' ,
					'XXXXXXXXXXXX' ,
					'XXXXXXXXXXXX' ,
					'XXXXXXXXXXXX' ,
					'XXXXXXXXXXXX' ,
				];

				$value = $this->Data->get($name);

				if(!MWF_Functions::is_empty($value)){

					foreach ($ng_keyword_ary as $ng_word){

						if(preg_match("/{$ng_word}/i" , $value)){

							$defaults = array(
								'message' => __('システムエラーです', 'mw-wp-form'),
							);

							$options = array_merge($defaults , $options);

							return $options['message'];
						}
					}
				}
			}

			//---設定パネルに「NoSPAM」のチェックボックスを追加
			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" />
	<?php esc_html_e('NoSPAM', 'mw-wp-form'); ?>
</label>
<?php
			}
		}
	}

	$obj = new MW_Validation_Rule_NoSPAM();

	$p_rules[$obj->getName()] = $obj;

	return $p_rules;
}

add_filter('mwform_validation_rules' , 'mwform_validation_nospam');

※NGキーワード配列の部分に何個でもキーワードを追加できます。


プラグイン設定画面

コードの追加が完了したら「MW WP Form」のプラグイン設定画面の、バリデーションルールを追加をクリックすると、このように「NoSPAM」のチェックボックスが表示されているのでチェックを入れ、バリデーションを適用する項目にメール本文の項目名を入力すると設定が有効となります。

本文中にNGワードを含む文字列が入力されると「システムエラーです」と表示され、SPAM投稿をブロックします!