contact form7 よくあるカスタマイズ

68
2013/01/13 WordBench京都 Cherry Pie Web 川井昌彦 Contact Form7 よくあるカスタマイズ

Upload: masahiko-kawai

Post on 28-Nov-2014

66.408 views

Category:

Technology


3 download

DESCRIPTION

WordBench京都 2013年1月13日

TRANSCRIPT

Page 1: Contact Form7 よくあるカスタマイズ

2013/01/13 WordBench京都

Cherry Pie Web 川井昌彦

Contact Form7の よくあるカスタマイズ

Page 2: Contact Form7 よくあるカスタマイズ

2

自己紹介●川井昌彦(かわいまさひこ) @sakuragi_kei 東京の制作会社で24年間勤めた後、  京都府舞鶴市に帰郷してフリーランスで活動中

  実は、DTPのほうが経験が長い (このスライドも InDesign で作っています)   実は、MovableTypeのほうが経験が長い

 小桜インコ・シロハラインコ・黒い柴犬のパパ

Cherry Pie Web http://www.cherrypieweb.com

Page 3: Contact Form7 よくあるカスタマイズ

3

Contact Form7 について

Page 4: Contact Form7 よくあるカスタマイズ

4

Contact Form7とは?WordPressに 「メールフォーム」を追加するプラグイン

一から作ると、プログラミングが必要で めんどくさい「メールフォーム」を、

管理画面の設定だけで作成できます

Page 5: Contact Form7 よくあるカスタマイズ

5

メールフォームの流れ

チェック、送信部分は、HTMLだけでは作れない

入力• Formタグ、

Inputタグなどで構成

• HTMLのみで 作れる

チェック• 入力値の

チェック• プログラミング

が必要

送信• メール本文構築、

メールサーバー との通信

• プログラミング が必要

Page 6: Contact Form7 よくあるカスタマイズ

6

チェックは面倒だけどおろそかにできない!• セッション管理• 不正なタグやコマンドを入力された場合の対処• メール送信失敗時の対処• もちろん、

必須チェック、 メールアドレスチェック、 確認用入力の整合チェック             ・・・なんかも必要です

Page 7: Contact Form7 よくあるカスタマイズ

7

でもContact Form7なら  プログラミング不要!難しそうなところは全部やってくれますプログラミングとか、できなくても大丈夫メールサーバーとか気にしなくてもOK (気にしないといけないこともあるけど・・・)

Page 8: Contact Form7 よくあるカスタマイズ

8

本日のメニュー≫ よくあるカスタマイズ●公式サイトを見ればすぐにできること1. 自動返信メールを送信する2. 送信日時などをメールに挿入する3. フォームのデフォルト値を設定する・透かし文字を入れる4. Google Analyticsで送信完了イベントを取得する

●公式サイトを読めば書いてあるけど、わかりにくいこと1. セレクトメニュー・ラジオボタン・チェックボックスで、

表示文字と送信される値を異なる値にする2. テキストフィールドへ値を渡す

Page 9: Contact Form7 よくあるカスタマイズ

9

●公式サイトには書いてないこと(非推奨なものあり)1. IME(日本語入力)の自動切り替えをする2. 送信ボタンを画像にする3. 郵便番号入力で住所を自動入力する4. メールアドレス入力時に、確認用メールアドレスを入れて整合チェックをする5. 送信完了画面を表示する6. 確認画面を表示する

≫ トラブルシューティング1. メールフォームから大量のスパムメールが送られてくる2. メールが届かない3. 送信ボタンを連打される

Page 10: Contact Form7 よくあるカスタマイズ

10

Contact Form7 よくあるカスタマイズ

Page 11: Contact Form7 よくあるカスタマイズ

11

自動返信メールを送信するメール(2)を使うあて先のところに、メールアドレス入力フォームの名前を 指定すればOKです[your-email] とかです。

書いてある

Page 12: Contact Form7 よくあるカスタマイズ

12

送信日時などをメールに挿入する特別なメールタグを使う

(例)[_date] 送信日付[_time] 送信時刻[_remote_ip] 送信者のIPアドレス[_post_title]  メールフォームのある投稿のタイトル

書いてないわかりにくい書いてある

Page 13: Contact Form7 よくあるカスタマイズ

13

フォームのデフォルト値を設定する

たとえば、こんな感じ

書いてある

Page 14: Contact Form7 よくあるカスタマイズ

