Как получить текущий URL в Contact Form 7
Я использую Contact Form 7 в моей установке WordPress. Мне нужно каким-то образом передать скрытое поле с URL текущей страницы в скрытое поле контактной формы. Я пробовал их пользовательскую функцию и пытался использовать шорткод, но безуспешно.
wpcf7_add_shortcode('sourceurl', 'wpcf7_sourceurl_shortcode_handler', true);
function wpcf7_sourceurl_shortcode_handler($tag) {
if (!is_array($tag)) return '';
$name = $tag['name'];
if (empty($name)) return '';
$html = '<input type="hidden" name="' . $name . '" value="http://' . $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"] . '" />';
return $html;
}
В редакторе формы я пробовал использовать [sourceurl thesource]
Посмотрите этот пример того, как создать и обработать шорткод в Contact Form 7. Чтобы использовать его, добавьте [current_url]
add_action( 'wpcf7_init', 'wpcf7_add_form_tag_current_url' );
function wpcf7_add_form_tag_current_url() {
// Добавляем шорткод для формы [current_url]
wpcf7_add_form_tag( 'current_url',
'wpcf7_current_url_form_tag_handler',
array(
'name-attr' => true
)
);
}
// Обрабатываем шорткод на фронтенде
function wpcf7_current_url_form_tag_handler( $tag ) {
global $wp;
$url = home_url( $wp->request );
return '<input type="hidden" name="'.$tag['name'].'" value="'.$url.'" />';
}
Также, если вам нужно просто получить URL в письме, все это не требуется. Для этого есть специальный тег [_url]
Специальные почтовые теги CF7

Согласно документации Contact Form 7 вам понадобится следующее:
[_url] — Этот тег заменяется на URL страницы, в которой размещена контактная форма.

Вы можете использовать шорткоды скрытых полей в CF7 + параметры GET: https://contactform7.com/hidden-field/ https://contactform7.com/getting-default-values-from-the-context/
В почтовой форме я использую такие шорткоды для получения этих слагов:
[hidden utm_source default:get]
[hidden utm_medium default:get]
[hidden utm_campaign default:get]
[hidden utm_content default:get]
[hidden gclid default:get]
Это также работает с их плагином Flamingo.
И для почтового шаблона [_url]
работает отлично.

Форма уже отправляет контейнерный пост, поэтому вам просто нужно получить его и поместить в электронное письмо.
Для этого попробуйте следующий код:
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;
});
При редактировании отправляемого письма вы можете получить URL с помощью [containerURL]
