Añadir variable personalizada en el cuerpo del correo de Contact Form 7
Configuré una cookie para mis usuarios para saber desde qué fuente llegan al sitio y quiero que cuando un usuario nos contacte, su mensaje incluya también su cookie.
Para ello creé un nuevo shortcode y lo agregué en la sección de correo, pero envía el shortcode directamente en lugar de su valor devuelto.
Código :
function my_shortcode( $atts ) {
// Devuelve el valor de la cookie 'my_source' si existe, de lo contrario cadena vacía
return isset($_COOKIE['my_source']) ? $_COOKIE['my_source'] : '' ;
}
add_shortcode( 'my-source', 'my_shortcode' );
Cuerpo del mensaje en Contact Form 7 :
Nombre : [your-name]
Email : [your-email]
Teléfono : [form-tel]
Mi Fuente : [my-source]
Correo que recibí :
Nombre : Mohit Bumb
Email : abcde@gmail.com
Teléfono : 19191919191
Mi Fuente : [my-source]

Debes hacerlo de la siguiente manera:
add_action( 'wpcf7_init', 'custom_add_form_tag_my_source' );
function custom_add_form_tag_my_source() {
// "my-source" es el tipo de la etiqueta del formulario
wpcf7_add_form_tag( 'my-source', 'custom_my_source_form_tag_handler' );
}
function custom_my_source_form_tag_handler( $tag ) {
return isset( $_COOKIE['my_source'] ) ? $_COOKIE['my_source'] : '';
}
Consulta la documentación para más detalles.
O también puedes probar esto, para interpretar shortcodes regulares:
add_filter( 'wpcf7_mail_components', function( $components ){
$components['body'] = do_shortcode( $components['body'] );
return $components;
} );

eso no es lo que preguntó, él preguntó por qué no se analiza el mensaje de correo

Puede que me haya olvidado del filtro wpcf7_special_mail_tags
, @lalo. Pero el código en mi respuesta sí funciona - y si el autor de la pregunta no hubiera aceptado la respuesta, probablemente habría recordado el filtro wpcf7_special_mail_tags
(ese día) y lo habría incluido en mi respuesta.

Usa el filtro "wpcf7_special_mail_tags"
en este ejemplo mi etiqueta es "torneos"
/**
* Una etiqueta para ser usada en la sección "Mail" para que el usuario reciba la etiqueta especial
* [torneos]
*/
add_filter('wpcf7_special_mail_tags', 'wpcf7_tag_torneo', 10, 3);
function wpcf7_tag_torneo($output, $name, $html)
{
$name = preg_replace('/^wpcf7\./', '_', $name); // para compatibilidad hacia atrás
$submission = WPCF7_Submission::get_instance();
if (! $submission) {
return $output;
}
if ('torneos' == $name) {
return $submission->get_posted_data("torneos");
}
return $output;
}

Llegué tarde pero usa una etiqueta especial en este escenario
// Gancho para una etiqueta de correo especial adicional
add_filter( 'wpcf7_special_mail_tags', 'wti_special_mail_tag', 20, 3 );
function wti_special_mail_tag( $output, $name, $html )
{
$name = preg_replace( '/^wpcf7\./', '_', $name );
if ( '_my_cookie' == $name ) {
$output = isset( $_COOKIE['my_source'] ) ? $_COOKIE['my_source'] : '';
}
return $output;
}
puedes usar [_my_cookie]
para llamar su valor

Resolví y publiqué mi respuesta aquí:
Agregando un Form-Tag personalizado a Contact Form 7 en WordPress
(que también funciona para ser enviado por correo electrónico)
https://stackoverflow.com/questions/53754577/how-to-make-contact-form-7-custom-field/
El código
https://gist.github.com/eduardoarandah/83cad9227bc0ab13bf845ab14f2c4dad
