Last active
January 3, 2024 14:50
-
-
Save ianhampton/eee8f8ea1a6280db8bbae3944c07a451 to your computer and use it in GitHub Desktop.
Dynamically add file attachments to Contact Form 7 emails from a custom field
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/* Dynamically add file attachments to Contact Form 7 emails from a Wordpress custom field. | |
* Custom field is 'case-pdf' in the example. | |
*/ | |
add_action('wpcf7_before_send_mail', 'wpcf7_add_attachment'); | |
function wpcf7_add_attachment($contact_form) { | |
global $_POST; | |
$submission = WPCF7_Submission::get_instance(); | |
if ( $submission && !empty($_POST['case-pdf']) ) { | |
$mail = $contact_form->prop('mail'); | |
$mail['attachments'] .= $_POST['case-pdf']; | |
$contact_form->set_properties(array('mail' => $mail)); | |
} | |
} |
For me it only worked this way:
add_filter( 'wpcf7_mail_components', 'mycustom_wpcf7_mail_components' );
function mycustom_wpcf7_mail_components( $components ) {
$coupon_field = get_field('coupon_img', 'options');
$relative_path = (_wp_get_attachment_relative_path($coupon_field['url']));
$output = ABSPATH . 'wp-content/uploads/' . $relative_path . '/' . $coupon_field['filename'];
$components['attachments'][] = $output;
return $components;
}
It does not really work for me. What about path? Where should path to file be assigned, and what is default?
BRO: I used this for my Path
if($cf7->id == 3990) {
$mail = $cf7->prop('mail');
$mail['attachments'] = './wp-content/themes/autocardivi/sample.pdf';
$cf7->set_properties(array( "mail" => $mail));
}
add_action("wpcf7_before_send_mail", "Pdfdownload_test_func");
Hello,
What's custom fiels do you use ? i tried with this input :
[dynamichidden PDF id:PDF "uploads/pdf/Full_lighting_price_list.pdf"]
Not working :-(
Tried this code too :
function send_pdf( $wpcf7 ) { $id = $wpcf7->id(); if ($id==215){ $uploads = wp_upload_dir(); define ('MY_FILE_PATH',$uploads['path'].'/pdf/'); $copy_to_send=MY_FILE_PATH.'Full_lighting_price_list.pdf'; $mail = $wpcf7->prop('mail'); $mail['attachments'] = $copy_to_send; $wpcf7->set_properties(array( "mail" => $mail )); } } add_action('wpcf7_before_send_mail','send_pdf', 100);
Can you help me please ?
BRO: you're a legend, more blessings to you and you're family :D could you explain in details what those "$mail = $wpcf7->prop('mail');" & "$wpcf7->set_properties(array( "mail" => $mail ));" does, where you got this method, my feature worked, this is all I need, you're awesome <3
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Oof, this was a tricky one. I expected that WPCF7 would allow dynamic fields as mail tags in the attachments field out-of-the-box, but I had to jump through some hoops to make it work. If anyone has any feedback on how to do this more efficiently, I'd gladly hear so. Hope this helps :-)
The form contains a hidden field called
whitepaper
, as defined in WPCF7.[hidden whitepaper default:shortcode_attr]
This is then rendered to a shortcode to populate the field with the value, in your template
To make sure the field actually gets populated, you'll need a snippet in your functions.php as well
Finally, to add the attachment to the mail, another piece of code is needed in functions.php