14

⑴テキスト" " で囲んでデフォルト値を指定します[text text1 "デフォルト値"]

watermarkオプション → 透かし文字になります[text text2 watermark "入力の説明"]

Page 15: Contact Form7 よくあるカスタマイズ

15

⑵チェックボックス・ラジオボタンdefaultオプションで、何個目かを指定します チェックボックスは、複数指定できます ラジオボタンは、複数指定できません[checkbox your-check2 default:2_4 "a" "b" "c" "d" "e"]

Page 16: Contact Form7 よくあるカスタマイズ

16

⑶セレクトメニューdefaultオプションで、何個目かを指定します 複数指定したいときは multipleオプションをつけます[select your-select1 multiple default:2_4 "a" "b" "c" "d" "e"]

初期値を空にするときは、 include_blankオプションをつけます[select your-select2 include_blank "a" "b" "c" "d" "e"]

(注意)表示は「…」ですが、     送信される値は null になります!

Page 17: Contact Form7 よくあるカスタマイズ

17

セレクトメニュー・ラジオボタン・ チェックボックスで、表示文字と 送信される値を異なる値にする値を | で区切る[select your-select "option1|value1" "option2|value2" "option3|value3"]

書き出されるHTMLは、 | より前の文字になっていますが、 メールに埋め込まれる値は、 | より後の文字になります※送信される値は送信時にプラグインが置き換えるので、  ユーザーに知られることがありません。

わかりにくい

Page 18: Contact Form7 よくあるカスタマイズ

18

テキストフィールドへ値を渡すフォームへGETパラメータで渡す1. フォームで値を渡したい部分に名前をつけます<p>お名前 (必須)<br /> [text* your-name] </p>

<p>題名<br /> [text your-subject] </p>

2. フォームへのリンクに GETパラメーターを仕込みます

<a href="/wp/?page_id=n&yourname=名前&subject=題名">フォームへ</a>

(フォームとパラメータの名前は違うものにしたほうが、後でデバッグしやすいです)

わかりにくい

Page 19: Contact Form7 よくあるカスタマイズ

19

3. functions.php に、 フォームの内容に応じて下記のように記述します

function my_tag_filter($tag){ if ( ! is_array( $tag ) ) return $tag;

if(isset($_GET['yourname'])){ $name = $tag['name']; ←ここは変えちゃダメ! if($name == 'your-name') $tag['values'] = (array) $_GET['yourname']; }

if(isset($_GET['subject'])){ $name = $tag['name']; if($name == 'your-subject') $tag['values'] = (array) $_GET['subject']; }

return $tag;

}

add_filter('wpcf7_form_tag', 'my_tag_filter', 11);

Page 20: Contact Form7 よくあるカスタマイズ

20

しかし!  これだと、IEで日本語のパラメータが   文字化けしてしまいます!!→ フォームへのリンクで、urlencode関数を使います<a href="/wp/?page_id=xxx &yourname=<?php echo urlencode('名前'); ?> &subject=<?php echo urlencode('題名'); ?>">フォームへ</a>

(読みやすいように改行しています)

Page 21: Contact Form7 よくあるカスタマイズ

21

投稿やページに入れる時はショートコードを使いますfunctions.php でショートコードを定義function urlencode_text_shortcode($attr) { extract(shortcode_atts(array( 'val' => '', ), $attr)); return urlencode($val); } add_shortcode('urlencode_text', 'urlencode_text_shortcode');

投稿やページでは、<a href="/wp/?page_id=xxx &yourname=[urlencode_text val='名前'] &subject=[urlencode_text val='題名']">フォームへ</a>

他のブラウザだと問題がみつからないので、 IEでのテストは必ずやりましょう!

Page 22: Contact Form7 よくあるカスタマイズ

22

IME(日本語入力)の 自動切り替えをするフォーム設定画面でタグにclassを指定し、CSSでIMEのモードを指定する1. フォームでclass指定します<p>お名前<br /> [text your-name class:name] </p>

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

<p>メッセージ本文<br /> [textarea your-message class:message] </p>

書いてない

Page 23: Contact Form7 よくあるカスタマイズ

23

2. style.cssでIMEのモードを指定しますform.wpcf7-form .email { ime-mode: inactive; ←IME OFF }

form.wpcf7-form .name, form.wpcf7-form .message { ime-mode: active; ←IME ON

}

