Плагин WordPress для бота Telegram
Хотим, чтобы Telegram-бот постил в канал о новых постах и комментариях на WordPress-сайте. Под такое дело напишем плагин для WordPress.
Предполагается, что у вас уже есть канал в Телеграм (для примера, @testchannel), где размещаются новости сайта; а также имеется бот, вы знаете его токен, и он входит в число администраторов канала.
Идея такова: при событии публикации поста или комментария отправлять HTTP-запрос к боту с помощью cURL, а бот будет постить объявление на канале.
Итак, идём туда, где лежит наш сайт на WordPress (у меня сейчас версия 4.3.1), переходим в каталог с плагинами (/wp-content/plugins/
), создаём там новый каталог, например notify-telegram-bot
, а в нём создаём файл notify-telegram-bot.php
следующего содержания:
<?php
/*
Plugin Name: Оповещение для бота в Телеграм
Description: Отправляет боту сообщение о новом посте
Version: 1.0
Author: ТВАЁИМЯ
Author URI: mailto:ТВАЁИМЯ@udaff.com
License: MIT
*/
// активация плагина
function ntb_plugin_install() { }
register_activation_hook( __FILE__, 'ntb_plugin_install' );
// функция отправки оповещения
function publish_on_channel( $ID, $post ) {
// если пост опубликован и это не апдейт
if ($post->post_status == "publish" && $post->post_modified_gmt == $post->post_date_gmt)
{
try
{
// можно добавить название поста: $post->post_title
// но Open Graph и так всё вытащит в превью (если стоит плагин WP Open Graph)
$msg = "Новая статья на сайте! Ссылка: " . get_permalink( $ID );
// так как пишем в канал, то вместо ID пользователя-получателя подставляется имя канала
$ch = curl_init("https://api.telegram.org/botТУТПОСТАВИТЬТОКЕНБОТА/sendMessage?chat_id=@testchannel&text=" . $msg);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, false);
curl_exec($ch);
curl_close ($ch);
}
catch(Exception $ex)
{
// тут какая-нибудь обработка ошибки
}
}
}
// цепляемся к hook'у публикации поста
add_action( 'publish_post', 'publish_on_channel', 10, 2 );
// отправка оповещения о новом комментарии
function publish_comment_on_channel($commentID, $isApproved) {
// сам комментарий
$cmmnt = get_comment($commentID);
// пост
$pst = get_post($cmmnt->comment_post_ID);
try
{
// сообщение будет с поддержкой Markdown
$msg = "Новый комментарий к посту \"_" . $pst->post_title . "_\" (" . str_replace("_", "\_", get_permalink($cmmnt->comment_post_ID)) . ")!" . "%0A%0A"
. "*Автор*: " . $cmmnt->comment_author . "%0A"
. "*Опубликован*: " . ($cmmnt->comment_approved == 1 ? "да" : "нет") . "%0A"
. "*Текст комментария*: " . $cmmnt->comment_content;
$ch = curl_init("https://api.telegram.org/botТУТПОСТАВИТЬТОКЕНБОТА/sendMessage?chat_id=@testchannel&text=" . trim(preg_replace('/\s+/', ' ', $msg)) . "&parse_mode=Markdown&disable_web_page_preview=true");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, false);
curl_exec($ch);
curl_close ($ch);
}
catch(Exception $ex)
{
// тут какая-нибудь обработка ошибки
}
}
// цепляемся к hook'у добавления комментария
add_action( 'comment_post', 'publish_comment_on_channel', 10, 2 );
Разумеется, бот может писать не только в канал, но и конкретному пользователю (списку пользователей) или в группу - для этого просто нужно вместо имени канала поставить ID пользователя или группы.
Очевидно, что новый метод для бота создавать не нужно, так как это простая отправка сообщения.
Теперь идём в админку сайта и в разделе плагинов активируем только что созданный. Всё, теперь при публикации нового поста, бот будет получать об этом сигнал и постить в канал заданное сообщение с ссылкой.
Подробнее о создании плагинов для WordPress вы можете прочитать в документации.
А вот все мои плагины для интеграции Telegram с CMS.
Social networks
Zuck: Just ask
Zuck: I have over 4,000 emails, pictures, addresses, SNS
smb: What? How'd you manage that one?
Zuck: People just submitted it.
Zuck: I don't know why.
Zuck: They "trust me"
Zuck: Dumb fucks