CMS

Contact Form 7で確認用メールアドレスの入力フォームを加える方法

Contact Form 7はお問い合わせフォームを用意するのに、非常に便利なWordPressプラグインです。これまでWordPressを使ったサイトで、このプラグインを入れなかったことは一回もありません。

今回確認用メールアドレスを入力欄として設けなくてはならなくて調べたのですが、意外にいい方法が見つからなかったので、自分で作ってみました。

functions.phpに下記コードを追加(UTF-8で保存すること!)

<?php
add_filter( 'wpcf7_validate_email', 'wpcf7_text_validation_filter_extend', 11, 2 );
add_filter( 'wpcf7_validate_email*', 'wpcf7_text_validation_filter_extend', 11, 2 );
function wpcf7_text_validation_filter_extend( $result, $tag ) {
    $type = $tag['type'];
    $name = $tag['name'];
    $_POST[$name] = trim( strtr( (string) $_POST[$name], "\n", " " ) );
    if ( 'email' == $type || 'email*' == $type ) {
        if (preg_match('/(.*)_confirm$/', $name, $matches)){
            $target_name = $matches[1];
            if ($_POST[$name] != $_POST[$target_name]) {
                if (method_exists($result, 'invalidate')) {
                    $result->invalidate( $tag,"確認用のメールアドレスが一致していません");
                } else {
                    $result['valid'] = false;
                    $result['reason'][$name] = '確認用のメールアドレスが一致していません';
                }
            }
        }
    }
    return $result;
}
?>

※2015/3/4に修正しました。まつしたさん、情報ありがとうございます!

Contact Form 7の設定画面では次のようなフォームを記述

<p>メールアドレス<br />
[email* your-email] </p>

<p>メールアドレス (確認用)<br />
[email* your-email_confirm] </p>

これで確認用メールアドレスが実現できますよ~