Page 24: Contact Form7 よくあるカスタマイズ

24

送信ボタンを画像にする⑴ CSSで画像にするフォーム指定時に、送信ボタンにclassをつけます[submit class:imgsubmit]

style.cssで背景画像として設定しますinput.imgsubmit { border: none; width: 100px; ←画像の幅 height: 30px; ←画像の高さ background: url(送信ボタンの画像のURL) left top no-repeat; text-indent: -9999px; ←ボタンのテキストを非表示にする }

(読みやすいように改行しています)

書いてない書いてない

Page 25: Contact Form7 よくあるカスタマイズ

25

⑵自前の送信ボタンにする<input type="image" value="送信" src="ボタン画像のURL" class="wpcf7-form-control wpcf7-submit" />

(読みやすいように改行しています) ・ボタン画像のURLは、絶対URLか、ルートディレクトリからのパス ・class="wpcf7-form-control wpcf7-submit" をつけないと、  メール送信時にローディング画像が表示されません

マウスオーバーさせたいなら、こんな感じです<input type="image" value="送信" class="wpcf7-form-control" src="通常のボタン画像のURL" onmouseover="this.src='マウスオーバー時のボタン画像のURL'" onmouseout="this.src='通常のボタン画像のURL'" class="wpcf7-form-control wpcf7-submit" />

(読みやすいように改行しています)

Page 26: Contact Form7 よくあるカスタマイズ

26

郵便番号入力で  住所を自動入力するAjaxzip3 を組み込む(簡単なJavaScriptを組みます)

書いてない書いてない

Page 27: Contact Form7 よくあるカスタマイズ

27

1. Contact Form7 のフォームに id を設定します<p>郵便番号<br /> [text zip1] - [text zip2 id:zip]</p> <p>住所<br /> [text address] </p>

2. フォームに onKeyupイベントを追加するため、 JavaScriptを作成します

(テーマディレクトリ)/js/jquery.wpcf7.ajaxzip3.js$(function(){ $("#zip").keyup(function(event){ AjaxZip3.zip2addr("zip1","zip2","address","address"); }) })

※AjaxZip3の書式 AjaxZip3.zip2addr("〒上3桁", "〒下4桁", "都道府県", "市区町村", "町域大字", "丁目番地" );

Page 28: Contact Form7 よくあるカスタマイズ

28

3. functions.php で読み込みますfunction cf7_ajaxzip3() {

wp_enqueue_script( 'ajaxzip3', 'http://ajaxzip3.googlecode.com/svn/trunk/ajaxzip3/ajaxzip3.js', array('jquery'));

wp_enqueue_script( 'wpcf7-ajaxzip3', get_stylesheet_directory_uri().'/js/jquery.wpcf7.ajaxzip3.js', array('ajaxzip3'));

}

add_action('wp_print_scripts', 'cf7_ajaxzip3');

(読みやすいように改行しています) wp_enqueue_script を使うと、  bodyの閉じタグの直前にスクリプトが出力されます。

Page 29: Contact Form7 よくあるカスタマイズ

29

※jQueryは、読み込み直しましょう。WordPressにはjQueryが組み込まれていますが、noConfrictが含められていて、関数をカプセル化しないと使えない仕様になっていて使いづらいです。また、下記の形で読み込んだほうが、一般的に高速で動作します。function load_cdn() { if ( !is_admin() ) { wp_deregister_script('jquery'); wp_enqueue_script( 'jquery', 'http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js', array(), '1.7.2' ); } } add_action('init', 'load_cdn');

(jQueryのバージョンは、新しいものに置き換えていただいても良いと思います)

Page 30: Contact Form7 よくあるカスタマイズ

30

メールアドレス入力時に、  確認用メールアドレスを入れて   整合チェックをするフィルターフックに チェックプログラムをひっかけるContact Form 7で 確認用メールアドレスの入力フォームを加える方法http://hello.lumiere-couleur.com/smilkobuta/2010/12/02/contact-form-7%E3%81%A7%E7%A2%BA%E8%AA%8D%E7%94%A8%E3%83%A1%E3%83%BC%E3%83%AB%E3%82%A2%E3%83%89%E3%83%AC%E3%82%B9%E3%81%AE%E5%85%A5%E5%8A%9B%E3%83%95%E3%82%A9%E3%83%

BC%E3%83%A0%E3%82%92%E5%8A%A0/

