想要把 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 名称和用户名,如果用户名可用的话会弹出如下图内容:
上述打码部分就是 API Token 了。至于 CHAT ID 则是频道或群组名称,例如本站 TG 频道名称为 @atszzyg
最后附上本站 TG 频道链接,防止失联:https://t.me/atszzyg
评论0