contactform7 入力制限について解説

WordPress
taro
taro

お問い合わせページの入力欄に制限をつけたいなぁ
何文字以上とか何文字以下とかできないかな

contactform7というプラグインを使用したお問い合わせページで、
入力制限を作りました。
例えば、何文字以上、何文字以下(文字数制限)、文字数カウント、先頭は○○からなどのバリデーションが作れます。

文字数制限、文字数カウントについて

contactform7の公式ページに載っているやり方です。

文字数制限

  • contactform7のお問い合わせページを開く
  • 編集ページで、[textarea minlength:10 maxlength:140]という感じで書きます。

文字数カウント

  • contactform7のお問い合わせページを開く
  • 編集ページで、[count yourmessage]という感じで書きます。

実際の例

メッセージの下にある数字が[count yourmessage]で表現した場合 
 0からカウント
その下にある数字が[count yourmessage down]で表現した場合 
 最大値から減っていくようにカウント

PHPの正規表現を使って、先頭一致などのバリデーション

次は、難しいですがPHPの正規表現を使ったバリデーションです。

まずは、フックでバリデーションを追加、フォームのnameの取得

/**
* contact-form-7でバリデーションを追加
*/
add_filter('wpcf7_validate_text', 'wpcf7_validate_post', 9, 2);
add_filter('wpcf7_validate_text*', 'wpcf7_validate_post', 9, 2);
function wpcf7_validate_post($result,$tag){
$tag = new WPCF7_FormTag($tag);
$name = $tag->name;
$value = isset($_POST[$name]) ? trim(wp_unslash(strtr((string) $_POST[$name], "\n", " "))) : "";
//$nameはContactForm7のフォーム要素 name="ここ"
//$value 入力した値

name=○○で場合分け(先頭一致)例:いちご○○

if($name === "itigo") {
  if(!preg_match("/^いちご/",$value)) {
  if (method_exists($result, 'invalidate')) {
  $result->invalidate( $tag,"いちご○○を入力してください");
  } else {
  $result['valid'] = false;
  $result['reason'][$name] = 'いちご○○を入力してください';
  }
  }
  }

name=○○で場合分け 例:半角英数字のみ入力可能

if($name === "half") {
  if(!preg_match("/^[a-zA-Z0-9_-]+$/",$value) ) {
  if (method_exists($result, 'invalidate')) {
  $result->invalidate( $tag,"半角英数字を入力してください");
  } else {
  $result['valid'] = false;
  $result['reason'][$name] = '半角英数字を入力してください';
  }
  }
  }
return $result;
}

name=○○で場合分け 例:ハイフンなしの電話番号のみ入力可能

add_filter('wpcf7_validate_tel', 'wpcf7_validate_post', 9, 2);
add_filter('wpcf7_validate_tel*', 'wpcf7_validate_post', 9, 2);
function wpcf7_validate_post($result,$tag){
$tag = new WPCF7_FormTag($tag);
$name = $tag->name;
$value = isset($_POST[$name]) ? trim(wp_unslash(strtr((string) $_POST[$name], "\n", " "))) : "";

if($name === "tel-209") {
  if(!preg_match("/^0\d{9,10}$/",$value) ) {
  if (method_exists($result, 'invalidate')) {
  $result->invalidate( $tag,"ハイフンなしで電話番号を入力してください");
  } else {
  $result['valid'] = false;
  $result['reason'][$name] = 'ハイフンなしで電話番号を入力してください';
  }
  }
  }
return $result;
}

最後のは、[text]ではなく[tel]なので、フックの修正が必要です。

コード解説

  • functions.phpに書いていく
  • フィルターフックで、バリデーションをcontactform7に追加
  • フォームのname部分をとってくる
  • nameが○○のときで場合分け
  • preg_matchで正規表現と一致していない場合は、エラーメッセージを出す
  • 一致している場合は、return

正規表現について

preg_match('/ここに正規表現を書く/')という感じで書いています
preg_matchに関しては、PHPのドキュメンテーションを参考にしてください



まとめ

文字数制限は、[textarea minlength:10 maxlength:140]といった感じでできます。

細かいバリデーションは、PHPの正規表現でほとんど可能かと思います。

間違いなどありましたらコメントよろしくお願いします。

オンラインでの運動指導もやっているので肩こり、腰、膝気になる方は下のリンクから相談してみてください!

オンライン運動指導  申し込み  
オンライン運動指導の申し込みありがとうございます。運動指導する前に、安全に運動するため、身体の状態を確認させて頂きます。 よろしくお願い致します。

また理学療法士の人は、自分の運動療法の引き出しを増やすという視点でも自分自身が受けてみるのもオススメです!

コメント