書いてない

Page 31: Contact Form7 よくあるカスタマイズ

31

1. フォームに確認用のタグを追加します<p>メールアドレス<br /> [email* your-email] </p>

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

確認用メールアドレスの名前は、 メールアドレスの名前に、 _confirm を付け足したものになります

Page 32: Contact Form7 よくあるカスタマイズ

32

2. functions.phpに以下を書きます (参考サイトに載っているコードの丸写しでOK)<?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]) { $result['valid'] = false; $result['reason'][$name] = '確認用のメールアドレスが一致していません'; } } } return $result; } ?>

Page 33: Contact Form7 よくあるカスタマイズ

33

送信完了画面を表示する

もし、クライアントから「送信完了画面を作ってください」と言われたら・・・まず、

「何のために必要なんですか?」

と聞いてください

Page 34: Contact Form7 よくあるカスタマイズ

34

そしてもし、「Google Analyticsで         

   フォーム送信をトラッキングしたいから」

と言われても・・・

(つまり、「送信完了ページへの移動」を       「フォーム送信完了」としたいということ)

Page 35: Contact Form7 よくあるカスタマイズ

35

「そのために、  送信完了画面を作る必要は

  あ り ま せ ん !」

Page 36: Contact Form7 よくあるカスタマイズ

36

Google Analyticsで 送信完了イベントを取得する方法_trackPageviewを使う●フォーム送信を Google Analytics でトラッキングするhttp://contactform7.com/ja/tracking-form-submissions-with-google-analytics/

(注意)上記のページに書いてある方法は「同期式」トラッキングコード使用時のものですが、 最近はほとんど「非同期式」です。非同期式の場合の説明もあるのですが、わかりづらいので注意してください。

書いてある

Page 37: Contact Form7 よくあるカスタマイズ

37

管理画面のフォーム設定ページの一番下に「その他の設定」の項目があるので、そこに以下の行を挿入しますon_sent_ok: "_gaq.push(['_trackPageview', 'complete.html']);"

※書式 _gaq.push(['_trackPageview', '仮想ページ名']);

  仮想ページ名は、実際に存在しなくても構いません。

ページへのリンクとして認識されるので、  目標値(コンバージョン)に設定できます。_trackEventを使って、フォーム送信をイベントとしてとらえることもできます。 イベントも目標値として設定できるらしいです。また、仮想ページを目標値にすると、ウェブマスターツールでクロールエラーが記録されることがあるらしい(検索パフォーマンスには影響がない)です。

Page 38: Contact Form7 よくあるカスタマイズ

38

話が脱線したので、元に戻します・・・

では、Google Analyticsのトラッキングが目的でない場合は・・・?たとえば、「完了メッセージが下の方に出るので、気づきにくい」

「送信完了後に、メールフォームが残ってたらカッコ悪い」

「違うページへのリンクや、バナーを表示したい」

なんてときです。

Page 39: Contact Form7 よくあるカスタマイズ

39

⑴送信完了後、完了ページへ飛ばす1. 固定ページなどで完了ページを作ります2. フォーム設定の「その他の設定」に、下記のように記述し

ますon_sent_ok: "location = '完了ページのURL';"

先ほど出てきた「on_sent_ok」は、送信完了後に、 そのあとに記述したJavaScriptを実行します

Page 40: Contact Form7 よくあるカスタマイズ

40

⑵CSSでなんとかする実は、さきほどのようなことなら、CSSでなんとかなります

Page 41: Contact Form7 よくあるカスタマイズ

41

●送信完了後、フォーム部分を非表示にして  メッセージだけ表示する1. フォーム設定画面で、全体をdivタグで囲みます<div class="form-wrapper"> <p>お名前<br /> [text your-name]</p> <p>メールアドレス<br /> [email your-mail]</p> <p>[submit "送信"] </div>

2. style.cssに下記のように記述します.sent .form-wrapper { display: none; }

フォームが送信されると、ContactForm7プラグインによって、 formタグに .sentというクラスがつけられるので、 送信完了後にdivで囲んだ部分が非表示になります

Page 42: Contact Form7 よくあるカスタマイズ

42

●送信完了後、別のテキストや画像を表示する  (さきほどの応用です)1. フォーム設定画面で、全体をdivタグで囲みます

