MW WP Form バリデーションルールでNGワードを設定(スパムブロック)
2024年6月26日目次
WordPressの「MW WP Form」プラグインを使って、お問い合わせフォームにスパム対策のバリデーションルールを追加する方法を紹介します。
スパムや営業メールの多くは、自動化されたボットやテンプレ送信が多いです。これらのボットは特定のキーワードを含むメッセージを投稿することが多いため、NGワードリストを作成し、そのキーワードを含む投稿をブロックし、対策します。
01. functions.phpへ実装
<?php
// スパム対策:特定のキーワードを含む投稿をブロック
function custom_validation_nospam($validation_rules) {
if (!class_exists('Custom_Validation_NoSPAM')) {
class Custom_Validation_NoSPAM extends MW_WP_Form_Abstract_Validation_Rule {
protected $name = 'custom_nospam';
public function rule($name, $options = []) {
$ng_keywords = [
'ここにNGワードを入力してください',
'ここにNGワードを入力してください',
'ここにNGワードを入力してください',
'ここにNGワードを入力してください',
'ここにNGワードを入力してください',
];
$value = $this->Data->get($name);
if (!MWF_Functions::is_empty($value)) {
foreach ($ng_keywords as $ng_word) {
if (preg_match("/{$ng_word}/i", $value)) {
$defaults = array(
'message' => __('投稿にNGワードが含まれています。', 'mw-wp-form'),
);
$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" />
<?php esc_html_e('NoSPAM', 'mw-wp-form'); ?>
</label>
<?php
}
}
}
$obj = new Custom_Validation_NoSPAM();
$validation_rules[$obj->getName()] = $obj;
return $validation_rules;
}
add_filter('mwform_validation_rules', 'custom_validation_nospam');
コードの説明
クラスの定義:
Custom_Validation_NoSPAMというクラスを定義し、MW_WP_Form_Abstract_Validation_Ruleを継承します。
このクラスのruleメソッドでは、NGワードのリストをチェックし、NGワードが含まれている場合にエラーメッセージを返します。
adminメソッドでは、管理画面に「NoSPAM」チェックボックスを追加します。
バリデーションルールの追加:
custom_validation_nospam関数で、上記クラスをバリデーションルールに追加します。
add_filterを使って、MW WP Formのバリデーションルールにこの関数をフックします。
02.「NoSPAM」のチェックボックスにチェック
「MW WP Form」のプラグイン設定画面で「バリデーションルールを追加」をクリックし、「NoSPAM」のチェックボックスにチェックを入れます。次に、バリデーションを適用する項目にメール本文の項目名を入力すると設定が有効になります。
※緊急依頼の場合は【緊急】のチェックボックスにチェックを入れてください。24時間以内に担当者より折り返します。
ご質問・ご依頼はこちらから