Inicio / Blog / Wordpress / Etiquetas de correo especiales en CF 7 fuera del contenido del mensaje

Etiquetas de correo especiales en CF 7 fuera del contenido del mensaje

Resumir con ChatGPT

Formulario de contacto 7 (CF7) es uno de los plugins de formulario de contacto más populares para WordPress. Ofrece una variedad de funciones, incluyendo los llamados Etiquetas de correo específicas como [_post_id], [_post_title] o [_post_author_email].

Estas etiquetas especiales pueden utilizarse para recuperar fácilmente información sobre la entrada en la que está incrustado un formulario. Pero, ¿qué ocurre si el formulario está incrustado fuera del contenido de la entrada (por ejemplo, en una barra lateral o en un widget)? Aquí es exactamente donde surge el problema.

Ohne Anpassungen würden Tags wie [_post_author_email] oder [_post_title] im Contact Form 7 Formular leer bleiben.

Por qué necesitábamos y optimizamos nuestro formulario de la barra lateral

Cuando introdujimos nuestro formulario de la barra lateral en Konfuzio, queríamos ofrecer a los lectores una forma más fácil y específica de ponerse en contacto con los autores de nuestros artículos. Para nosotros era especialmente importante que el proceso fuera eficaz y seguro tanto para los lectores como para los autores. A partir de ahí, surgió una tarea apasionante: ¿cómo integrar dinámicamente la dirección de correo electrónico del autor en el formulario sin revelarla públicamente en el frontend?

Por qué el formulario es tan importante para nosotros:

  1. Contacto directo con el autor/interfaz de contacto para los lectores
    A menudo, los lectores tienen preguntas concretas o desean profundizar en el tema tratado en el artículo. Nuestro objetivo era tender un puente directo con los autores de los contenidos, no a través de un sistema anónimo de comentarios, sino mediante una herramienta de comunicación específica y adaptada al contexto. Al mismo tiempo, pudimos evitar que la dirección de correo electrónico del autor fuera directamente visible en el frontend para evitar spam o usos indebidos.
  2. Información específica para la mejora continua de la calidad
    Un buen feedback es esencial para crear y seguir desarrollando contenidos de alta calidad. Con este formulario, damos a los lectores la oportunidad no sólo de hacer preguntas directas, sino también de opinar sobre nuestros contenidos. ¿Qué temas les preocupan? ¿Dónde puede haber aún lagunas de información? Estos comentarios se transmiten directamente a nuestros equipos editorial y de autores y contribuyen a mejorar los contenidos a largo plazo.
  3. Activadores para la edición y actualización periódicas de los mensajes
    Otro efecto positivo del formulario es que recuerda a nuestros autores que deben revisar sus entradas con regularidad y añadir información actualizada de forma continua. Un lector que solicita o comenta una entrada es señal de que el contenido sigue siendo relevante para nuestro público objetivo. Esto fue suficiente motivación para que trabajáramos en una solución sólida que también permitiera esta función en la barra lateral sin restricciones.
  4. Elogiar y recompensar a los autores comprometidos y los buenos contenidos
    Los contenidos que activan a los lectores y fomentan el diálogo directo con los autores son para nosotros una señal de que no sólo estamos desarrollando temas, sino también construyendo relaciones con nuestra comunidad. Dar al autor de un post la oportunidad de tener contacto con lectores motivados es una especie de recompensa por el esfuerzo que ha dedicado al contenido, un incentivo para crear más contenidos de alta calidad.

El reto técnico

Uno de nuestros mayores obstáculos era que Contact Form 7 no incluye un [_post_*]-las etiquetas son compatibles cuando los formularios se integran fuera del contenido de una entrada, como en nuestro caso en la barra lateral. Sin ajustes, etiquetas como [_post_author_email] o [_post_title] permanecen vacías.

Sorteamos este problema con una solución personalizada. Gracias a la integración dinámica del ID de la entrada como campo oculto, pudimos rellenar las etiquetas en el servidor y recuperar de forma segura toda la información contextual. Con esta solución, nuestro formulario también funciona ahora de forma fiable en la barra lateral, y nuestros lectores y autores se benefician por igual de un proceso de comentarios fluido.

Cómo funcionan las etiquetas de correo específicas

El mencionado [_post_*]-las etiquetas en CF7 permiten integrar automáticamente los datos de la entrada en el correo electrónico que se envía cuando se envía el formulario.

Entre ellas figuran:

  • [_post_id]: Devuelve el ID del mensaje actual.
  • [_post_name]: El slug (nombre) del post.
  • [_post_title]El título del puesto correspondiente.
  • [_post_url]URL de la entrada.
  • [_post_author]Nombre del autor del mensaje.
  • [_post_author_email]Dirección de correo electrónico del autor del mensaje.

En teoría, estas etiquetas son una herramienta inteligente para integrar contenido dinámico en cada entrada sin tener que crear manualmente un formulario distinto para cada entrada.

Problema:

Estos [_post_*]-Sin embargo, las etiquetas funcionan sólosi el formulario forma parte del Contenido está incrustado en el área de contenido. Sin embargo, si el formulario está incrustado en el área de contenido Barra lateralen un widget o en un archivo de tema (como single.php), estas etiquetas especiales Vacío. Esto se debe a que CF7 no reconoce automáticamente el contexto del mensaje fuera del contenido real.

¿Por qué se producen estos problemas?

Contact Form 7 depende de que el formulario se muestre en un entorno en el que la consulta principal de WordPress establezca correctamente la entrada actual. Sin embargo, si un formulario está integrado en una barra lateral o un widget, no hay referencia directa a la consulta principal. En este caso, CF7 no sabe qué entrada se está mostrando y rellena el campo [_post_*]-Por lo tanto, las etiquetas no son suficientes.

