Написал скрипт который сохраняет utm метки между страницами (для отслеживание статистики кто откуда пришел)
// Функция для получения UTM-параметров из URL
function getUTMParams() {
const urlParams = new URLSearchParams(window.location.search);
return {
utm_source: urlParams.get('utm_source'),
utm_medium: urlParams.get('utm_medium'),
utm_campaign: urlParams.get('utm_campaign')
};
}
// Функция для добавления UTM-параметров к внутренним ссылкам
function addUTMToInternalLinks() {
const utmParams = getUTMParams();
const links = document.querySelectorAll('a');
links.forEach(link => {
const href = link.getAttribute('href');
// Проверяем, является ли ссылка внутренней
const isInternalLink = href && (href.startsWith('/') || href.includes(window.location.hostname));
// Проверка, содержит ли ссылка UTM-параметры
const hasUTMParams = /[?&]utm_/.test(href);
// Если ссылка внутренняя и не содержит UTM-параметров, добавляем их
if (isInternalLink && !hasUTMParams) {
const newUrl = new URL(href, window.location.origin);
if (utmParams.utm_source) newUrl.searchParams.set('utm_source', utmParams.utm_source);
if (utmParams.utm_medium) newUrl.searchParams.set('utm_medium', utmParams.utm_medium);
if (utmParams.utm_campaign) newUrl.searchParams.set('utm_campaign', utmParams.utm_campaign);
link.setAttribute('href', newUrl.toString());
}
});
}
// Запуск функции после загрузки страницы
document.addEventListener("DOMContentLoaded", addUTMToInternalLinks);
Но есть один нюанс, на медленном интернет соединении эти utm не добавляется быстро (может пройти порядка 5 секунд) и как следствие можем потерять utm. Думал переписать это на php но не понимаю как быть с множеством кастомных полей (сделаны через carbonfields). Так бы я применил the_content хук-фильтр (при использовании только базового функционала wp)