さらに、送信後に表示したいものを、divで囲んで記述します<p>お名前<br /> [text your-name]</p> <p>メールアドレス<br /> [email your-mail]</p> <p>[submit "送信"] <div class="complete-display"> <p>こちらのページもご覧ください<br /> <a href="/hoge.html"><img src="/img/sample.jpg"></a></p> </div>

2. style.cssに下記のように記述します.wpcf7-form .complete-display { display: none; } .wpcf7-form.sent .complete-display { display: block; }

Page 43: Contact Form7 よくあるカスタマイズ

43

●メッセージの表示位置を変える1. フォーム設定画面で、メッセージを表示したい位置に [response] を記述します[response]

<p>お名前<br /> [text your-name]</p> <p>メールアドレス<br /> [email your-mail]</p> <p>[submit "送信"]

<div class="complete-display"> <p>こちらのページもご覧ください<br /> <a href="/hoge.html"><img src="/img/sample.jpg"></a></p> </div>

これだと、フォームよりもメッセージが上に表示されます

Page 44: Contact Form7 よくあるカスタマイズ

44

確認画面を表示するContactForm7の作者は、 確認画面は「いらないもの」という考えらしいです・・・http://ja.forums.wordpress.org/topic/648

で、いろいろググってみたけれど、  プラグインなど、   管理画面だけで解決する方法は見当たりません

書いてない

Page 45: Contact Form7 よくあるカスタマイズ

45

JavaScriptで、送信ボタンを押す前に 確認フェーズを「割り込ませる」●wordpressのcontact form7で確認画面を出す  手軽なライブラリhttp://aulta.jp/library/wordpress/contactForm7Confirm.html

JavaScriptをアップロードして、設定部分を修正し、 header.php とかで読み込ませるだけこれなら、なんとかできそうかも?

Page 46: Contact Form7 よくあるカスタマイズ

46

1. フォームに class="title" をつけます 囲まれた部分がタイトルとして認識され、エラー表示の時に使われます 送信ボタンは、任意のクラスで囲みます

<p><span class="title">本文</span><br /> [text your-text] </p>

<p><span class="title">メールアドレス</span><br /> [email* your-mail] </p>

<p><span class="title">メールアドレス(確認用)</span><br /> [email* your-mail_confirm] </p>

<p class="submit-btn"><input type="image" value="送信" src="/wp/wp-content/themes/wbkyoto2013_1/img/btn_submit.jpg" class="wpcf7-form-control wpcf7-submit" /></p>

Page 47: Contact Form7 よくあるカスタマイズ

47

2. ダウンロードしたファイルを解凍し、JSファイルを開き、設定をフォームに合わせて書き換えます path : フォームがある投稿/ページのパス(カンマで区切って複数可) button :  areaClassName : 送信ボタンを囲ったクラス  confirm : 確認ボタンのHTML  rewrite : 戻るボタンのHTML

'path' : ['/wp/inquiry/'], 'button' : { 'areaClassName' : 'submit-btn', 'confirm' : '<input class="button-confirm" type="button" value="確認へ" />', 'rewrite' : '<input class="button-rewrite" type="button" value="書き直す" />' }

フォームによってボタンを変えたいときは、このブロックを複製してください※投稿の場合、パーマリンク設定が「投稿名」でないと動作しません  ( '/wp/?p=1' と指定しても動作しない)

Page 48: Contact Form7 よくあるカスタマイズ

48

(送信ボタンを画像にした場合)CSSで送信ボタンを画像にした場合は、styles.css に指定を追加します.submit-btn input { border: none; width: 100px; ←画像の幅 height: 30px; ←画像の高さ background: url(送信ボタンの画像のURL) left top no-repeat; text-indent: -9999px; ←ボタンのテキストを非表示にする }

.submit-btn input.button-confirm { /* 確認ボタン */ background: url(確認ボタンの画像のURL) left top no-repeat; }

.submit-btn input.button-rewrite { /* 戻るボタン */ background: url(戻るボタンの画像のURL) left top no-repeat; }

Page 49: Contact Form7 よくあるカスタマイズ

49

