Продолжаю развивать свой сайт. Мне захотелось, чтобы мои новые посты публиковались на канале сайта в телеграм, кстати, кто еще не подписался, подписывайтесь, чтобы следить за обновлениями на сайте.
Скорее всего для WordPress существует куча разных решений для репоста постов с сайта в телеграм, но зачем нам это если мы сами ж программисты, поэтому я сразу решил сделать все своими силами и не прибегать к какому либо готовому решению.
Итак, для репоста в свой телеграм канал, нам потребуется сайт на WordPress, телеграм канал и токен бота, который потребуется получить через папу ботов телеграмма — @BotFather
Открываем @BotFather пишим ему команду
/newbot
В ответ от вас потребуется придумать и ввести имя бота и имя бота с постфексом _bot
После этого папа ботов сгенерирует для вас токен для HTTP API
Этот токен мы и будем использовать для нашей системы репостинга обновлений на сайте
после этого требуется отредактировать wp-config.php и добавить туда константу:
define( 'TELEGRAM_BOT_TOKEN', '<TOKEN>' );
<TOKEN> заменить на тот токен, который мы получили при создании нового бота через @BotFather
После этого нам потребуется определить ID канала для того, чтобы передать нашему боту информацию о том в какой чат требуется отправлять сообщения. В моем случае, я использовал закрытый канал, поэтому мне потребовалось выполнить следующие действия для получения ID канала
- Добавляем в качестве администратора нашего новорожденного бота на наш канал
- Публикуем тестовый пост ( который потом будет не жалко удалить )
- Выполняем элементарный запрос curl
curl —location ‘https://api.telegram.org/bot<TOKEN>/getUpdates’ - В ответ получаем ID нашего чата, который вставляем в wp-config.php
define( 'TELEGRAM_CHANNEL_ID', <ID_CHANNEL> );
Теперь все готово к написанию нашего основного функционала!
Открываем нашу текущую тему WordPress ( предварительно скопировав ее в новую директорию, чтобы обновления темы не затерли наши изменения ) и находим там файл functions.php, в него мы и будем вносить изменения.
В данном случае нас интересуют только новые посты, поэтому мы будем использовать событие WordPress — save_post
Регистрируем новую функцию, которая будет выполнятся каждый раз, когда на сайте будет опубликован новый пост
add_action( 'save_post', 'send_telegram' );
Теперь, напишем код функции send_telegram
function send_telegram( $post_id ) { $post = get_post($post_id); $is_new = $post->post_date === $post->post_modified; if ( !$is_new || wp_is_post_revision( $post_id ) || $post->post_status != 'publish') return; message_to_telegram( $post ); }
Эта функция выполняет проверяет является ли пост новым публичным и не ревизией поста и если эти условия выполняются, то вызывается функция message_to_telegram
function message_to_telegram($post) { $url = get_permalink($post->ID); $text = preg_replace('/[\n\r]+/s', "\n\n", strip_tags($post->post_content)); if (strlen($text) > 500) { $text = substr($text, 0, 500) . '...'; } $ch = curl_init(); $ch_post = [ CURLOPT_URL => sprintf('https://api.telegram.org/bot%s/sendMessage', TELEGRAM_BOT_TOKEN), CURLOPT_POST => true, CURLOPT_RETURNTRANSFER => true, CURLOPT_TIMEOUT => 10, CURLOPT_POSTFIELDS => [ 'chat_id' => TELEGRAM_CHANNEL_ID, 'parse_mode' => 'HTML', 'text' => sprintf("<a href=\"%s\">%s</a> %s \n\n<a href=\"%s\">Взглянуть ?</a>", $url, $post->post_title, $text, $url), ] ]; curl_setopt_array($ch, $ch_post); curl_exec($ch); }
Эта функция выполняет отправку ссылку и первые 500 символов нового поста в канал телеграм
Ну вот и все, быстрое и минималистичное решение для уведомления о новых постах в телеграм канале. Как это работает можете увидеть на канале, обязательно подпишитесь на него, чтобы не пропустить обновление на сайте.
А если вас интересует создание ботов телеграм или создание сайта на движке wordpress то всегда можете написать мне в телеграм.