Entersquare Inc. ホームページ作成の株式会社エンタースクウェア

【MW WP Form】ひとつのフォームを複数のページで利用する

【MW WP Form】ひとつのフォームを複数のページで利用する

WordPressのお問い合わせフォームのプラグインMW WP Form。

最近はもっぱらお世話になっています。

基本的にはMW WP Formはひとつのページ、ひとつのフォームのようですが、カスタマイズをすることで「ひとつのフォームを複数のページ」で利用することができました。

公式で公開されているフックを利用するので、安心してカスタマイズできると思います。

1. フォームを作る

初めにフォームをひとつ作成します。MW WP Form > 新規作成から作成可能です。

ここでのポイントは、

  • URL設定は空にする

という点です。

その他、バリデーションや自動返信メール設定はいつも通りおこないます。

2. 確認画面、完了画面が必要な場合は固定ページで作成

それぞれ遷移するページが必要であれば、これらも先に作成しておきます。

固定ページ > 新規作成で作成します。

ここでのポイントは2つ。

  • スラッグは半角英数がいい
  • 本文には1で作成したフォームのショートコードを入れる
    ※完了ページは入れなくてもOK

スラッグはいつでもどこでも半角英数字が好ましいです。

本文にMW WP Formで作成したフォームのショートコードを入れることで、確認内容などが表示されます。

3. 複数のページにフォームを設置

1で作成したフォームを、複数のページに入れます。これもショートコードを使って入れることになるでしょう。

4. ページの遷移をカスタマイズする

最後に、ページ遷移のカスタマイズです。

MW WP Formのデフォルトでは以下の仕様になっています。

  • URL設定に入力しない場合は、フォームを設置したページのURLにリダイレクト

つまり、URL設定に何も入力しなかった場合は、フォームを設置したページだけで完結するようになっています。

確認画面も、完了画面もフォームと同じURLです。

それで問題ない場合は良いですが、例えばそれぞれ独立させたい、CVタグをページに入れたい場合などはURLを変えたくなります。

※ちなみに同じURLで完結してもGoogle タグマネージャーを使えばCVタグはいけるとのこと。

また、

  • URL設定にひとつでも入力すると「このページには直接アクセスできません。」とエラーが出る

という仕様のようで、URL設定にひとつのURLだけというのが設定ができません。

特に問題になるのが「戻るボタン」です。

それぞれ複数のページにフォームを設置しているので、「戻るボタン」ではそれぞれのページに戻りたいのです。

これを解決するためにfunctions.phpでフックを利用して、それぞれ遷移するページを設定します。

function my_mwform_redirect_url($url, $Data) {

    //戻るボタンをクリックした時に、前のページに戻るようにする
    if ($Data->get('submitBack') != '') {
        //例えば前のページのURLが/contact/の場合
        if (preg_match('/\/contact\/$/', $Data->get('_wp_http_referer') )) {
            return home_url('/contact/');
        }
        //例えば前のページのURLが/contact-recruit/の場合
        if (preg_match('/\/contact-recruit\/$/', $Data->get('_wp_http_referer') )) {
            return home_url('/contact-recruit/');
        }
    }

    //送信完了ページはURL/contact-transmit/へ遷移させる
    if ($Data->get('mwform_submitButton') != '') {
        return home_url('/contact-transmit/');
    }

    return $url;
}
add_action( 'mwform_redirect_url_mw-wp-form-XXXX', 'my_mwform_redirect_url', 10, 2 );

mwform_redirect_url_mw-wp-form-XXXXというフィルターフックを利用します。

XXXXにはフォームのkeyが入ります。keyはショートコードのです。

formのデータは引数$Dataに入ってくるので、その中身によって分岐をしてきます。

$Data->get('formのnameが入る')

ブラウザでMW WP Formを見ると分かるのですが、hidden name=”_wp_http_referer”で前のページのURLを持っていることがわかります。

それを利用して、戻るボタンをクリックした場合は前のページのURLをreturnしてあげるという流れです。

完了ページに遷移させたかったので、$Data->get(‘mwform_submitButton’)に値が入っている場合は、完了ページのURLをreturnしてあげます。

これでひとつのフォームだけで複数のページにフォームを設置できました。

フックを使って色々カスタマイズができそう

フックは色々あるようで、ぐっと使い方が広がります。詳しくは公式を。

さらに、アクションに対してもフックがあり、便利そうでした。

Solutions

ソリューション

ホームページ作成

Webサイト制作・運用保守

コーポレートサイト/サービスサイト/オウンドメディアサイト/LP/EC

ウェブマーケティングの技術を使ってホームページの作成や保守を承っております。

Webのお悩み

Webのご相談・サポート

運用のお困りごと/集客のお困りごと/運用担当が居なくなったなど

Webに関するお困りごとや、お悩みなどのご相談、サポートを承っております。

その他、アクセス解析、広告運用、SNSサポートなどWebに関する事全般承っております。

詳しく見る