MW WP Form で作成したフォームの送信先をカスタムフィールドでページごとに指定する

WordPressのメールフォーム作成プラグイン「MW WP Form」で作成したフォームでは、通常1つのフォームに対して送信先は固定です。
※送信先メールアドレス自体は複数設定できます。

複数ページに同じフォームを設置し、全て違う送信先にしようとしてもできません。
そこで、今回は同じフォームを使っていてもページごとに送信先を設定可能にするカスタマイズをご紹介します。

  1. ページごとに送信先を設定可能にする
  2. 手順1. プラグインをインストールして有効化
  3. 手順2. フォームを作成し、ショートコードをページ内任意の場所に記述
  4. 手順3. 送信先用カスタムフィールドを作成
  5. 手順4. フォームに至るリンクにポストIDを渡す
  6. 手順5. フォーム送信先を書き換える
  7. まとめ

ページごとに送信先を設定可能にする

「MW WP Form」で作成したフォームの場合、通常、同じフォームを使っていたら送信先は同じです。

ページによって送信先を変えたフォームを都度作成してもいいのですが、ページ数によっては複製作業も大変です。
今回ご紹介するカスタマイズでは、フォームを1つ作成し、同じフォームを使ってページごとに送信先を設定します。

参考サイト:「MW WP Form」で作成した問い合わせフォームの送信先を投稿ページごとに設定する方法

ただし、参考サイトの記述では、ポストIDが取得できず全てフォームが1つ目の投稿に設定したカスタムフィールドのアドレス宛てに送信されます。
そこで、MW WP Form の URL引数を有効にしてURLからポストIDを渡す追加カスタマイズを行いました。

作業手順

  1. プラグイン「MW WP Form」と「Advanced Custom Fields」をインストールして有効化
  2. MW WP Form でフォームを作成し、ショートコードをページ内任意の場所に記述
  3. Advanced Custom Fields で送信先用カスタムフィールドを作成
  4. テンプレートを修正し、フォームに至るリンクにポストIDを渡す
  5. function.php にてフォーム送信先を手順3の入力内容に書き換える

手順1. プラグインをインストールして有効化

WordPressメニューのプラグインの新規追加より検索してインストールするか、下記よりダウンロードしてプラグインをインストールし、有効化します。

手順2. フォームを作成し、ショートコードをページ内任意の場所に記述

MW WP Form でフォームを作成し、URL引数を有効にします。
また、この時「URL設定」には何も入力しないでください。
今回は同じフォームを複数のページで使用します。そのため、「入力画面URL」を入力できません。「入力画面URL」のみURL入力を省略し「確認画面URL」「完了画面URL」「エラー画面URL」にURLを入力しますと、確認画面の戻るボタン([mwform_backButton])クリックで「このページには直接アクセスできません。」と表示されてしまいます。

もし、「GoogleAnalytics でメール送信完了のコンバージョンをとる」などの理由で、送信完了後に完了ページへ遷移したい場合はこちらをご利用ください。

共通利用する MW WP Form フォームを送信完了後に完了ページへ遷移する方法
MW WP Form で作成したフォームを複数のページで共通で使用する場合、通常の設定では同一ページで完結させる必要があります。そこで、今回はメール送信完了後に完了ページに遷移する方法をご紹介…
https://sendai-kuraso.com/work/wordpress/after-send-redirect.html

続いて、ページの任意の場所にショートコードを記述します。
この時、フォーム識別子のkey(数字のID)をどこかにメモしておきましょう。

手順3. 送信先用カスタムフィールドを作成

Advanced Custom Fields でフィールドグループを作成します。
フィールドラベルは「送信先メールアドレス」フィールド名は「acf_mail」とします。
ラベルや名前は別に何でもいいので、自分でわかりやすい名前をつけてください。
フィールドタイプは「メール」でも「テキスト」でも問題ありません。お好きな方でどうぞ。

フィールドグループ公開後、ページ作成画面、もしくは編集画面を開くと「送信先メールアドレス」入力欄が表示されます。
このカスタムフィールドに送信先のメールアドレスを入力してください。
入力するメールアドレスをカンマ(,)で区切れば複数設定が可能です。

手順4. フォームに至るリンクにポストIDを渡す

テンプレートを修正し、フォームに至るリンクにポストIDを渡します。

フォームが固定ページにある場合

<a href="/contact/?post_id=<?php echo $post->ID; ?>">問い合わせ</a>

フォームが投稿ページ内にある場合

<a href="<?php the_permalink(); ?>?post_id=<?php echo $post->ID ?>"><?php the_title(); ?></a>

手順5. フォーム送信先を書き換える

function.php にフォーム送信先を書き換えるコードを記述します。

// mw-wp-form 送信先設定
function change_admin_address_mwform($Mail, $values, $Data) {
	$post_id = $_GET['post_id'];
	$field = get_post_meta($post_id, 'acf_mail', true);
	if($field){
		$Mail->to = $field;
	}
	return $Mail;
}
add_filter('mwform_admin_mail_mw-wp-form-xxx', 'change_admin_address_mwform', 10, 3);

「acf_mail」となっている場所は、カスタムフィールドのフィールド名を入れてください。
「mwform_admin_mail_mw-wp-form-xxx」のxxxの部分は、先にメモったフォーム識別子のkey(数字のID)を入れてください。

まとめ

  • MW WP Form でフォームを作成し、URL引数を有効にする
  • Advanced Custom Fields で送信先メールアドレスを入力するフォールドを作成する
  • フォームに至るリンクにポストIDを渡す
  • function.php にフォーム送信先を書き換えるコードを書く

以上、MW WP Form で作成したフォームの送信先をカスタムフィールドでページごとに指定する方法をご紹介しました。
企業の紹介サイトで、お問い合わせフォームの内容が決まっている場合などに活用できると思います。

書いた人:やまライダー(嫁)

Web屋さんで8時間フルタイム勤務をしている、いわゆるワーキングマザー。
夫婦共働きで、ムスメ氏を育てています。
主に資産運用にかかわるお金の話、ムスメ氏を育てていく上での子育ての話、そしてたまにお仕事関連の記事を書いていく予定。
プロフィールを見る