送信ボタンを、<input type="image" ...>で画像にした場合は、 スクリプト冒頭の設定で、「確認」ボタン、「戻る」ボタンを、 <input type="image" ...>で指定します'button' : { 'areaClassName' : 'submit-btn', 'confirm' : '<input class="button-confirm" type="image" src="/wp/wp-content/themes/wbkyoto2013_1/img/btn_confirm.jpg" value="確認へ" />',

'rewrite' : '<input class="button-rewrite" type="image" src="/wp/wp-content/themes/wbkyoto2013_1/img/btn_back.jpg" value="書き直す" />'

Page 50: Contact Form7 よくあるカスタマイズ

50

3. ダウンロードしたCSSファイルと、先ほど修正したjSファイルをアップロードします (テーマディレクトリの下に、jsディレクトリを作ってアップするのがおすすめ)

4. CSSファイルとJSファイルを、テンプレートで読み込みます (page.php, single.php など)

<?php

wp_enqueue_script('wpcf7-confirm', get_stylesheet_directory_uri().'/js/contact-form7-confirm.js', array('jquery'), '0.0.1');

wp_enqueue_style( 'wpcf7-confirm-style', get_stylesheet_directory_uri()().'/js/contact-form7-confirm.css', array('twentytwelve-style') );

?>

<?php get_header(); ?>

Page 51: Contact Form7 よくあるカスタマイズ

51

  と・こ・ろ・が・・・ 「確認用メールアドレスの整合チェック」             と組み合わせると、

確認画面では、  確認用メールアドレスが違っていてもエラーが出ず、 確認画面で送信ボタンを押した後で、  「確認用メールアドレスが合っていない」             というエラーが出る・・・

Page 52: Contact Form7 よくあるカスタマイズ

52

確認画面で、エラーを出したいので、

「確認用メールアドレスの整合チェック」を  さきほどのスクリプトに組み込みます (JavaScript初心者だと、ちょっと難しいかも)

Page 53: Contact Form7 よくあるカスタマイズ

53

1. 冒頭の設定部分に、確認用メールアドレスチェック時のエラーメッセージを追加します

email : { match : /^[A-Za-z0-9]+[\w-]+@[\w\.-]+\.\w{2,}$/, before : '', after : 'を確認してください。' },

email_confirm : { before : '', after : 'が合っていません。' }

直前の } の後に、カンマを追加するのを忘れないように!

Page 54: Contact Form7 よくあるカスタマイズ

54

2. メールアドレスの形式をチェックする部分を探し、 その続きに追加で、 「確認用メールアドレス整合チェック」を組み込みます

