纯代码将 WordPress 博客文章自动同步推送到 Telegram 频道或电报群

想要把 WordPress 文章自动同步到 Telegram 群或者电报频道,很多人会选择安装使用“WP Telegram”插件。不过本站测试 WP Telegram 插件同步图片时,只能同步从媒体库中添加的特色图片。如果文章中没有添加特色图片,或者配图为外链图片,则无法同步。再者,为了推送文章而专门安装一款插件,也“有些太重”了!因此,本着实现同步外链图片,以及轻量的需要,推荐使用纯代码的方式。

闲言少叙,直接上代码:

// 添加自定义 Meta Box 来选择是否同步到 Telegram
function add_telegram_sync_meta_box() {
add_meta_box(
'telegram_sync_meta_box', // Meta box ID
'同步到 Telegram', // Meta box 标题
'telegram_sync_meta_box_callback', // 回调函数
'post', // 文章类型
'side', // 显示位置
'high' // 优先级
);
}
add_action('add_meta_boxes', 'add_telegram_sync_meta_box');

// Meta Box 回调函数
function telegram_sync_meta_box_callback($post) {
// 获取当前文章是否选中同步到 Telegram
$is_synced = get_post_meta($post->ID, '_telegram_sync', true);
// 显示复选框,是否同步到 Telegram
echo '<label for="telegram_sync">';
echo '<input type="checkbox" name="telegram_sync" id="telegram_sync" value="1" ' . checked($is_synced, 1, false) . ' /> ';
echo '是否同步到 Telegram';
echo '</label>';
}

// 保存 Meta Box 的数据
function save_telegram_sync_meta($post_id) {
// 检查是否是自动保存
if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return;

// 只保存文章类型
if (get_post_type($post_id) != 'post') return;

// 检查是否选择了同步到 Telegram
if (isset($_POST['telegram_sync'])) {
update_post_meta($post_id, '_telegram_sync', 1);
} else {
delete_post_meta($post_id, '_telegram_sync');
}
}
add_action('save_post', 'save_telegram_sync_meta');

// 发送消息到 Telegram
function send_to_telegram($post_id) {
// 检查是否为自动保存或修订版本
if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return;

// 检查文章类型(只针对文章)
if (get_post_type($post_id) != 'post') return;

// 获取文章是否选择同步到 Telegram
$is_synced = get_post_meta($post_id, '_telegram_sync', true);
if (!$is_synced) return; // 如果没有选择同步到 Telegram,退出

// 获取文章信息
$post = get_post($post_id);
if (!$post || $post->post_status != 'publish') {
return; // 仅当文章状态为“发布”时执行
}

// 获取文章标题、链接、分类、标签和图片
$title = $post->post_title;
$link = get_permalink($post_id);
$categories = wp_get_post_categories($post_id, ['fields' => 'names']);
$tags = wp_get_post_tags($post_id, ['fields' => 'names']);
$image = get_the_post_thumbnail_url($post_id, 'full');

// 如果没有特色图片,尝试提取内容中的第一张图片
if (!$image) {
preg_match('/<img.+src=[\'"]([^\'"]+)[\'"].*>/i', $post->post_content, $matches);
$image = $matches[1] ?? '';
}

// 格式化消息
$message = "*$title*\n\n";
if ($categories) {
$message .= "📂 分类: #" . implode(' #', $categories) . "\n";
}
if ($tags) {
$message .= "🏷️ 标签: #" . implode(' #', $tags) . "\n";
}
$message .= "\n🔗 链接:$link"; 

// Telegram API 配置
$api_token = 'YOUR_API_TOKEN'; // 替换为你的 Bot Token
$chat_id = 'YOUR_CHAT_ID'; // 替换为你的 Chat ID

// 发送消息到 Telegram
if ($image) {
// 如果有图片,发送带图片的消息
$photo_url = "https://api.telegram.org/bot$api_token/sendPhoto";
$photo_data = [
'chat_id' => $chat_id,
'photo' => $image,
'caption' => $message,
'parse_mode' => 'Markdown',
];
wp_remote_post($photo_url, ['body' => $photo_data]);
} else {
// 如果没有图片,发送纯文本消息
$text_url = "https://api.telegram.org/bot$api_token/sendMessage";
$text_data = [
'chat_id' => $chat_id,
'text' => $message,
'parse_mode' => 'Markdown',
];
wp_remote_post($text_url, ['body' => $text_data]);
}
}
add_action('save_post', 'send_to_telegram');
  • 这段代码通过 WordPress 的 Meta Box 功能,允许在文章编辑页面为每篇文章添加一个复选框,用于选择是否同步文章到 Telegram。
  • 如果文章勾选了同步,文章的标题、链接、分类、标签和图片会通过 Telegram Bot API 自动发送到指定的 Telegram 频道或群组。
  • 用户可通过勾选/取消勾选复选框来控制是否同步文章,提供了灵活的 Telegram 自动推送功能。

需要注意的是代码中的“YOUR_API_TOKEN”和“YOUR_CHAT_ID”要改为自己实际的。

$api_token = 'YOUR_API_TOKEN'; // 替换为你的 Bot Token
$chat_id = 'YOUR_CHAT_ID'; // 替换为你的 Chat ID

如何申请 Telegram API Token 呢?

在 Telegram 中搜索并打开 BotFather,发送 /newbot 并按提示设置 Bot 名称和用户名,如果用户名可用的话会弹出如下图内容:

WP Telegram.webp

上述打码部分就是 API Token 了。至于 CHAT ID 则是频道或群组名称,例如本站 TG 频道名称为 @atszzyg

最后附上本站 TG 频道链接,防止失联:https://t.me/atszzyg

0

评论0

没有账号?注册  忘记密码?

社交账号快速登录

微信扫一扫关注
如已关注,请回复“登录”二字获取验证码