Ask your WordPress questions! Pay money and get answers fast! Comodo Trusted Site Seal
Official PayPal Seal

Contact Form 7 Mail 2 Template as Shortcode WordPress


I have a multi language site in this site we're using a lot of WPC7, when users send us and email from our website they receive a confirmation.

This confirmation we designed in html so it looks better. We now have support of 3 languages and we're planning to have even more. Designing and maintaining each of this HTML mail templates has become really hard.

I have successfully saved the HTML Template into a shortcode, but now i can't use the user input data into that template.

This is what i have:

add_filter( 'wpcf7_form_elements', 'mycustom_wpcf7_form_elements' );

function mycustom_wpcf7_form_elements( $form ) {
$form = do_shortcode( $form );
return $form;

add_filter( 'wpcf7_special_mail_tags', 'special_mail_shortcodes', 10, 3 );

function special_mail_shortcodes( $output, $name, $html ) {
if ( 'email-response-user' == $name )
$output = do_shortcode( '[email-response-user]' );

return $output;

function email_response_user( $cf7 ) {
return '<html><body><table>Hi [your-name] this is my template.</table></body></html>';
add_shortcode( 'email-response-user', 'email_response_user' );

Now i only put [email-response-user] where the second mail content is and when i hit send email i receive it, the problem as i mention before i get "[your-name]" instead of the user name.

I tried to this:

function email_saved_values( $cf7 ) {
try {
if (!isset($cf7->posted_data) && class_exists('WPCF7_Submission')) {
$submission = WPCF7_Submission::get_instance();
if ($submission) {
$data = array();
$data['FormularioReservaciones'] = $cf7->title();
$data['posted_data'] = $submission->get_posted_data();

$test = $data['posted_data']['your-name'];

} catch (Exception $ex) {
print $ex;
return true;
add_action( 'wpcf7_before_send_mail', 'email_saved_values');

// and then
function email_response_user( $cf7 ) {
return '<html><body><table>Hi ' . $test . ' this is my template.</table></body></html>';
add_shortcode( 'email-response-user', 'email_response_user' );

But didn't work.

Answers (2)


Reigel Gallarde answers:

you should use do_shortcode in here.. to run the shortcode inside...

function email_response_user( $cf7 ) {

return do_shortcode('<html><body><table>Hi [your-name] this is my template.</table></body></html>');


add_shortcode( 'email-response-user', 'email_response_user' );

Alvaro Rosado comments:

Hi thanks for the answer. I'll attach how i got the email. I did as you suggested but it did not worked.