Когда WordPress обнаруживает символ "?", он автоматически заменяет его на "#" в URL-адресе, что может привести к потере UTM-меток и других параметров запроса. Это происходит из-за функции redirect_canonical()
, которая выполняется в WordPress для управления каноническими URL-адресами.
Чтобы предотвратить изменение символов в URL-адресе, можно использовать фильтр redirect_canonical
, который позволит вам изменить логику редиректа.
Пример кода для исправления проблемы с заменой символа "?" на "#" в UTM ссылках:
function custom_redirect_canonical($redirect_url, $requested_url) { if (is_404()) { return $redirect_url; } $utm_parameters = array('utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content'); foreach ($utm_parameters as $param) { if (strpos($requested_url, $param . '=') !== false) { $redirect_url = add_query_arg($param, get_query_var($param), $redirect_url); } } return $redirect_url; } add_filter('redirect_canonical', 'custom_redirect_canonical', 10, 2);
Этот код применяет фильтр custom_redirect_canonical
, который проверяет параметры запроса и, если обнаруживает UTM-метки, добавляет их обратно в URL-адрес перенаправления.
Чтобы использовать этот код, его можно добавить в файл functions.php темы или в файл плагина для пользовательских функций. После добавления кода, символ "?" в UTM ссылках не будет заменяться на "#".
Такой подход позволит сохранить UTM-метки и другие параметры запроса в URL-адресе, не допуская их автоматической перезаписи WordPress.