Upload via GUI (39 Dateien)

This commit is contained in:
2026-08-14 07:59:43 +00:00
parent 05a2e1c7b6
commit 90f388f49c
31 changed files with 16919 additions and 5554 deletions
+209
View File
@@ -0,0 +1,209 @@
<?php
/**
* WP Multi Modul: Telegram-Benachrichtigung
*
* Automatisch aus wp-multi.php ausgelagert. Wird über den Loader in
* wp-multi.php eingebunden (nur wenn das WP Multi Toolkit aktiv ist).
*/
if (!defined('ABSPATH')) { exit; }
/*
* Telegram Notify
*/
// Admin-Seiten Callback
function tg_notify_page() {
wpmt_admin_page_open(
__('TG-Notify', 'wp-stat-notice'),
__('Telegram-Benachrichtigungen bei neuen Beiträgen', 'wp-stat-notice')
);
wpmt_admin_card_open();
?>
<form method="post" action="options.php">
<?php
settings_fields('tg_notify_options_group');
do_settings_sections('tg-notify');
submit_button('Speichern', 'primary', 'submit', true);
?>
</form>
<?php
wpmt_admin_card_close();
wpmt_admin_page_close();
}
// Einstellungen registrieren
function tg_notify_register_settings() {
register_setting('tg_notify_options_group', 'tg_notify_bot_name');
register_setting('tg_notify_options_group', 'tg_notify_bot_token');
register_setting('tg_notify_options_group', 'tg_notify_chat_ids');
register_setting('tg_notify_options_group', 'tg_notify_custom_message');
add_settings_section('tg_notify_main_section', __('Telegram Einstellungen', 'wp-stat-notice'), null, 'tg-notify');
add_settings_field('tg_notify_bot_name', __('Bot Name', 'wp-stat-notice'), 'tg_notify_bot_name_callback', 'tg-notify', 'tg_notify_main_section');
add_settings_field('tg_notify_bot_token', __('Bot Token', 'wp-stat-notice'), 'tg_notify_bot_token_callback', 'tg-notify', 'tg_notify_main_section');
add_settings_field('tg_notify_chat_ids', __('Kanal IDs', 'wp-stat-notice'), 'tg_notify_chat_ids_callback', 'tg-notify', 'tg_notify_main_section');
add_settings_field('tg_notify_custom_message', __('Custom Nachricht', 'wp-stat-notice'), 'tg_notify_custom_message_callback', 'tg-notify', 'tg_notify_main_section');
}
add_action('admin_init', 'tg_notify_register_settings');
// Callback-Funktionen
function tg_notify_bot_name_callback() {
$value = get_option('tg_notify_bot_name', '');
echo '<input type="text" name="tg_notify_bot_name" value="' . esc_attr($value) . '" class="regular-text">';
}
function tg_notify_bot_token_callback() {
$value = get_option('tg_notify_bot_token', '');
echo '<input type="text" name="tg_notify_bot_token" value="' . esc_attr($value) . '" class="regular-text">';
}
function tg_notify_chat_ids_callback() {
$value = get_option('tg_notify_chat_ids', '');
echo '<textarea name="tg_notify_chat_ids" class="large-text code" rows="3">' . esc_textarea($value) . '</textarea>';
echo '<p>Kanal ohne Thema: -1001234567890</p>';
echo '<p>Kanal mit Thema: -1001234567890_123</p>';
}
function tg_notify_custom_message_callback() {
$value = get_option('tg_notify_custom_message', '');
echo '<textarea name="tg_notify_custom_message" class="large-text code" rows="5">' . esc_textarea($value) . '</textarea>';
echo '<p>Verfügbare Variablen: {title}, {author}, {link}</p>';
}
// Checkbox beim Beitrag hinzufügen
function tg_notify_add_meta_box() {
add_meta_box(
'tg_notify_meta_box',
__('Telegram Benachrichtigung', 'wp-stat-notice'),
'tg_notify_meta_box_callback',
'post',
'side',
'high'
);
}
add_action('add_meta_boxes', 'tg_notify_add_meta_box');
function tg_notify_meta_box_callback($post) {
$value = get_post_meta($post->ID, '_tg_notify_send', true);
// Standardmäßig auf 1 setzen, wenn der Beitrag neu ist
if (empty($value) && get_post_status($post->ID) !== 'publish') {
$value = 1;
}
wp_nonce_field('tg_notify_meta_box', 'tg_notify_meta_box_nonce');
echo '<label><input type="checkbox" name="tg_notify_send" value="1" ' . checked($value, 1, false) . '> ' . __('Benachrichtigung senden', 'wp-stat-notice') . '</label>';
}
function tg_notify_save_post($post_id) {
// Sicherheitsprüfungen
if (!isset($_POST['tg_notify_meta_box_nonce']) || !wp_verify_nonce($_POST['tg_notify_meta_box_nonce'], 'tg_notify_meta_box')) return;
if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return;
if (wp_is_post_revision($post_id) || wp_is_post_autosave($post_id)) return;
if (!current_user_can('edit_post', $post_id)) return;
// Prüfen, ob der Beitrag wirklich veröffentlicht wurde
if (get_post_status($post_id) !== 'publish') return;
// Prüfen, ob die Nachricht bereits gesendet wurde
$already_sent = get_post_meta($post_id, '_tg_notify_sent', true);
if ($already_sent) return;
$send_notification = isset($_POST['tg_notify_send']) ? 1 : 0;
update_post_meta($post_id, '_tg_notify_send', $send_notification);
if ($send_notification) {
tg_notify_send_telegram_message($post_id);
update_post_meta($post_id, '_tg_notify_sent', 1);
}
}
add_action('save_post', 'tg_notify_save_post');
function tg_notify_send_telegram_message($post_id) {
$bot_token = get_option('tg_notify_bot_token');
$chat_ids = explode("\n", get_option('tg_notify_chat_ids'));
$message_template = get_option('tg_notify_custom_message');
$post = get_post($post_id);
// Überprüfen, ob der Beitrag von einem Gast-Author stammt
$author_name = get_the_author_meta('display_name', $post->post_author);
if (empty($author_name)) {
// Falls kein Name vorhanden ist (Gast-Author), den Gast-Namen verwenden oder einen Platzhalter setzen
$author_name = 'Gast-Author';
}
// Nachricht formatieren
$message = str_replace(
['{title}', '{author}', '{link}'],
[$post->post_title, $author_name, get_permalink($post_id)],
$message_template
);
foreach ($chat_ids as $chat_id) {
$chat_id = trim($chat_id);
if (!empty($chat_id)) {
// Überprüfen, ob die ID das Thema enthält (Format: -1001234567890_123)
if (strpos($chat_id, '_') !== false) {
// Kanal-ID und Themen-ID trennen
list($channel_id, $topic_id) = explode('_', $chat_id);
$chat_id = $channel_id;
// Telegram API-Anfrage senden
$url = "https://api.telegram.org/bot$bot_token/sendMessage";
$args = [
'body' => json_encode([
'chat_id' => $chat_id,
'text' => $message,
'parse_mode' => 'HTML',
'reply_to_message_id' => $topic_id
]),
'headers' => ['Content-Type' => 'application/json'],
'method' => 'POST',
];
// API-Request senden und Fehlerprotokollierung
$response = wp_remote_post($url, $args);
if (is_wp_error($response)) {
$error_message = $response->get_error_message();
error_log("Telegram Fehler: $error_message");
} else {
// Erhöhe den Telegram-Nachrichtenzähler
tg_notify_increment_telegram_message_count();
}
} else {
// Normaler Kanal ohne Thema
$url = "https://api.telegram.org/bot$bot_token/sendMessage";
$args = [
'body' => json_encode([
'chat_id' => $chat_id,
'text' => $message,
'parse_mode' => 'HTML'
]),
'headers' => ['Content-Type' => 'application/json'],
'method' => 'POST',
];
// API-Request senden und Fehlerprotokollierung
$response = wp_remote_post($url, $args);
if (is_wp_error($response)) {
$error_message = $response->get_error_message();
error_log("Telegram Fehler: $error_message");
} else {
// Erhöhe den Telegram-Nachrichtenzähler
tg_notify_increment_telegram_message_count();
}
}
}
}
}
function tg_notify_increment_telegram_message_count() {
$current_count = get_option('wp_multi_telegram_message_count', 0);
update_option('wp_multi_telegram_message_count', $current_count + 1);
}