8 сентября 2026 на GitHub выложен WordPress-плагин Clean Tracked Links 1.1.1. Задача узкая: в редакторе нажать по ссылке и подставить исходный URL вместо трекинговой или редиректной обёртки. Текст анкора не трогается. На сайте у посетителей ссылки сами не переписываются.
Типичный вход, ради которого плагин и собирался: klerk.ru/go/ext/?to=https%3A%2F%2Fwww.vedomosti.ru%2F…. После кнопки «На оригинал» в ссылке остаётся прямой адрес статьи на Ведомостях. Параметр entityId и прочая обёртка уходят.
Зачем это в редакторе, а не на фронте
Автозамена всех ссылок на живом сайте выглядит эффектно и плохо заканчивается. Плагин этого не делает. Он не чистит архив постов пачкой и не добавляет страницу настроек. Работает только когда редактор сам нажимает кнопку.
В Gutenberg это четвёртая кнопка в уже существующей панельке ссылки, рядом с карандашом, «открыть» и копированием. Иконка: две горизонтальные стрелки. Это не системная кнопка ядра WordPress, плагин сам встраивает её в popover.
Где появляется кнопка
- Gutenberg: панель ссылки и запасная кнопка в тулбаре формата, когда курсор стоит на ссылке.
- Классический редактор TinyMCE: рядом со стандартной «ссылкой», во всплывающей панели и в окне «Вставить/редактировать ссылку».
- Встроенный WYSIWYG на произвольных полях: ACF и другие вызовы
wp_editor(), в том числе teeny.
Сборки и npm нет. После установки из ZIP плагин должен работать сразу. Нужны WordPress 6.4+ и PHP 8.1+.
Как поставить
Релизный код в репозитории A-Krivoshen/clean-tracked-links. Для установки достаточно Code → Download ZIP, не путать с исходником без структуры плагина: в wp-content/plugins/clean-tracked-links/ должен лежать файл clean-tracked-links.php.
wp plugin activate clean-tracked-links wp plugin get clean-tracked-links --field=version
Ожидаемый ответ: 1.1.1. Дальше открыть запись, кликнуть по ссылке, нажать «На оригинал».
Что делает разворот
Сложную логику плагин не тащит в браузер. JS быстро достаёт параметры to, url и target, если это уже готовый http(s). Иначе уходит на REST: POST /wp-json/clean-tracked-links/v1/unwrap, право edit_posts или edit_pages.
- Параметры цели по очереди:
to,url,target,u,dest,destination,redirect,redirect_url,link. Значение декодируется, вложенные обёртки до трёх раз. - Если целевого параметра нет, но URL похож на промежуточный редирект (путь вроде
/go/,/out/или короткий хост вроде bit.ly), плагин делает HEAD, при необходимости ограниченный GET, без тела страницы, и берёт Location. Максимум три редиректа, таймаут 5 секунд. - У почти чистого адреса срезаются только служебные метки:
utm_*,yclid,ysclid,gclid,fbclid,_openstat,from,eref,ref,ref_src. Параметры вродеid,article,slug,pageне трогаются.
Повторный клик по уже обычной ссылке её не портит: редактор видит короткое «Уже обычная ссылка». Если исходный адрес найти нельзя, href остаётся как был.
Что сознательно не принимается
Только http и https. javascript:, data:, file: и адреса с логином в URL отбрасываются. Localhost, частные и link-local адреса, IPv4-mapped loopback вроде ::ffff:127.0.0.1, decimal-обходы 2130706433 и хосты metadata не резолвятся. Результат проходит через wp_http_validate_url и esc_url_raw.
Это не «антивирус для всех ссылок сайта». Это кнопка в редакторе, которая не должна стать прокси в локальную сеть.
Как проверить
- Обёртка klerk с параметром
toстановится прямой ссылкой на целевой материал. https://example.com/news/helloбез изменений.?utm_source=tg&yclid=123срезается, путь статьи остаётся.- Кнопка в Gutenberg не размножается при повторном открытии той же ссылки.
- Если Gutenberg нет: классический редактор и поле ACF с визуальным редактором.
Лицензия MIT. Код, тесты и README: github.com/A-Krivoshen/clean-tracked-links. Задачи по WordPress и сопровождению сайтов на wordpress.krivoshein.site.