Преобразует ссылки Telegram из https://t.me/username в tg://resolve?domain=username на сайте wordpress gutenberg
/**
* Преобразует ссылки Telegram из https://t.me/username в tg://resolve?domain=username
* Корректно обрабатывает параметры (?text=... превращается в &text=...)
*/
function convert_telegram_links_to_tg_scheme($content) {
$pattern = '/<a\s+([^>]*?)href=["\']https:\/\/t\.me\/([^\/?\'"]+)(\?[^"\']*)?["\']([^>]*)>/i';
$callback = function($matches) {
$attributes_before = $matches[1];
$username = $matches[2];
$query = isset($matches[3]) ? $matches[3] : '';
$attributes_after = $matches[4];
$new_query = '';
if (!empty($query)) {
$params = substr($query, 1);
$new_query = '&' . $params;
}
$new_url = 'tg://resolve?domain=' . $username . $new_query;
return '<a ' . $attributes_before . 'href="' . $new_url . '"' . $attributes_after . '>';
};
return preg_replace_callback($pattern, $callback, $content);
}
// Применяем к основному контенту (посты, страницы)
add_filter('the_content', 'convert_telegram_links_to_tg_scheme', 20);
// Применяем к виджетам
add_filter('widget_text', 'convert_telegram_links_to_tg_scheme', 20);
// Применяем к выводу меню (если в меню есть ссылки на Telegram)
add_filter('wp_nav_menu_items', 'convert_telegram_links_to_tg_scheme', 20);
add_filter('wp_nav_menu', 'convert_telegram_links_to_tg_scheme', 20);
// Применяем ко всему выводу (header, footer, sidebar и т.д.)
// Вариант 1: через буферизацию вывода (рекомендуется)
function convert_all_telegram_links_buffer() {
ob_start(function($buffer) {
return convert_telegram_links_to_tg_scheme($buffer);
});
}
add_action('wp_loaded', 'convert_all_telegram_links_buffer');
// Вариант 2: через фильтр get_the_excerpt (для анонсов)
add_filter('get_the_excerpt', 'convert_telegram_links_to_tg_scheme', 20);
add_filter('the_excerpt', 'convert_telegram_links_to_tg_scheme', 20);

@seomur
Это сайт с моими заметками по wordpress и woocommerce