Contact Form 7のメール設定で、「空のメールタグを含む行を出力から除外する」にチェックを入れると、未入力の項目の行はメール本文から除外されます。

ただ、チェックボックスなどの複数選択ができる項目では、未入力でも値が空と判定されないためメールから除外されません(値に空の配列が入るためです)。「お問い合わせ種別:[contact_type]」といったメールタグがそのまま送られてしまいます。
そこで今回は、任意入力でかつ複数選択可能な項目が未入力の時に、メール本文から対象の行を除外する方法をご紹介いたします。
「空のメールタグを含む行を出力から除外する」にチェックを入れてもメールか除外されない場合の対処法
対象の項目が1つの場合
例えば、”contact_type”という項目が未入力の時に除外したいとします。その場合、適用しているテーマのfunctions.phpや自作プラグイン、スニペット系のプラグインで以下のように記述します。
‘contact_type’のところは適宜変更してください。
add_filter('wpcf7_mail_components', function ($components, $contact_form) {
$submission = WPCF7_Submission::get_instance();
if (! $submission) {
return $components;
}
$posted_data = $submission->get_posted_data();
$body = $components['body'];
$checkbox_tag = 'contact_type';
if (empty($posted_data[$checkbox_tag])) {
$body = preg_replace(
'/^.*\[' . preg_quote($checkbox_tag, '/') . '\].*\R?/m',
'',
$body
);
}
$components['body'] = $body;
return $components;
}, 10, 2);
対象の項目が複数ある場合
“contact_type” “contact_find” “contact_etc” というように、対象の項目が複数ある場合は、以下のように記述します。
add_filter('wpcf7_mail_components', function ($components, $contact_form) {
$submission = WPCF7_Submission::get_instance();
if (! $submission) {
return $components;
}
$posted_data = $submission->get_posted_data();
$body = $components['body'];
$checkbox_tags = array('contact_type', 'contact_find', 'contact_etc');
foreach ($checkbox_tags as $tag) {
if (empty($posted_data[$tag])) {
$body = preg_replace(
'/^.*\[' . preg_quote($tag, '/') . '\].*\R?/m',
'',
$body
);
}
}
$components['body'] = $body;
return $components;
}, 10, 2);
あとがき
フォーム内のチェックボックスは必須にすることが多いと思いますが、任意入力でかつ未入力の時にメールから除外したい場合は、ぜひ参考にしていただければと思います。



コメントを残す