Añadir variable personalizada en el cuerpo del correo de Contact Form 7

30 nov 2018, 12:25:49
Vistas: 14.2K
Votos: 3

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]
0
Todas las respuestas a la pregunta 4
3

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;
} );
30 nov 2018 12:59:33
Comentarios

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

lalo lalo
12 dic 2018 21:38:22

Puede que me haya olvidado del filtro wpcf7_special_mail_tags, @lalo. Pero el código en mi respuesta 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.

Sally CJ Sally CJ
13 dic 2018 02:34:49

He probado tu código y solo permite reemplazar [my_source] cuando se muestra el formulario, ¿cómo puedo usar esta etiqueta en la plantilla de correo?

Sami Sami
2 abr 2020 01:05:49
0

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;
}
12 dic 2018 22:27:43
0

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

18 ago 2020 13:14:40
0

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

13 dic 2018 05:26:27