Telegram-шаблон для WP Telegram без ссылок в анонсе: clean_excerpt и виджет

Сайт krivoshein.site не собирает персональные данные. Используются только обезличенные данные для аналитики с помощью Яндекс.Метрики и Rambler Top100.

Плагин 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, а на сайте виден живой тред.

Источники и ссылки


Комментарии загружаются…