Cómo obtener la URL actual en Contact Form 7
Estoy usando Contact Form 7 en mi instalación de WordPress. Necesito de alguna manera pasar un campo oculto con la URL de la página actual en un campo oculto del formulario de contacto. He intentado usar su función personalizada y probé el shortcode, sin éxito.
wpcf7_add_shortcode('sourceurl', 'wpcf7_sourceurl_shortcode_handler', true);
function wpcf7_sourceurl_shortcode_handler($tag) {
// Si el tag no es un array, retornar cadena vacía
if (!is_array($tag)) return '';
$name = $tag['name'];
// Si el nombre está vacío, retornar cadena vacía
if (empty($name)) return '';
$html = '<input type="hidden" name="' . $name . '" value="http://' . $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"] . '" />';
return $html;
}
En la edición del formulario intenté [sourceurl thesource]

Mira este ejemplo sobre cómo crear y analizar el shortcode en el formulario de contacto 7 para usarlo, añade [current_url]
add_action( 'wpcf7_init', 'wpcf7_add_form_tag_current_url' );
function wpcf7_add_form_tag_current_url() {
// Añadir shortcode para el formulario [current_url]
wpcf7_add_form_tag( 'current_url',
'wpcf7_current_url_form_tag_handler',
array(
'name-attr' => true
)
);
}
// Analizar el shortcode en el frontend
function wpcf7_current_url_form_tag_handler( $tag ) {
global $wp;
$url = home_url( $wp->request );
return '<input type="hidden" name="'.$tag['name'].'" value="'.$url.'" />';
}
Además, si solo se trata de obtener la URL en el correo electrónico, no necesitas todo esto. Hay una etiqueta especial para el correo [_url]
Etiquetas especiales de correo de CF7

según la documentación de Contact Form 7 necesitas esto:
[_url] — Esta etiqueta es reemplazada por la URL de la página en la que se encuentra el formulario de contacto.
referencia: https://contactform7.com/special-mail-tags/

Puedes usar los shortcodes de campos ocultos de cf7 + parámetros get: https://contactform7.com/hidden-field/ https://contactform7.com/getting-default-values-from-the-context/
En el formulario de correo utilizo estos shortcodes para obtener los slugs
[hidden utm_source default:get]
[hidden utm_medium default:get]
[hidden utm_campaign default:get]
[hidden utm_content default:get]
[hidden gclid default:get]
También funciona con su plugin flamingo.
Y para la plantilla de correo [_url]
funciona muy bien.

el envío del formulario ya incluye el post contenedor, así que solo necesitas recuperarlo y añadirlo al correo.
Para ello, prueba este código:
add_filter("wpcf7_posted_data", function ($wpcf7_posted_data) {
$post = get_post($wpcf7_posted_data["_wpcf7_container_post"]);
$wpcf7_posted_data["containerURL"] = get_permalink($post);
return $wpcf7_posted_data;
});
Y en la edición del correo enviado, recuperas la URL con [containerURL]