Ejemplo: un formulario en la barra lateral

Supongamos que ha creado una entrada de blog con el ID 123 y un formulario CF7 en la barra lateral. El formulario debería tener el título My Blog Post y la dirección de correo electrónico del autor de la entrada. Sin embargo, como el formulario se muestra fuera de la entrada, las etiquetas permanecen como [_post_title] y [_post_author_email] en blanco.

Solución: reconocimiento dinámico del contexto del puesto

Para resolver este problema, podemos utilizar la función Añadir el contexto de la entrada manualmente y en el lado del servidorpara que las etiquetas necesarias funcionen en cualquier entorno, incluso en la barra lateral o en los widgets. Aquí mostramos una solución con dos sencillos pasos:

Paso 1: Añadir el ID del post como campo oculto

En primer lugar, nos aseguramos de que la corriente Identificación postal se añade a cada formulario, independientemente de dónde esté incrustado. Para ello utilizamos el hook wpcf7_form_hidden_fieldspara mostrar un campo oculto con el Post-ID (post_id) en el formulario:

/**
 * Add the current post ID as a hidden field in CF7 forms.
 */
add_filter('wpcf7_form_hidden_fields', function ($hidden_fields) {
    if (is_singular()) {
        global $post;
        $post_id = get_queried_object_id() ?: ($post->ID ?? null);
        if ($post_id) {
            $hidden_fields['post_id'] = absint($post_id); // Ensure the post ID is valid and sanitized.
        }
    }
    return $hidden_fields; // Return the modified hidden fields.
});

Explicación:

  • is_singular()Comprueba si la entrada actual es una página única, una entrada única o un tipo de entrada personalizado.
  • El Post ID se utiliza como post_id en el campo $_POST del formulario y, por lo tanto, está disponible cuando se procesa el formulario.

Paso 2: Tratamiento dinámico de la _post_*-Etiquetas

Ahora implementaremos un gancho que [_post_*]-etiquetas dinámicamente durante el procesamiento del formulario. Este enfoque comprueba si existe un ID de entrada y los datos correspondientes se recuperan dinámicamente.

/**
 * Dynamically populate all _post_* tags using the post ID passed as a hidden field.
 */
add_filter('wpcf7_special_mail_tags', function ($output, $tag_name) {
    // Process only _post_* tags.
    if (preg_match('/^_post_(id|name|title|url|author|author_email)$/', $tag_name, $matches)) {
        // Retrieve the post_id from the hidden fields in the form submission (sent through POST).
        $post_id = isset($_POST['post_id']) ? absint($_POST['post_id']) : null;
        // If a valid post ID is available, resolve the tag dynamically.
        if ($post_id) {
            switch ($tag_name) {
                case '_post_id':
                    return $post_id;
                case '_post_name':
                    return get_post_field('post_name', $post_id); // Retrieve the post slug.
                case '_post_title':
                    return get_the_title($post_id);
                case '_post_url':
                    return get_permalink($post_id);
                case '_post_author':
                    $author_id = get_post_field('post_author', $post_id);
                    return get_the_author_meta('display_name', $author_id);
                case '_post_author_email':
                    $author_id = get_post_field('post_author', $post_id);
                    $author_email = get_the_author_meta('user_email', $author_id);
                    return !empty($author_email) ? esc_html($author_email) : 'fallback@example.com';
                default:
                    return $output;
            }
        }
        // Return an empty value if the post ID is not available.
        return '';
    }
    // Default output for tags not matching _post_*.
    return $output;
}, 10, 2);

Explicación:

  • Mediante la integración en wpcf7_special_mail_tags podemos tratar cada día de forma individual.
  • Los datos (_post_id, _post_author_emailetc.) son en el servidor a partir del Post-ID.

Ejemplo de aplicación

  • En la barra lateral:
    Vincule el formulario con

    Error: Formulario de contacto no encontrado.

    en la barra lateral:
<aside>
    <?php echo do_shortcode('[contact-form-7 id="123"]'); ?>
</aside>
  • Configuración del correo CF7:
    Utilice la _post_*-etiquetas en la configuración del correo:
  Post ID: [_post_id]
  Post Name: [_post_name]
  Post Title: [_post_title]
  Post URL: [_post_url]
  Post Author: [_post_author]
  Post Author Email: [_post_author_email]

Resultado:

Aunque el formulario está incrustado en la barra lateral, los valores se añaden correctamente.

Conclusión

El uso de etiquetas de correo específicas de la entrada en Contact Form 7 fuera del contenido de la entrada es problemático por defecto. Realizando los ajustes descritos anteriormente, podemos garantizar que todos los datos de correo relevantes también estén disponibles de forma fiable en la barra lateral o en los widgets. Esta solución es respetuosa con la protección de datos, segura y dinámica, y permite a los _post_*-vuelven a funcionar como de costumbre.

¿Le ha resultado útil esta página?

Gracias por sus comentarios.

¿Podría darme su opinión? (anónimo)

Desarrollamos software de inteligencia artificial para empresas y evitamos deliberadamente los molestos banners publicitarios. A través de nuestros artículos, documentamos temas que nos ocupan e interesan y también financian nuestro pan de cada día.

Como nuestro contenido es gratuito, sus comentarios son nuestro elogio.

Cada autor lee personalmente tus comentarios anónimos, aunque la IA podría automatizarlos, e integra las sugerencias constructivas directamente en la siguiente revisión o las utiliza como inspiración para el siguiente artículo.



    </artículo
    es_ESES