Contact Form 7の返信メール内容をログイン/非ログインユーザーに応じて変更する方法

作成日:

最初に、ログイン中であればContact Form 7展開の隠しフィールドとしてユーザー名を表示します。

PHP
function add_wpcf7_form_hidden_fields( $hidden_fields ) {
	if ( is_user_logged_in() ) {
		$user                        = wp_get_current_user();
		$hidden_fields['user_login'] = $user->user_login;
	}
}
add_filter( 'wpcf7_form_hidden_fields', 'add_wpcf7_form_hidden_fields' );

これでHTMLフォーム内でユーザー名の隠しフィールドが追加されます。

HTML
<input type="hidden" name="user_login" value="********">

次に、独自メールタグを作成します。
簡単に説明すると、隠しフィールドでユーザー名に値があればログイン、そうでなければ非ログインとして判断し、それぞれ表示と非表示をコメントタグで囲んでいます。これは識別符としてコメントタグを使用しただけで何でも良いです。

PHP
function add_cf7_custom_mail_tag( $output, $name ) {
  switch ( $name ) {
    case '_login_start':
      // ログイン中表示開始.
      $postData = WPCF7_Submission::get_instance()->get_posted_data();
      if ( isset( $postData['user_login'] ) ) {
        $output = '<!--show-->';
      } else {
        $output = '<!--hide-->';
      }
      break;
    case '_login_end':
      // ログイン中表示終了.
      $postData = WPCF7_Submission::get_instance()->get_posted_data();
      if ( isset( $postData['user_login'] ) ) {
        $output = '<!--/show-->';
      } else {
        $output = '<!--/hide-->';
      }
      break;
    case '_not_login_start':
      // ログイン中非表示開始.
      $postData = WPCF7_Submission::get_instance()->get_posted_data();
      if ( isset( $postData['user_login'] ) ) {
        $output = '<!--hide-->';
      } else {
        $output = '<!--show-->';
      }
      break;
    case '_not_login_end':
      // ログイン中非表示終了.
      $postData = WPCF7_Submission::get_instance()->get_posted_data();
      if ( isset( $postData['user_login'] ) ) {
        $output = '<!--/hide-->';
      } else {
        $output = '<!--/show-->';
      }
      break;
  }
  return $output;
}
add_filter( 'wpcf7_special_mail_tags', 'add_cf7_custom_mail_tag', 10, 2 );

最後に、送信するメール本文で上で設定した表示/非表示の囲みタグ内を正規表現で残すか削除するかを設定します。
行削除すると無駄な改行が増えるので、連続した改行は1つにまとめるようにしています。

PHP
function set_cf7_mail_body( $components, $form ) {
  $mail_body          = $components['body'];
  $mail_body          = preg_replace( '/\<\!--show--\>(.*?)\<\!--\/show--\>/s', '$1', $mail_body );
  $mail_body          = preg_replace( '/\<\!--hide--\>(.*?)\<\!--\/hide--\>/s', '', $mail_body );
  $mail_body          = preg_replace( '/(^\n|^\r|^\r\n){2,}/m', "\n", $mail_body );
  $components['body'] = $mail_body;
  return $components;
}
add_filter( 'wpcf7_mail_components', 'set_cf7_mail_body', 10, 2 );

これで、Contact Form 7のメール > メール本文設定内で独自メールタグで囲めば返信メール内容をログイン/非ログインユーザーに応じて変更することができます。

HTML
[_login_start]
ログインしているときだけ表示
[_login_end]

[_not_login_start]
ログインしていないときだけ表示
[_not_login_end]

そもそもであれば、ログイン/非ログインユーザーに応じてフォーム自体を追加すれば良いのですが、例えば名前やメールアドレスの入力を求める以外に設定するフィールドが同じであれば、メンテナンス的に1つにまとめてしまえば良いこともあると思いますので、考えてみました。

物草 灸太郎
物草 灸太郎

WordPressでホームページを制作しつつ、休日は畑を耕したりDIYを楽しんでいます。

Loading...

コメントをどうぞ

  • メールアドレスが公開されることはありません。
  • コメント欄にURLは入力できません。
  • このサイトはreCAPTCHAによって保護されており、Googleのプライバシーポリシー利用規約が適用されます。