Skip to content

Instantly share code, notes, and snippets.

@ianhampton
Last active January 3, 2024 14:50
Show Gist options
  • Save ianhampton/eee8f8ea1a6280db8bbae3944c07a451 to your computer and use it in GitHub Desktop.
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
<?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));
}
}
@jsalinas
Copy link

jsalinas commented Feb 25, 2022

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;
    }

@fsanterva
Copy link

fsanterva commented Sep 13, 2022

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");

@fsanterva
Copy link

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