Reputation: 3604
I found a filter that allows me to customize the structure of contact form 7 emails via functions.php and the code looks like this:
add_filter('wpcf7_mail_components','my_custom_mail', 10,2);
function my_custom_mail($mail_component, $contact_form){
$mail_component['subject']; //email subject
$mail_component['sender']; //sender field (from)
$mail_component['body']; //email body
$mail_component['recipient']; //email recipient (to)
$mail_component['additional_headers']; //email headers, cc:, bcc:, reply-to:
$mail_component['attachments']; //file attachments if any
$key_values = array();
$tags = $contact_form->scan_form_tags(); //get your form tags
foreach($tags as $tag){
$field_name = $tag['name'];
if(isset($_POST[$field_name]) && !empty($_POST[$field_name])){
//get all the submitted fields form your form
$key_values[$field_name] = $_POST[$field_name];
}
}
$body = "Dear \n"
. "First Name: {$key_values['first-name']} \n"
. "Email: {$key_values['first-email']} \n"
. "Phone Number: {$key_values['phone-number']} \n"
. "Delivery Details: {$key_values['delivery-details']} \n"
. "Suburb: {$key_values['suburb']} \n"
. "Postal Code: {$key_values['post-code']} \n"
. "State: {$key_values['state']} \n"
. "Country: {$key_values['country']} \n"
. "Wine Number: {$key_values['wine-member']} \n"
. ($key_values['menu-324'] != 'Select wine' ? ($key_values['menu-324'] . ': ') : ' ') . $key_values['number-583'] . "\n"
. ($key_values['menu-325'] != 'Select wine' ? ($key_values['menu-325'] . ': ') : ' ') . $key_values['number-584'] . "\n"
. ($key_values['menu-326'] != 'Select wine' ? ($key_values['menu-326'] . ': ') : ' ') . $key_values['number-585'] . "\n"
. ($key_values['menu-327'] != 'Select wine' ? ($key_values['menu-327'] . ': ') : ' ') . $key_values['number-586'] . "\n"
. ($key_values['menu-328'] != 'Select wine' ? ($key_values['menu-328'] . ': ') : ' ') . $key_values['number-587'] . "\n"
. ($key_values['menu-329'] != 'Select wine' ? ($key_values['menu-329'] . ': ') : ' ') . $key_values['number-588'] . "\n"
. "Delivery Notes: {$key_values['delivery-notes']} \n";
$mail_component['body'] = $body;
return $mail_component;
}
However, whilst testing all the emails on the website, I noticed that the code from my functions affected all the forms. Is there a way I can perhaps add that filter for a specific form name or at least load the filter based on the page request url?
Upvotes: 0
Views: 1221
Reputation: 356
This should work, although I couldn't test it at the time. I believe you can check the form ID in order to apply the filter or not. Just change the 1234 with the form id you want. If ID matches, $mail_component will be modified before being sent, if not, no modifications will be done.
add_filter('wpcf7_mail_components','my_custom_mail', 10,2);
function my_custom_mail($mail_component, $contact_form){
if($wpcf7->id() == 1234){
$mail_component['subject']; //email subject
$mail_component['sender']; //sender field (from)
$mail_component['body']; //email body
$mail_component['recipient']; //email recipient (to)
$mail_component['additional_headers']; //email headers, cc:, bcc:, reply-to:
$mail_component['attachments']; //file attachments if any
$key_values = array();
$tags = $contact_form->scan_form_tags(); //get your form tags
foreach($tags as $tag){
$field_name = $tag['name'];
if(isset($_POST[$field_name]) && !empty($_POST[$field_name])){
//get all the submitted fields form your form
$key_values[$field_name] = $_POST[$field_name];
}
}
$body = "Dear \n"
. "First Name: {$key_values['first-name']} \n"
. "Email: {$key_values['first-email']} \n"
. "Phone Number: {$key_values['phone-number']} \n"
. "Delivery Details: {$key_values['delivery-details']} \n"
. "Suburb: {$key_values['suburb']} \n"
. "Postal Code: {$key_values['post-code']} \n"
. "State: {$key_values['state']} \n"
. "Country: {$key_values['country']} \n"
. "Wine Number: {$key_values['wine-member']} \n"
. ($key_values['menu-324'] != 'Select wine' ? ($key_values['menu-324'] . ': ') : ' ') . $key_values['number-583'] . "\n"
. ($key_values['menu-325'] != 'Select wine' ? ($key_values['menu-325'] . ': ') : ' ') . $key_values['number-584'] . "\n"
. ($key_values['menu-326'] != 'Select wine' ? ($key_values['menu-326'] . ': ') : ' ') . $key_values['number-585'] . "\n"
. ($key_values['menu-327'] != 'Select wine' ? ($key_values['menu-327'] . ': ') : ' ') . $key_values['number-586'] . "\n"
. ($key_values['menu-328'] != 'Select wine' ? ($key_values['menu-328'] . ': ') : ' ') . $key_values['number-587'] . "\n"
. ($key_values['menu-329'] != 'Select wine' ? ($key_values['menu-329'] . ': ') : ' ') . $key_values['number-588'] . "\n"
. "Delivery Notes: {$key_values['delivery-notes']} \n";
$mail_component['body'] = $body;
}
return $mail_component;
}
Upvotes: 1