Contact Form7を使ったフォームの入力項目にカタカナ制御を入れる方法です。
フリガナの項目を全角カナのみにする方法を紹介します。
1.Contact Form 7で問合せフォームを作る
Contact Form7のプラグインをインストールして、問い合わせフォームを作ります。
2.function.phpに入力制御の処理を加える
function.phpの一番下に以下の処理を記述します。(コピペでOK)
add_filter('wpcf7_validate_text', 'wpcf7_validate_kana', 11, 2); add_filter('wpcf7_validate_text*', 'wpcf7_validate_kana', 11, 2); function wpcf7_validate_kana($result,$tag){ $tag = new WPCF7_Shortcode($tag); $name = $tag->name;
$value = isset($_POST[$name]) ? trim(wp_unslash(strtr((string) $_POST[$name], "\n", " "))) : "";
// 入力項目名が、'firstname_kana' か 'lastname_kana' の場合に実行
if ( $name === "firstname_kana" || $name === "lastname_kana" ) {
// カタカナ以外だった場合
if(!preg_match("/^[ァ-ヾ]+$/u", $value)) {
$result->invalidate($tag, "全角カタカナで入力してください。");
}
}
return $result;
}
以下の部分を自身の問い合わせフォームの値に合わせて変更
if ( $name === “firstname_kana” || $name === “lastname_kana” ) {
Contact Form 7側で設定した
[text* firstname_kana placeholder”例)ヤマダ”]
[text* lastname_kana placeholder”例)ハナコ”]
と一致するようにする。
簡単な解説
ここからは、コードの解説です。不要な方は読み飛ばしてOK。
1~3行目
add_filter(‘wpcf7_validate_text’, ‘wpcf7_validate_kana‘, 11, 2);
add_filter(‘wpcf7_validate_text*’, ‘wpcf7_validate_kana‘, 11, 2);
function wpcf7_validate_kana($result,$tag){
・・・
}
ContactForm7のtextまたはtext*で関数wpcf7_validate_kanaを実行する
太字の個所は一致させる。
関数 wpcf7_validate_kana の中身
$tag = new WPCF7_Shortcode($tag);
$name = $tag->name;
$value = isset($_POST[$name]) ? trim(wp_unslash(strtr((string) $_POST[$name], “\n”, ” “))) : “”;
これはおまじない。
// 入力項目名が、’firstname_kana’ か ‘lastname_kana’ の場合に実行
if ( $name === “firstname_kana” || $name === “lastname_kana” ) {
// カタカナ以外だった場合
if(!preg_match(“/^[ァ-ヾ]+$/u”, $value)) {
$result->invalidate($tag, “全角カタカナで入力してください。”);
}
}
return $result;
”||”は演算子。(「or」、「または」の意味を持つ)
“/^[ァ-ヾ]+$/u” はカタカナという意味。
入力制御を行いたい項目が1つの場合
if ( $name === "firstname_kana" || $name === "lastname_kana" ) {
↓
if ( $name === "firstname_kana") {
全角ひらがなのみにしたい場合
if(!preg_match("/^[ァ-ヾ]+$/u", $value)) {
↓
if (!preg_match("/^[ぁ-ゞー]+$/u",$value)) {
英数のみにしたい場合
if(!preg_match("/^[ァ-ヾ]+$/u", $value)) {
↓
if(!preg_match("/^[a-zA-Z0-9]+$/u", $value)) {