MW WP Formのスパム対策プラグイン【MW WP Form reCAPTCHA】のエラーと代替スパム対策について

先日、Wordpressのアップデートを行ったところ、どうにもMW WP Form reCAPTCHAの様子がおかしい。
リロードする度に↓のロボットが表示・非表示を繰りかえす事態になってしまいました。

MW WP Formがそもそもキャッシュに弱いという話だったので、フォーム本体に何か不具合がでたなあと思い、一度MW WP Form reCAPTCHAをアンインストールして、フォームテスト。
すると、問題なく動きます。
どうにもMW WP Form reCAPTCHA側の問題?のようなのですが、はっきりとした原因がわからず…

まずMW WP Form reCAPTCHAについて公式情報を確認したところ、

2021年1月現在、更新が3年前で、検証済み最新バージョンも4.9.16で止まっておられました。
なるほど、これは現状使い続けないほうがいいのでは…という結論に至り、別の方法でスパム対策を行うことに。

代替案1 代替プラグイン reCAPTCHA for MW WP Form

MW WP Form reCAPTCHAと似た機能を持つプラグインで、reCAPTCHA for MW WP Formというものを発見。
(名前が似ていてとてもややこしいですが、別のプラグインです。)

設定方法もMW WP Form reCAPTCHAと似ていて、ショートコードでフォームに設置することができます。
ただ、チェックボックスはなく、「保護してますよー」という↓の表示のみになります。

代替案2 カスタムバリデーションルールを追加する

日本国内向けのサイトであれば、MW WP Formに日本語文字(ひらがな、カタカナ、漢字)入力を必須にするルールを追加することである程度のスパムを防げます。
functions.phpの最後尾にこちらのコードを記述します。

  
if ( class_exists( 'MW_WP_Form_Abstract_Validation_Rule' ) ) {
	class MW_WP_Form_Validation_Rule_Japanese extends MW_WP_Form_Abstract_Validation_Rule {
		protected $name = 'japanese';

		public function rule( $key, array $options = array() ) {
			$value = $this->Data->get( $key );
			if ( is_null( $value ) ) {
				return;
			}
			if ( preg_match( '/[一-龠]+|[ぁ-ん]+|[ァ-ヴー]/u', $value ) ) {
				return;
			}
			$defaults = array(
				'message' => '日本語で入力してください。'
			);
			$options = array_merge( $defaults, $options );
			return $options['message'];
		}

		public function admin( $key, $value ) {
			?>
			<label><input type="checkbox" getName() ], 1 ); ?> name="[validation][][getName() ); ?>]" value="1" />日本語を含む
			getName()] = $instance;
		return $validation_rules;
	}

	add_filter( 'mwform_validation_rules', 'mwform_validation_rule_japanese' );
}
 


こちらを入れるとバリデーションルールの中に「日本語を含む」というチェックボックスが表示されます。
ただ、漢字をokにしているので、中国圏のスパムに対しては弱いです。
中国圏からのスパムが多い場合は、ふりがな入力のフォームを作成し、ひらがなを必須にするのも手かもしれません。
(ひらがな必須のバリデーションルールはデフォルトで選ぶことができます)

参考にさせていただきました↓
MW WP Form のカスタムバリデーションルール

おすすめ