【wordpress】MW WP Form フィルターフックを使用して管理宛メールの件名を出し分ける


■ まえがき

とある企業からLP制作の依頼があり、普段使用している問い合わせフォームに遷移するのでよいが、LPからの問い合わせと分かるように、管理者宛メールの件名を通常の問い合わせと区別が付く件名にして欲しいと言われました。
その時にフックを使用して件名の変更を行なったので備忘として書いておきます。

■ やりたいこと

フォームはwordpressのプラグイン「MW WP Form」で作ったものを使う。
同じ問い合わせフォームを使用するが、Aのページから遷移してきた問い合わせには管理者宛メールの件名を「問い合わせ(A)」とし、その他のページから遷移してきた問い合わせには件名を「問い合わせ(B)」にする。

■ やり方

① LPから飛ぶ問い合わせページのリンクにパラメータを付ける

もともと使用していたフォームのURLが「ドメイン/contact/」だとすると、LPページから飛ぶ問い合わせフォームへのリンクは「ドメイン/contact/?lp=a」にします。

② functions.phpにフックを追加

functions.phpに以下を記述します。

functions.php
/**
 * my_mail
 * @param object $Mail
 * @param array $values
 * @param MW_WP_Form_Data $Data
 */

function my_mail( $Mail, $values, $Data ) {
  if($_GET["lp"] === "a") { //LPからの問い合わせ
    $Mail->subject = '問い合わせ(A)';
  } else { //LP以外からの問い合わせ
    $Mail->subject = '問い合わせ(B)';
  }
  return $Mail;
}
add_filter( 'mwform_admin_mail_mw-wp-form-xxx', 'my_mail', 10, 3 );

「mwform_admin_mail_mw-wp-form-xxx」のxxxにはフォーム識別子を入れてください。

※ functions.phpで件名を設定すると、管理画面上で設定したものは反映されなくなります。その後の修正などがあった場合の管理には注意してください。

■ 参考

MW WP Form
MW WP Formで商品名を自動入力するようにしたよ
MW WP Formで選択項目によりメールアドレス変更
PHP マニュアル 言語リファレンス