ContactForm7のカスタマイズ4点

私がいつもコンタクトフォーム7に追加する機能について記載していきます。

レスポンシブ化

デフォルトのフォーム設定では、幅が狭くなっても、項目名と入力部分は横に並んだ状態です。これを一定幅以下の時に、項目名と入力部分を縦積みにします。

デフォルトのコンタクトフォームでは、<label>タグで囲まれていますが、これを<table>タグに変更します。

デフォルトの項目では以下のようになります。

<table class="contact-table">
  <tr>
    <th>お名前 (必須)</th>
    <td>[text* your-name]</td>
  </tr>

  <tr>
    <th>メールアドレス (必須)</th>
    <td>[email* your-email]</td>
  </tr>

  <tr>
    <th>題名</th>
    <td>[text your-subject]</td>
  </tr>

  <tr>
    <th>メッセージ本文</th>
    <td>[textarea your-message]</td>
  </tr>
</table>

<div>
[submit "送信"]
</div>

これで、各項目がテーブル要素になりました。

ポイントは、tableにクラスをつける部分になります。(例ではcontact-tableクラスを追加しています。)

次に、CSSのメディアクエリを使用して、contact-tableがある一定幅以下の時に適用されるようにします。

以下のCSSを追加します。

@media (max-width: 767px) {
  .contact-table th, .contact-table td {
    width: 100% !important;
    display: block;
  }
}

style.css

私の環境では、767px以下の場合がモバイル用のレイアウトになるような設定ですので、メディアクエリにはmax-width: 767pxを設定しています。

上記幅以下の場合、thとtdが100%幅となり、display:block指定によって縦に積み重なるようになります。

もちろん、important指定などは、使用するテンプレートなどでも異なってきますので、その辺りは調整する必要があると思います。

これで、レスポンシブな問い合わせができました。

住所入力の自動化

郵便番号を追加したら、住所が自動で入力されると楽ですよね。これには、YubinBangoというライブラリを使用します。

functions.phpへの追記

テーマファイルのfunctions.phpに以下のコードを追加

wp_enqueue_script( 'yubinbango', 'https://yubinbango.github.io/yubinbango/yubinbango.js', array(), null, true );

フォームの作成

国を指定するコードをtableタグの外に埋め込みます。日本は以下のコードです。

<span class="p-country-name" style="display:none;">Japan</span>

ここまでのコンタクトフォームの全貌は以下のようになります。

<span class="p-country-name" style="display:none;">Japan</span>
<table class="contact-table">
  <tr>
    <th>お名前 (必須)</th>
    <td>[text* your-name]</td>
  </tr>

  <tr>
    <th>メールアドレス (必須)</th>
    <td>[email* your-email]</td>
  </tr>

  <tr>
    <th>郵便番号</th>
    <td>[text your-zipcode class:p-postal-code minlength:8 size:8]</td>
  </tr>

  <tr>
    <th>住所</th>
    <td>[text your-address class:p-region class:p-locality class:p-street-address class:p-extended-address]</td>
  </tr>

  <tr>
    <th>題名</th>
    <td>[text your-subject]</td>
  </tr>

  <tr>
    <th>メッセージ本文</th>
    <td>[textarea your-message]</td>
  </tr>
</table>

<div>
[submit "送信"]
</div>

ショートコードを埋め込む

[contact-form-7 id="592" title="test" html_class="h-adr"

埋め込む際には上記赤の部分を追加します。(上記ショートコードはかっこを全角で入力しています。)

以下のページにテストを作成しています。

もちろん、ショートコードはテキストモードで貼り付けてくださいね。

以下のサイトを参考にさせていただきました。各部分の詳細な説明もありますので、是非以下記事も見てみてください。

確認用メールアドレス入力欄

メールアドレスを入力してもらうフォームは結構多いと思います。しかし、間違えたメールアドレスだと、こちらから連絡もとれなくなってしましますよね。メールアドレスを入力させる場合は、確認フォームも合わせて作成したいですね。

functions.phpへの追記

functions.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 ) {
  global $my_email_confirm;
  $tag = new WPCF7_Shortcode( $tag );
  $name = $tag->name;
  $value = isset( $_POST[$name] )
  ? trim( wp_unslash( strtr( (string) $_POST[$name], "\n", " " ) ) )
  : '';
  if ($name == "your-email"){
    $my_email_confirm=$value;
  }
  if ($name == "your-email_confirm" && $my_email_confirm != $value){
    $result->invalidate( $tag,"確認用のメールアドレスが一致していません");
  }

  return $result;
}

フォームの作成

さらに、上記の確認用のフォームを追加します。

コードの全貌は以下の通り。

<span class="p-country-name" style="display:none;">Japan</span>
<table class="contact-table">
  <tr>
    <th>お名前 (必須)</th>
    <td>[text* your-name]</td>
  </tr>

  <tr>
    <th>メールアドレス (必須)</th>
    <td>[email* your-email]</td>
  </tr>

  <tr>
    <th>確認用メールアドレス</th>
    <td>[email* your-email_confirm]</td>
  </tr>

  <tr>
    <th>郵便番号</th>
    <td>[text your-zipcode class:p-postal-code minlength:8 size:8]</td>
  </tr>

  <tr>
    <th>住所</th>
    <td>[text your-address class:p-region class:p-locality class:p-street-address class:p-extended-address]</td>
  </tr>

  <tr>
    <th>題名</th>
    <td>[text your-subject]</td>
  </tr>

  <tr>
    <th>メッセージ本文</th>
    <td>[textarea your-message]</td>
  </tr>
</table>

<div>
[submit "送信"]
</div>

以下の記事を参考にさせていただきました。是非確認してみてくださいね。

Google reCAPTCHAの設定

Googleから提供されているスパム等防止のための仕組みです。

ボットによるスパムなどを防いでくれるので、是非導入したい機能です。

Googleにログイン

reCAPTCHAを追加するアカウントでgoogleにログインしておきます。

https://www.google.com/recaptcha/intro/v3beta.html

上記URLの右「MyReCAPTCHA」をクリックして、以下の画面の設定を行います。

上記赤枠を入力して、Registerを押します。Domainsは、httpとかは必要ないので、気を付けてください。

次の画面では、「keys」項目が表示されるので、「Site Key」と「Secret Key」をひかえておきます。

wordpressの設定画面に戻り、「お問合せ」->「インテグレーション」を押して、「キーを設定する」ボタンを押します。

そこに表示される「サイトキー」、「シークレットキー」にそれぞれ先ほどひかえたキーを貼り付け、保存します。

フォームに追加

コンタクトフォームにもどり、reCAPTCHAを挿入したい部分にカーソルを置きます。

「reCAPTCHA」ボタンがありますので、これを押し、「タグを挿入」ボタンを押します。

以上、私がコンタクトフォーム7を使用するときに必ず追加する機能です。これ以外にも、jQueryで動的に数値計算を行ったり、店舗だと注文先住所に発注者の住所をコピーしたりとか、カスタマイズの方向性はいろいろありますが、基本的にほぼ全部のフォームに入れる機能は基本的に上記4点をやっています。

また何か思いついたら随時追記していきます。

good wp life!