「Contact Form by WPForms – WordPress 用のドラッグ & ドロップフォームビルダー」プラグイン(以降「WPForms 」と表記)で、日本語バリデーション (日本語の文字が含まれているかどうかを検証) をする方法を紹介します。
Twitter のタイムラインに「WPForms(クマがキャラクターのプラグイン)の日本語バリデーションが欲しい」というような内容の呟きが流れてきたので、ちょっとググってみたら見つからなかったので、作ってみました。
PRO 版の「条件付きロジック」という機能をカスタマイズするといいようだが、ここは無償版を対象とします。
まずはドキュメントを見てみたがそれらしい記述が見つからなかった。そこで、プラグインのソースコードを検索してみたら wpforms_process_antispam フィルターフックが見つかった。名前からするとスパムかどうか判定するようで、ここで文字列を返すとスパムと判定されるようです。
日本語バリデーション
下記コードをテーマの functions.php に追記します。コード内の「お問い合わせ内容」が日本語が含まれているかどうかを検証するフィールドのラベル名です。作成したフォームに合わせて変更してください。
add_filter( 'wpforms_process_antispam', function( $is_valid_not_spam, $fields, $entry, $form_data ) {
$label = 'お問い合わせ内容'; // 検証するフィールドのラベル名
if ( $index = array_search( $label, array_column( $form_data['fields'], 'label' ) ) ) {
$form_field = $form_data['fields'][$index];
if ( ! preg_match( '/[一-龠]+|[ぁ-ん]+|[ァ-ヴー]/u', $entry['fields'][$form_field['id']] ) ) {
return sprintf( '「%s」は、日本語で入力してください。', $label );
}
}
return $is_valid_not_spam;
}, 10, 4 );
これで、「お問い合わせ内容」フィールドに、日本語の文字(漢字、ひらがなおよびカタカナ)が含まれていない場合に、スパム(エラーメッセージが表示されて送信できない)と判定されます。
WPForms プラグイン
最後に
この方法は、ドキュメントに記載がないので、正しい方法かどうかはわかりません。新しいバージョンで変更される可能性などもあるのでご注意ください。