if (child.hasClass('wpcf7-text')){ if (child.hasClass('wpcf7-validates-as-required') && child.val().length == 0){ error.append(jQuery('<li>').text(option.validates.required.before + title.replace('必須', '') + option.validates.required.after)); jQuery(this).parents('tr').addClass('error'); } else if (child.hasClass('wpcf7-validates-as-email') && ( ! child.val().match(option.validates.email.match))){ error.append(jQuery('<li>').text(option.validates.email.before + title.replace('必須', '') + option.validates.email.after)); jQuery(this).parents('tr').addClass('error'); (この続きに・・・)

Page 55: Contact Form7 よくあるカスタマイズ

55

} else if (child.hasClass('wpcf7-validates-as-email')) { var email_conf_name = 'span.'+child.attr('name')+'_confirm input'; if ( jQuery(email_conf_name)[0] ) { if (jQuery.trim( child.val()) != jQuery.trim(jQuery(email_conf_name).val())) { error.append(jQuery('<li>').text(option.validates.email.before + title.replace('必須', '') + option.validates.email_confirm.after)); jQuery(this).parents('tr').addClass('error'); } } }

【解説】 子要素に class="wpcf7-validates-as-email" をもつ要素のname属性を取得し、それに _confirm を追加したname属性を持つ要素を探します 見つかった場合、それぞれの値を比較し、異なっていればエラーメッセージを設定しますこの作業をした場合は、functions.php への追加記述は不要です

Page 56: Contact Form7 よくあるカスタマイズ

56

Contact Form7 トラブルシューティング

Page 57: Contact Form7 よくあるカスタマイズ

57

メールフォームから 大量のスパムメールが送られてくる●主な対策1. CAPTHA (標準機能)

2. クイズ (標準機能)

3. Akismet (標準対応)

4. Honeypot (追加プラグイン) ←おすすめ!

Page 58: Contact Form7 よくあるカスタマイズ

58

⑴CAPTHA画像で表示された文字を入力させる

⑵クイズクイズを用意して、答えを入力させる

上記の2つは・・・・効果が高い・ContactForm7標準で使える・ユーザーに面倒を強いる(利用率が非常に落ちる)

Page 59: Contact Form7 よくあるカスタマイズ

59

⑶Akismet公開されているブラックリストを使用して、スパムかどうかを判断する• Akismetプラグインは、WordPressに入っている• ContactForm7では、簡単な設定で使える• 営利目的のサイトは有償(5ドル/月)

Page 60: Contact Form7 よくあるカスタマイズ

60

⑷Honeypot ←おすすめ!スパムメール自動送信システムの動作を、逆に利用したスパム対策スパムメール自動送信システムは、全てのフィールドに何かしらの入力を行うようになっているそこで、非表示のダミーフィールドを作って、 そこに何か入力されていたら、メールを送信しない

「ContactForm7 Honeypot」プラグイン

Page 61: Contact Form7 よくあるカスタマイズ

61

メールが届かない!まずは、ContactForm7のFAQを読んで、設定ミスがないか確認しましょうPHPの動作モードによって、対策をしないと動かないことがあります

  それでも、メールが届かない場合・・・

   または、一部にだけメールが届かない場合・・・    (Gmailには届くのに、さくらには届かないとか)

Page 62: Contact Form7 よくあるカスタマイズ

62

送信メールサーバーが スパム扱いされているかも!?Amazon EC2などでよくあるケースDNS逆引き設定がされていない IPアドレスがブラックリストに登録されている など自分が悪いことしていなくても、ブラックリストに登録されてしまうことはありますサーバー管理者に言えば対応してくれますが、 Amazonやブラックリスト管理団体とは、 英語でのメールのやりとりが必要です

Page 63: Contact Form7 よくあるカスタマイズ

63

クライアントからのメールは届くのに、WordPressからは届かない場合

同じドメインなのに、WordPressからだけ届かない!

1. 送信側のメールサーバーがブラックリストに登録されていても、受信側のメールサーバーがそのブラックリストを使っていなければ、メールが届きます

2. Webサーバーとメールサーバーが違うかも (Google Appsを使っている場合など)

→いずれにせよ、WordPressで対策が必要です

Page 64: Contact Form7 よくあるカスタマイズ

64

WordPressで使う メールサーバーを指定する強制的に他のメールサーバーを指定するプラグイン・WP Mail SMTP・Cimy Swift SMTP

設定項目が多少違うが、普通に使う分にはどちらでもOKメーラーソフトに設定するのと同じような項目を設定することで、他のサーバーからメールを送ることができる

Page 65: Contact Form7 よくあるカスタマイズ

65

送信ボタンを連打されるContact Form7で作成したフォームは、 送信ボタンを連打すると二重送信されてしまいます

●JavaScriptで防止しますjQueryでsubmit(送信)ボタンの2度押しを禁止する 「disableDoubleSubmit」プラグイン  ※WordPressのプラグインではありません!

Page 66: Contact Form7 よくあるカスタマイズ

66

1. スクリプト jquery.disableDoubleSubmit.js をダウンロードします2. 新規に下記のJavaScriptファイルを作成し、適当な名前を付けて保存します

(例として、disableDoubleSubmit_init.js という名前を付けて保存します)(function() {

$(function(){

$("form").disableDoubleSubmit(1000);

});

})(jQuery);

"form" と指定すると、全てのformタグに対して有効になります "form#mailform1" などと、idを指定することもできます1000 は、再度送信ボタンが押せるようになるまでの時間(ミリ秒)です サーバーが遅くて送信処理に時間がかかるときは、長く設定してください

3. 上記の2ファイルをテーマディレクトリのjsディレクトリにアップロードします (テーマディレクトリの下に、jsディレクトリを作ってアップするのがおすすめ)

Page 67: Contact Form7 よくあるカスタマイズ

67

4. functions.php で読み込みますfunction cf7_disableDoubleSubmit() {

wp_enqueue_script('disableDoubleSubmit', get_stylesheet_directory_uri().'/js/jquery.disableDoubleSubmit.js', array('jquery'));

wp_enqueue_script('disableDoubleSubmit_init', get_stylesheet_directory_uri().'/js/disableDoubleSubmit_init.js', array('disableDoubleSubmit'));

}

add_action('wp_print_scripts', 'cf7_disableDoubleSubmit');

(読みやすいように改行しています)

Page 68: Contact Form7 よくあるカスタマイズ

68

今日は、このへんで、おしまいです。

 ご清聴ありがとうございました。