63 comments

  1. aki

    はじめまして、確認用メールアドレスのやり方を探していてお邪魔しました。
    参考にさせていただいちゃいました。smilkobutaさんすごいです!
    ほんとにありがとうございます★

  2. yagura

    はじめまして
    ちょうど探していた機能だったので、
    早速試させていただきました!!!
    開発ありがとうございます!!

    が、自分の環境では、
    「確認用のメールアドレスが一致していません」
    のテキストが表示されず、
    <span>タグの赤い枠が表示されるだなので
    使用を断念しました。。。

    以下、解決の参考になればいいのですが。。。

    通常のエラーメッセージは今まで通り、
    正しく表示されてます。

      両方とも空欄の場合
       ⇒「必須項目に記入もれがあります。」
      両方とも「123」の場合
       ⇒「メールアドレスの形式が正しくないようです。」

    Contact Form 7 は ver2.4.2
    wordpress は ver3.0.3

    赤枠のソースコード
    <span class=”wpcf7-not-valid-tip” style=”display: none;”></span>

  3. smilkobuta Post author

    Contact Form 7もWordPressも私と同じバージョンですね。
    赤枠まで出るのであれば、functions.phpの文字コードがUTF-8になっていなくて、日本語のメッセージがうまく表示できていないなんて事はないでしょうか。
    例えばエラーメッセージを「xxx」とかに変えてみてもダメですか?

  4. kim

    はじめまして。Wordpress勉強中の者です。
    ちょうどこの方法を探していて、こちらのページに辿り着きました。
    とても助かりました!
    公開していただいて、ありがとうございます。

  5. smilkobuta Post author

    コメントありがとうございます~!
    こんなに需要があるなら、開発元にフィードバックとして投げてみようかな。

  6. Pingback: Contact Form 7 | ツボニチ

  7. WP初心者

    まさに探していた機能でした!
    ありがとうございます!

    上記方法にて実装してみたのですが、
    メールアドレスが一致していない場合、
    「確認用のメールアドレスが一致していません」ではなく、
    「null」と表示されてしまいました….
    何かご教授頂ければ幸いでございます。

  8. Pingback: ContactForm7の確認用メールアドレスを作る方法あいみん

  9. Pingback: ContactForm7の確認用メールアドレスを作る方法webデザイナー日記

  10. kenji

    はじめまして。
    この機能を実装したく試してみたのですがアドレスが一致しなくても送信されてしまいます。

    テーマのfunctions.phpと、プラグインのfunctions.php両方試してみたのですがうまくいかないのでお力を貸して頂けないでしょうか

    wordpress ver 3.2.1
    contact form 7 ver 3.0.1 です。

    宜しくお願い申し上げます。

  11. kenji

    申し訳ございません。
    導入できました。。。

    _confirmとするところを_comfirmとしていました。

    お陰さまで納得のいくフォームができました。
    ありがとうございます。

  12. mikan

    メールアドレスが一致していない場合、
    「確認用のメールアドレスが一致していません」ではなく、
    「null」と表示されてしまいます。
    解決方法を教えてください。
    —–

    はじめまして。
    すでに、WP初心者さんが挙げておられますが、私も同じようになりました。
    Word PressもContact Form 7の扱いも素人です。
    会社のHPで至急対応が必要になりました。
    初歩的な質問かもしれませんが、ご指導お願いします。_(_^_)_

  13. smilkobuta Post author

    @mikanさん

    Contact Form7の設定画面では、どのようなフォームを設定していますか?
    差支えなければ、フォームの内容を教えて下さい。

  14. mikan

    @smilkobuさま

    この度はお世話になります!
    お返事いただき、とても嬉しいです★
    WPを初めて使うので、このようなサイト作っていただき、本当に助かります。
    フォームの設定ですが、以下のように行いました。
    よろしくお願いします。_(_^_)_
    —–
    会社名 (必須)
     [text* text-105 watermark “会社名”]

    ご住所 (必須)
     [text* text-207 10/ akismet:author watermark “郵便番号”] [text* text-518 40/ akismet:author watermark “ご住所”]

    お電話番号 (必須)
     [text* text-643 15/ watermark “お電話番号”]

    お名前 (必須)
     [text* your-name akismet:author watermark “お名前”]

    メールアドレス (必須)
     [email* your-email]
     [email* your-email_confirm watermark”確認のため再度ご入力ください”]

    ご希望のセミナーにチェックを入れてください
     [checkbox* checkbox-581 use_label_element “特別セミナーA” “特別講演” “特別セミナーB” “オープンブース”]

    コメント
     [textarea textarea-341 watermark “ご自由にお書きください”]

    [submit “送信”]
    —–

  15. smilkobuta Post author

    @mikanさん

    フォームの内容は問題ないようですので、おそらくfunctions.phpの文字コードがUTF-8になっていないのではないでしょうか。
    UTF-8対応のテキストエディタを使うか、WordPress管理画面の[外観]->[テーマ編集]->[functions.php]で直接編集してみてください。

  16. mikan

    @smilkobuさま

    この度は、お世話になりました。
    “WordPress管理画面の[外観]->[テーマ編集]->[functions.php]で直接編集”
    というやり方で上手くできました!!

    これで期日に間に合いそうです。
    本当に、本当に、ありがとうございました。 (*^▽^*)ノ

  17. Pingback: WordpressのContact Form 7でメールアドレスの確認をする | kou-systems.info

  18. kachi

    大変あっさり出来すぎてとても感動しました。
    ありがたく使用させていただきます。
    スグにここに出会えてよかったです

  19. smilkobuta Post author

    @kachiさん

    コメントありがとうございます。
    本家にも取り込んで欲しいところですねー。

  20. こぐま

    やり方が分からなかったので助かりました!
    ありがとうございます!
    使わせていただきます◎

  21. happy

    便利な機能を紹介して頂きありががとうございます!
    お分かりになればお教え頂きたいのですが、現在、質問項目を変えた二つのフォームを設置しています。
    一つ目に設置したフォームでは、問題なく動作するのですが、二つ目に設置したフォームでは、メールアドレスを正しく入力してもエラーメッセージ”確認用のメールアドレスが正しくありません”と表示されてしまいます。
    解決方法がお分かりになればお教え頂けませんでしょうか。

  22. happy

    すみません!自己解決致しました!
    タグの指定が[your-email]で重複していたのが原因でした。
    ありがとうございました。

  23. non

    こんにちは。まさに探していた機能が簡単に実装できることに感動しています。ありがとうございます!

    早速設置したところ、UTF-8fで保存した場合、コンタクトフォームは正常に作動はするのですが、管理画面へのログインページ(wp-login.php)にアクセスしたり、ログイン後、管理画面で何か作業して保存しようとするたび下記のようなエラーが出ます。(けれども保存はできている。)

    Warning: Cannot modify header information – headers already sent by (output started at ファイルのパス/wp-includes/functions.php:316 ) in ファイルのパス/wp-includes/pluggable.php on line 876

    試しに、ASCIIで保存すると、注意文言が日本語で表示されない代わりにその他は正常に動いています。

    お手数おかけしますが、お分かりのようでしたら、ご教授お願いいいたします。

  24. non

    その後、いろいろ試していたら、ASCIIで保存しても同じ症状だということが発覚しました。
    正確な情報がお伝えできず、失礼いいたしました。

    現在、サブディレクトリにWPをインストールしていて、一階層上のメインURLを入力すれば、サブディレクトリのホームページが表示されるよう、index.phpを書き換えています。
    書き換え前
    require(‘./wp-blog-header.php’);
    書き換え後
    require(‘./サブディレクトリ名/wp-blog-header.php’);

    このあたりが原因しているのかもと思っています。

    なんだか話が難しくなってしまったので、ご面倒でしたら、ご対応いただかなくても大丈夫です。

    失礼いいたしました!!

  25. smilkobuta Post author

    @nonさん

    「wp-includes/functions.php」の316行目でレスポンスボディが出力されているというエラーのようですので、そこを確認するといいですよ。

    —-
    1: <?php
    2:     // もろもろ
    3: ?>
    4:
    —-

    ↑のように、4行目に空行があるだけでも、レスポンスボディ(+レスポンスヘッダ)が出力されますので注意し見てみてください。

  26. non

    おっしゃるっ通り、空行削除で無事に解決いたしました!!

    助かりました。本当にありがとうございました!

  27. non

    本当に初歩的なミスでお手を煩わせてしまい、失礼いいたしました。

    勉強になりました!ありがとうございます!

  28. Pingback: Contact Form 7で確認用メールアドレスの入力フォームを加える方法 - 競技麻雀サークル☆一向聴(いーしゃんてん)

  29. Pingback: 重要リンク - 競技麻雀サークル☆一向聴(いーしゃんてん)

  30. Pingback: contact form 7 アドレスチェック

  31. Pingback: Contact Form 7に確認用のメールアドレスを追加してみた | 京都のマンションと不動産

  32. Pingback: Contact Form 7で確認用メールアドレスの入力フォームを加える方法 | HOTEL INDEX

  33. Pingback: Contact Form 7で確認用メールアドレスの入力フォーム | WiLL Home ウィルホーム

  34. Pingback: サイト作成用掲示板 | Chirojournal

  35. Pingback: Contact Form 7 でメールアドレスと確認用メールアドレスの整合性チェックを行う【WordPress】 | ホームページ制作(WEB作成)は八戸市(青森)の【北の国ウェブ工房へ】!

  36. まつした

    はじめまして。こちらの方法をいつもありがたく使わせて頂いております。
    Contactform7のアップデートに伴い、いつからか2つのアドレスが一致しなくても警告が出なくなっていたようなので、私のサイトの方でちょっと改造したコードを掲載させて頂きました。
    smilkobutaさんの方でも対応されましたら、そちらをご紹介させていただきますので、宜しくお願い致します!

  37. Pingback: Contact Form 7 (ver.4.1) で確認用メールアドレスの入力項目を追加する | WordPressカスタマイズ事典

  38. smilkobuta Post author

    @まつしたさん
    情報ありがとうございました。
    WordPressテーマの更新に手間取って、なかなか確認できずにいました。
    コードを修正しました。

  39. れいこ

    はじめまして。
    @smilkobuさま、@まつしたさま

    とても助かりました!!ありがとうございました。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

Comments links could be nofollow free.