Плагин WP Telegram удобен для автопостинга записей в канал. На стороне сайта часто подключают виджет обсуждений Telegram. Если в посте канала много ссылок (в excerpt, в «обёртках» вокруг URL), виджет может ответить Discussion is not available at the moment и не привязать тред к статье.
Ниже шаблон без лишних URL в анонсе, кастомная очистка excerpt и запасной путь через фильтр wptelegram_post_excerpt.
Исходный шаблон и симптом
Типичный шаблон в настройках WP Telegram:
📅 <i>{post_date}</i> | ✍️ <i>{post_author}</i>
📌 <b>{post_title}</b> 📌
{post_excerpt}
{tags}
Подробнее 👉
{full_url}
На сайте виджет комментариев при этом может не открыть discussion. Причина обычно не в «сломанном» плагине, а в том, как Telegram сопоставляет пост канала со страницей.
Требование: «чистая» ссылка на статью
Для привязки обсуждения ссылка на запись (например https://krivoshein.site/slug-записи) должна быть:
- на отдельной строке;
- без лишнего обрамления (не внутри странной разметки, не «слипшаяся» с другим URL).
Даже при отдельной строке {full_url} мешают другие ссылки в {post_excerpt}: на внешние ресурсы, на тот же сайт, хвосты из HTML. Тогда Telegram хуже «видит» единственную каноническую ссылку на обсуждаемую запись.
Решение 1: переменная clean_excerpt
Через фильтр wptelegram_post_template_vars можно добавить свою переменную: strip tags, вырезать http(s)-URL, обрезать длину. В functions.php дочерней темы:
add_filter('wptelegram_post_template_vars', function($vars, $post) {
$excerpt = get_the_excerpt($post);
$excerpt = wp_strip_all_tags($excerpt); // убираем HTML
$excerpt = preg_replace('/https?:\/\/[^\s]+/', '', $excerpt); // убираем ссылки
$excerpt = wp_trim_words($excerpt, 40); // до 40 слов
$vars['clean_excerpt'] = trim($excerpt);
return $vars;
}, 10, 2);
В шаблоне канала:
{clean_excerpt}
Решение 2: если clean_excerpt не подставляется
Иногда в канал уходит буквальная строка {clean_excerpt} (переменная не раскрылась: кэш, версия плагина, другой контекст шаблона). Надёжный запасной путь править сам excerpt плагина:
add_filter('wptelegram_post_excerpt', function($excerpt, $post) {
$excerpt = wp_strip_all_tags($excerpt);
$excerpt = preg_replace('/https?:\/\/[^\s]+/', '', $excerpt);
return wp_trim_words($excerpt, 40);
}, 10, 2);
Тогда даже стандартный {post_excerpt} в шаблоне уже без URL.
Рабочий шаблон
📅 <i>{post_date}</i> | ✍️ <i>{post_author}</i>
📌 <b>{post_title}</b> 📌
{post_excerpt}
{tags}
🌐 Читай в блоге:
{full_url}
Критично: {full_url} на своей строке, до него в тексте поста канала нет других ссылок (excerpt уже очищен фильтрами выше).
Пересоздание поста и ID в виджете
Если старый пост в канале удаляли и публиковали заново (смена slug, «обнуление» треда), ID сообщения в Telegram уже другой. Виджет на сайте, привязанный к старому message id, discussion не покажет.
Исправление: заново отправить запись в канал (вручную из WP Telegram → Send to Telegram или повторной публикацией по правилам плагина), чтобы виджет получил актуальную привязку.
Кратко
- лишние URL в excerpt ломают ожидания Telegram discussion widget;
wptelegram_post_template_vars+{clean_excerpt}или фильтрwptelegram_post_excerpt;{full_url}отдельной строкой, одна каноническая ссылка на статью;- после удаления/пересоздания поста в канале повторная отправка, иначе виджет смотрит на старый ID.
В связке «сайт без сбора ПДн через свои комментарии + Telegram-виджет + чистый шаблон» обсуждения остаются в Telegram, а на сайте виден живой тред.