お客様への自動返信をある/なしを、スイッチで制御したい
Q&A
Closed
コンタクトフォーム7のカスタマイズのことで、教えてください。
自動返信を使うときは、メールのタグの下の方にあるメール2のチェックボックスにチェックすると使えるのは、理解しています。
これをプログラムで、制御したいのです。
お客様への自動返信をある/なしを、スイッチで制御したいのです。
こうした情報を得ています。
この関数が使えるのかなと思うのですが。
function wpcf7_save_contact_form( $args = '', $context = 'save' ) {
$args = wp_parse_args( $args, array(
'id' => -1,
'title' => null,
'locale' => null,
'form' => null,
'mail' => null,
'mail_2' => null,
'messages' => null,
'additional_settings' => null,
) );
$args = wp_unslash( $args );
$args['id'] = (int) $args['id'];
if ( -1 == $args['id'] ) {
$contact_form = WPCF7_ContactForm::get_template();
} else {
$contact_form = wpcf7_contact_form( $args['id'] );
}
if ( empty( $contact_form ) ) {
return false;
}
if ( null !== $args['title'] ) {
$contact_form->set_title( $args['title'] );
}
if ( null !== $args['locale'] ) {
$contact_form->set_locale( $args['locale'] );
}
$properties = array();
if ( null !== $args['form'] ) {
$properties['form'] = wpcf7_sanitize_form( $args['form'] );
}
if ( null !== $args['mail'] ) {
$properties['mail'] = wpcf7_sanitize_mail( $args['mail'] );
$properties['mail']['active'] = true;
}
if ( null !== $args['mail_2'] ) {
$properties['mail_2'] = wpcf7_sanitize_mail( $args['mail_2'] );
}
if ( null !== $args['messages'] ) {
$properties['messages'] = wpcf7_sanitize_messages( $args['messages'] );
}
if ( null !== $args['additional_settings'] ) {
$properties['additional_settings'] = wpcf7_sanitize_additional_settings(
$args['additional_settings']
);
}
$contact_form->set_properties( $properties );
do_action( 'wpcf7_save_contact_form', $contact_form, $args, $context );
if ( 'save' == $context ) {
$contact_form->save();
}
return $contact_form;
}
この関数を使えば、メール2を使って自動返信をする、しないをコントロールできるという解釈で合っていますでしょうか?
メールの返信自体は、簡単にできることを確認しています。
でも、メール2だけを送信の選択ができるようにしたいのです。
できれば希望としては、ここまで本格的にプログラミングしなくても、早く実現できる方法があれば、そちらの方法を試したいと思っています。
今日WordPressのフォーラムで、教えて頂きましたコードで、解決しました。
フォームで、skip_2というチェックボックスを作ります。
返信希望の時に、チェックをするようにします。
これで、実装できます。
メール2(お客様への自動返信)のみ送る、送らないの切り替えを行いたい方の参考になれば幸いです。
function my_wpcf7_additional_mail( $additional_mail, $contact_form ) {
if ( isset( $_POST['skip_2'] ) ) {
$additional_mail = [];
}
return $additional_mail;
}
add_filter( 'wpcf7_additional_mail','my_wpcf7_additional_mail', 10, 2 );
こちらのコードで実装できました
function my_wpcf7_additional_mail( $additional_mail, $contact_form ) {
if ( isset( $_POST['skip_2'] ) ) {
$additional_mail = $additional_mail;
}else
{
$additional_mail = [ ];
}
return $additional_mail;
}
add_filter( 'wpcf7_additional_mail','my_wpcf7_additional_mail', 10, 2 );
最初に解決したと思い投稿したコードでは、私の意図と逆に働きました。
つまり、skip_2にチャックがない時に、投稿者に送信されました。
そのため、今回上記のように、コードを修正しました。
ただ強制的にメール2の送信を止めているため、SMTPのプラグインを利用していると、下記のエラーがでます。
少なくても一人は、送信者に指定してくださいという内容のエラーのようです。
You must provide at least one recipient email address.
コンタクトフォーム7の仕様上やむを得ないと思います。