get_results('SHOW TABLES', ARRAY_N); if (empty($tables)) { return new WP_Error('backup_error', __('Keine Tabellen in der Datenbank gefunden.', 'wp-multi-toolkit')); } // Öffne die Backup-Datei $backup_file = fopen($backup_file_path, 'w'); if (!$backup_file) { return new WP_Error('backup_error', __('Backup-Datei konnte nicht geöffnet werden.', 'wp-multi-toolkit')); } // Schreibe die SQL-Dumps für jede Tabelle foreach ($tables as $table) { $table_name = $table[0]; // SQL-Dump für die Tabelle hinzufügen fwrite($backup_file, "DROP TABLE IF EXISTS `$table_name`;\n"); // Struktur der Tabelle (mit SQL-Injection-Schutz) $create_table_query = $wpdb->get_row($wpdb->prepare('SHOW CREATE TABLE %s', $table_name), ARRAY_N); if ($create_table_query) { fwrite($backup_file, $create_table_query[1] . ";\n\n"); } // Daten der Tabelle in Batches holen (Performance-Optimierung) $offset = 0; $batch_size = 1000; while ($rows = $wpdb->get_results($wpdb->prepare("SELECT * FROM `$table_name` LIMIT %d, %d", $offset, $batch_size), ARRAY_A)) { foreach ($rows as $row) { $columns = array_map(function ($col) use ($wpdb) { return $wpdb->prepare('%s', $col); }, array_values($row)); $columns_str = implode(", ", $columns); fwrite($backup_file, "INSERT INTO `$table_name` VALUES ($columns_str);\n"); } $offset += $batch_size; } fwrite($backup_file, "\n\n"); } // Datei schließen fclose($backup_file); return $backup_file_path; } /** * Löscht ein Backup aus dem Backup-Verzeichnis. */ function wpmt_delete_backup() { if (!current_user_can('manage_options')) { wp_die(__('Du hast nicht die Berechtigung, diese Aktion auszuführen.', 'wp-multi-toolkit')); } if (isset($_POST['wpmt_action']) && $_POST['wpmt_action'] === 'delete_backup' && isset($_POST['backup_file']) && check_admin_referer('wpmt_delete_backup_nonce')) { $backup_file = WPMT_BACKUP_DIR . sanitize_file_name($_POST['backup_file']); if (file_exists($backup_file)) { unlink($backup_file); echo '
' . __('Backup erfolgreich gelöscht!', 'wp-multi-toolkit') . '
' . __('Backup-Datei nicht gefunden.', 'wp-multi-toolkit') . '
' . __('Einstellungen erfolgreich importiert!', 'wp-multi-toolkit') . '
' . __('Ungültige Datei.', 'wp-multi-toolkit') . '
' . __('Konfigurieren Sie automatische Backups und Benachrichtigungen.', 'wp-multi-toolkit') . '
'; }, 'wpmt_backup_settings' ); add_settings_field( 'wpmt_backup_schedule', __('Backup-Zeitplan', 'wp-multi-toolkit'), function() { $schedule = get_option('wpmt_backup_schedule', 'none'); ?> >' . esc_html($backup_path->get_error_message()) . '
'; } else { echo '' . __('Datenbank-Backup erfolgreich erstellt!', 'wp-multi-toolkit') . '
Datenbankbereinigung abgeschlossen:
Hier kannst du gezielt Inhalte aus deiner Datenbank löschen oder bereinigen.
' . __('Einstellungen gespeichert!', 'wp-multi-toolkit') . '
[statistik_manager]
in einen Beitrag oder eine Seite ein, um sie anzuzeigen. Oder gehe zu WP Stat & Notice, um Details wie Beitragsanzahl, Kommentare oder Kategorien zu sehen. Tipp: Aktiviere Benachrichtigungen für wichtige Updates! Bereit, deine Daten zu checken? 😎', 'wp-multi-toolkit'),
esc_html($user_name)
);
$responses['telegram'] = sprintf(
__('Telegram-Benachrichtigungen einrichten, %s? Super einfach! 🔔 Gehe zu Notify > TG-Notify, erstelle einen Bot über BotFather und folge den Schritten, um ihn zu konfigurieren. Neue Beiträge oder Kommentare landen direkt in deinem Chat. Jetzt einrichten. Tipp: Teste den Bot mit einer Probemitteilung! Alles klar? 🚀', 'wp-multi-toolkit'),
esc_html($user_name),
admin_url('admin.php?page=tg-notify')
);
$responses['discord'] = sprintf(
__('Discord-Benachrichtigungen für deine Community, %s? 😄 Gehe zu Notify > DC-Notify, erstelle einen Webhook in deinem Discord-Server und füge ihn in den Einstellungen ein. Neue Beiträge werden automatisch gepostet. Los geht’s! Tipp: Nutze einen separaten Kanal für Benachrichtigungen! Bereit? 🌟', 'wp-multi-toolkit'),
esc_html($user_name),
admin_url('admin.php?page=wp-multi')
);
$responses['admin links'] = sprintf(
__('Eigene Admin-Links hinzufügen, %s? Perfekt für schnellen Zugriff! 🔧 Gehe zu Werkzeuge > Admin-Link hinzufügen, gib Namen und URL ein (z. B. für externe Tools) und speichere. Deine Links erscheinen im Admin-Menü. Tipp: Gruppiere Links für bessere Übersicht! Alles organisiert? 😊', 'wp-multi-toolkit'),
esc_html($user_name)
);
$responses['gast-autor'] = sprintf(
__('Gastautoren auf deiner Seite, %s? 😊 Gehe zu Benutzer > Gastautor (Übersicht), füge Autoren hinzu und weise ihnen Beiträge zu. Ihre Namen erscheinen automatisch im Frontend. Tipp: Füge eine kurze Bio hinzu, um sie vorzustellen! Einfach, oder? ✨', 'wp-multi-toolkit'),
esc_html($user_name)
);
$responses['beitrag report'] = sprintf(
__('Probleme mit Beiträgen, %s? 🧹 Unter Gemeldete Beiträge kannst du unangemessene Inhalte prüfen, bearbeiten oder löschen. So bleibt deine Seite sauber! Brauchst du Hilfe? Erstelle ein Support-Ticket. Alles unter Kontrolle? 🚀', 'wp-multi-toolkit'),
esc_html($user_name),
admin_url('admin.php?page=wp_multi_support')
);
$responses['textbox'] = sprintf(
__('Eine Textbox am Beitragsende, %s? Ideal für Hinweise oder Werbung! ✨ Gehe zu WP Multi > Textbox, füge deinen Text ein und passe das Design an. Die Box erscheint automatisch unter Beiträgen. Tipp: Nutze auffällige Farben für mehr Aufmerksamkeit! Bereit? 😄', 'wp-multi-toolkit'),
esc_html($user_name)
);
$responses['banner'] = sprintf(
__('Ein schickes Banner, %s? 🎨 Gehe zu WP Stat & Notice, lade ein Bild hoch und wähle Header oder Footer. Perfekt, um Neuigkeiten zu präsentieren! Tipp: Verwende Bilder mit hohem Kontrast für bessere Sichtbarkeit. Los geht’s! 🚀', 'wp-multi-toolkit'),
esc_html($user_name)
);
$responses['inhaltsverzeichnis'] = sprintf(
__('Ein Inhaltsverzeichnis für deine Beiträge, %s? 🚀 Nutze den Shortcode [alphabetical_index]
, um alle Beiträge übersichtlich aufzulisten. Ideal für Blogs mit vielen Inhalten! Tipp: Kombiniere es mit Kategoriefiltern für mehr Struktur. Alles klar? 😎', 'wp-multi-toolkit'),
esc_html($user_name)
);
$responses['lesezeichen'] = sprintf(
__('Lesezeichen für deine Besucher, %s? 😎 Mit [add_bookmark]
können Nutzer Beiträge speichern, und [display_bookmarks]
zeigt ihre Liste. Alles per Cookie – keine Datenbank nötig! Tipp: Füge die Shortcodes in eine Sidebar für schnellen Zugriff! Cool, oder? 🚀', 'wp-multi-toolkit'),
esc_html($user_name)
);
$responses['custom shortcode'] = sprintf(
__('Eigene Shortcodes erstellen, %s? Super flexibel! 😉 Gehe zu WP Multi > Shortcodes, lege deinen Shortcode an und füge ihn im Editor ein. Ideal für wiederkehrende Inhalte! Tipp: Dokumentiere deine Shortcodes für spätere Änderungen. Bereit zum Codieren? 🚀', 'wp-multi-toolkit'),
esc_html($user_name)
);
$responses['kommentar sperren'] = sprintf(
__('Bestimmte Nutzer blockieren, %s? 🛡️ Gehe zu Benutzer sperren, gib Benutzername, IP oder E-Mail ein und speichere. So bleibt die Kommentarspalte sauber! Tipp: Überprüfe die Sperrliste regelmäßig, um sie aktuell zu halten. Alles sicher? 😊', 'wp-multi-toolkit'),
esc_html($user_name)
);
$responses['filter'] = sprintf(
__('Kommentare filtern, %s? 😊 Gehe zu Kommentare > Kommentar Filter und verbiete URLs, Schimpfwörter oder Telefonnummern. Verstöße werden mit * ersetzt. Tipp: Teste die Filter mit einem Probekommentar, um sicherzugehen! Deine Community wird’s lieben! 🌟', 'wp-multi-toolkit'),
esc_html($user_name)
);
$responses['analytics'] = sprintf(
__('Datenanalyse für deine Beiträge, %s? 📊 Unter Benutzer > Benutzer Analytics siehst du Views, Kommentare, Top-Beiträge und mehr. Perfekt, um Inhalte zu optimieren! Tipp: Exportiere die Daten für langfristige Analysen. Bereit, ein Profi zu werden? 😎', 'wp-multi-toolkit'),
esc_html($user_name)
);
$responses['pinwand'] = sprintf(
__('Nachrichten für dein Team, %s? 📌 Unter Pinnwand kannst du Notizen für Admins oder Redakteure hinterlegen. Erstelle, bearbeite oder lösche sie jederzeit. Tipp: Nutze die Pinnwand für wichtige To-Dos! Alles organisiert? 😄', 'wp-multi-toolkit'),
esc_html($user_name)
);
$responses['brute force'] = sprintf(
__('Sicherheit zuerst, %s! 🛡️ Der Brute-Force-Schutz protokolliert Fehlversuche und sperrt nach 5 Versuchen. Einstellungen findest du unter Sicherheit. Tipp: Aktiviere Benachrichtigungen, um verdächtige Aktivitäten zu überwachen! Alles sicher? 🚀', 'wp-multi-toolkit'),
esc_html($user_name)
);
$responses['anti spam'] = sprintf(
__('Spam loswerden, %s? 😒 Aktiviere den Anti-Spam-Schutz unter Sicherheit, um Bots zu blockieren. Spam-Kommentare werden automatisch gefiltert. Tipp: Kombiniere es mit Kommentarfiltern für doppelten Schutz! Bereit? 😊', 'wp-multi-toolkit'),
esc_html($user_name)
);
$responses['auto tag'] = sprintf(
__('Automatische Tags, %s? ⏳ Gehe zu Beiträge > Automatische Tags, füge fehlende Tags hinzu oder verbiete Wörter. Spart Zeit! Tipp: Überprüfe die Tags regelmäßig, um sie an deine Inhalte anzupassen. Alles klar? 🚀', 'wp-multi-toolkit'),
esc_html($user_name)
);
$responses['login deaktivieren'] = sprintf(
__('Logins deaktivieren, %s? 🔒 Gehe zu Benutzer > Alle Benutzer, wähle einen Benutzer und schalte den Login ab. Ideal für temporäre Sperren. Tipp: Notiere dir, wen du deaktiviert hast! Alles unter Kontrolle? 😎', 'wp-multi-toolkit'),
esc_html($user_name)
);
$responses['text copy'] = sprintf(
__('Inhalte schützen, %s? 🛡️ Aktiviere die Rechtsklick-Sperre unter WP Multi-Einstellungen, um Texte vor Kopieren zu sichern. Perfekt für Blogs! Tipp: Füge einen Hinweis hinzu, warum Kopieren deaktiviert ist. Bereit? 😊', 'wp-multi-toolkit'),
esc_html($user_name)
);
$responses['trash mail'] = sprintf(
__('Kein Bock auf Spam-Mails, %s? 😊 Wir blockieren Trash-Mails in Kommentaren automatisch. Die Liste wird vom Entwickler gepflegt – du musst nichts tun! Tipp: Aktiviere Anti-Spam für extra Schutz! Alles sauber? 🌟', 'wp-multi-toolkit'),
esc_html($user_name)
);
// WP Multi Comment Notifications
$responses['kommentar benachrichtigung'] = sprintf(
__('Immer über neue Kommentare informiert, %s? 🔔 Gehe zu Kommentare > Kommentar Benachrichtigung und richte E-Mail, Telegram oder Discord ein. Tipp: Filtere Benachrichtigungen, um nur wichtige zu erhalten! Nie wieder etwas verpassen! 😄', 'wp-multi-toolkit'),
esc_html($user_name)
);
// WP Multi Kategorie
$responses['kategorien ausblenden'] = sprintf(
__('Kategorien ausblenden, %s? 🗂️ Gehe zu Beiträge > Kategorie Filter und wähle, was im Frontend nicht angezeigt werden soll. Ideal für eine saubere Seite! Tipp: Teste Änderungen in der Vorschau! Alles organisiert? 🚀', 'wp-multi-toolkit'),
esc_html($user_name)
);
// WP Multi Search
$responses['suchfunktion'] = sprintf(
__('Eine starke Suche, %s? 🔍 Füge WP Multi Search über Shortcode, Widget oder Menü hinzu. Einstellungen findest du unter Einstellung > WP-Multi Search. Tipp: Aktiviere Autovervollständigung für bessere Ergebnisse! Bereit, alles zu finden? 😎', 'wp-multi-toolkit'),
esc_html($user_name)
);
// WP Multi Team-Card
$responses['teamcard'] = sprintf(
__('Dein Team präsentieren, %s? 🌟 Mit WP Multi Team-Card erstellst du professionelle Teamkarten mit Namen, Funktionen und Bildern. Nutze [teamcards]
im Frontend. Jetzt ausprobieren und dein Team ins Rampenlicht stellen! 🚀', 'wp-multi-toolkit'),
esc_html($user_name),
admin_url('admin.php?page=teamcard_management')
);
$responses['teammitglied hinzufügen'] = sprintf(
__('Ein neues Teammitglied, %s? 😄 Gehe zu Team-Cards, gib Name, Funktion, Zuständigkeit und Bild ein und klicke auf Hinzufügen. Tipp: Wähle hochauflösende Bilder für beste Darstellung! Bereit fürs Update? ✨', 'wp-multi-toolkit'),
esc_html($user_name)
);
$responses['teamcard shortcode'] = sprintf(
__('Teamkarten anzeigen, %s? 🚀 Nutze [teamcards]
für alle Mitglieder oder [teamcards kategorie="slug"]
für eine Kategorie. Füge den Shortcode in Beiträge ein. Tipp: Teste verschiedene Layouts! Alles klar? 😊', 'wp-multi-toolkit'),
esc_html($user_name)
);
$responses['teamcard kategorie'] = sprintf(
__('Kategorien für Teamkarten, %s? 🗂️ Erstelle sie unter Beiträge > Kategorien und weise sie Mitgliedern zu. Zeige sie mit [teamcards kategorie="slug"]
. Tipp: Sortiere Teams nach Abteilungen! Alles organisiert? 😎', 'wp-multi-toolkit'),
esc_html($user_name)
);
$responses['teamcard bild'] = sprintf(
__('Ein Bild für ein Teammitglied, %s? 😊 In Team-Cards klickst du auf Bild auswählen und lädst ein Foto hoch. Es erscheint in der Teamkarte. Tipp: Nutze quadratische Bilder für einheitliches Design! Bereit? 🚀', 'wp-multi-toolkit'),
esc_html($user_name)
);
$responses['teamcard löschen'] = sprintf(
__('Ein Teammitglied entfernen, %s? 🗑️ Gehe zu Team-Cards, finde das Mitglied und klicke auf Löschen. Tipp: Sichere Daten vor dem Löschen! Schnell erledigt? 😄', 'wp-multi-toolkit'),
esc_html($user_name)
);
$responses['teamcard reihenfolge'] = sprintf(
__('Reihenfolge der Teamkarten ändern, %s? 😎 In Team-Cards verschiebst du Mitglieder per Drag-and-Drop. Tipp: Speichere nach dem Sortieren, um Änderungen zu sichern! Alles sortiert? 🚀', 'wp-multi-toolkit'),
esc_html($user_name)
);
$responses['teamcard deinstallation'] = sprintf(
__('Team-Card deinstallieren, %s? ⚠️ Achtung: Alle Teammitglieder und Bilder werden gelöscht. Sichere Daten mit einem Backup! Mehr Infos: Mehr Infos. Alles klar? 😊', 'wp-multi-toolkit'),
esc_html($user_name),
'https://git.viper.ipv64.net/M_Viper/wp-multi-teamcard'
);
$responses['teamcard updates'] = sprintf(
__('Updates für Team-Card, %s? 🚀 Schau auf git.viper.ipv64.net für die neueste Version. Updates werden auch im Admin-Bereich angezeigt. Tipp: Lies die Changelogs für neue Features! Bleib up to date! 😎', 'wp-multi-toolkit'),
esc_html($user_name),
'https://git.viper.ipv64.net/M_Viper/wp-multi-teamcard'
);
// WP Multi Toolkit
$responses['update management'] = sprintf(
__('Updates im Griff, %s? 🌟 Im Dashboard-Widget Verfügbare Updates für WP Multi Toolkit siehst du den Status aller Plugins. Lade neue Versionen herunter und installiere sie. Jetzt prüfen. Tipp: Sichere deine Seite vor Updates! Bereit? 🚀', 'wp-multi-toolkit'),
esc_html($user_name),
admin_url('index.php')
);
$responses['support issues'] = sprintf(
__('Hilfe nötig, %s? 😊 Erstelle ein Support-Ticket unter WP-Multi Support. Beschreibe dein Problem genau, und wir melden uns schnell! Ticket erstellen. Tipp: Screenshots helfen uns, schneller zu reagieren! Bereit? 🌟', 'wp-multi-toolkit'),
esc_html($user_name),
admin_url('admin.php?page=wp_multi_support')
);
$responses['dokumentation'] = sprintf(
__('Alles über WP Multi erfahren, %s? 📚 Die Dokumentation findest du unter WP-Multi Support > Dokumentation. Dort gibt’s Anleitungen und FAQs. Dokumentation ansehen. Tipp: Nutze die Suche in der Doku! Bereit? 😄', 'wp-multi-toolkit'),
esc_html($user_name),
admin_url('admin.php?page=wpmt_docs')
);
$responses['virtueller assistent'] = sprintf(
__('Das bin ich, %s! 😄 Dein virtueller Assistent für alle WP Multi Fragen. Stelle mir deine Fragen unter WP-Multi Support > Virtueller Assistent. Tipp: Frag nach spezifischen Features, ich kenne sie alle! Wie kann ich dir helfen? 🚀', 'wp-multi-toolkit'),
esc_html($user_name)
);
$responses['toolbar'] = sprintf(
__('Die Schnellstart-Toolbar, %s? 🚀 Unten rechts findest du Support, Updates, Dokumentation und mich – alles in einem Klick! Tipp: Halte die Toolbar aktiviert für schnellen Zugriff! Praktisch, oder? 😊', 'wp-multi-toolkit'),
esc_html($user_name)
);
$responses['wp multi plugins'] = sprintf(
__('Neugierig auf WP Multi Plugins, %s? 🌟 Hier die Übersicht:/wp-content/plugins/
. Tipp: Lies die Doku für Details! Los geht’s! 🚀', 'wp-multi-toolkit'),
esc_html($user_name),
'https://git.viper.ipv64.net/M_Viper'
);
$responses['wo finde ich updates'] = sprintf(
__('Updates, %s? 🌟 Im Dashboard-Widget Verfügbare Updates für WP Multi Toolkit oder auf git.viper.ipv64.net. Lade die neue Version hoch! Tipp: Sichere deine Seite vor Updates! Bleib frisch! 😎', 'wp-multi-toolkit'),
esc_html($user_name),
'https://git.viper.ipv64.net/M_Viper'
);
$responses['wie erstelle ich ein support ticket'] = sprintf(
__('Ein Support-Ticket, %s? 😊 Gehe zu WP-Multi Support, wähle das Plugin, gib Titel und Beschreibung ein und sende es ab. Jetzt erstellen. Tipp: Füge Screenshots hinzu! Wir helfen schnell! 🚀', 'wp-multi-toolkit'),
esc_html($user_name),
admin_url('admin.php?page=wp_multi_support')
);
$responses['welche voraussetzungen gibt es'] = sprintf(
__('Voraussetzungen, %s? 📋 Mindestens WordPress 6.7.2 und PHP 7.4. Für Telegram/Discord brauchst du API-Keys. Details in der Dokumentation. Tipp: Prüfe deine Server-Einstellungen! Bereit? 😄', 'wp-multi-toolkit'),
esc_html($user_name),
admin_url('admin.php?page=wpmt_docs')
);
$responses['sind die plugins kostenlos'] = sprintf(
__('Kostenlos, %s? 😄 Ja, alle WP Multi Plugins sind gratis auf git.viper.ipv64.net! Tipp: Spende dem Entwickler einen Kaffee, wenn sie dir gefallen! Bereit? 🚀', 'wp-multi-toolkit'),
esc_html($user_name),
'https://git.viper.ipv64.net/M_Viper'
);
$responses['wie deaktiviere ich ein plugin'] = sprintf(
__('Plugin deaktivieren, %s? 😎 Gehe zu Plugins > Installierte Plugins, klicke auf Deaktivieren oder Löschen. Tipp: Deaktiviere vor Updates, um Konflikte zu vermeiden! Alles klar? 🌟', 'wp-multi-toolkit'),
esc_html($user_name)
);
$responses['wo finde ich die dokumentation'] = sprintf(
__('Dokumentation, %s? 📚 Unter WP-Multi Support > Dokumentation findest du Anleitungen und FAQs. Jetzt ansehen. Tipp: Nutze die Suche in der Doku! Bereit? 😊', 'wp-multi-toolkit'),
esc_html($user_name),
admin_url('admin.php?page=wpmt_docs')
);
$responses['wer entwickelt die plugins'] = sprintf(
__('Wer entwickelt sie, %s? 😊 M_Viper, ein WordPress-Fan! Besuche m-viper.de oder git.viper.ipv64.net. Tipp: Folge M_Viper für News! Cool, oder? 🚀', 'wp-multi-toolkit'),
esc_html($user_name),
'https://m-viper.de',
'https://git.viper.ipv64.net/M_Viper'
);
$responses['kann ich eigene funktionen hinzufügen'] = sprintf(
__('Eigene Funktionen, %s? 🌟 Die Plugins sind Open Source! Schau den Code auf git.viper.ipv64.net an. Ideen? Erstelle ein Ticket mit Verbesserung! Tipp: Teste in einer Staging-Umgebung! Bereit? 😎', 'wp-multi-toolkit'),
esc_html($user_name),
'https://git.viper.ipv64.net/M_Viper'
);
// Neue allgemeine Antworten
$responses['wie richte ich wp multi ein'] = sprintf(
__('WP Multi einrichten, %s? 🚀 Nach der Installation gehe zu WP-Multi Support und aktiviere die Plugins. Folge der Anleitung in der Dokumentation. Tipp: Prüfe, ob deine WordPress-Version aktuell ist! Bereit? 😄', 'wp-multi-toolkit'),
esc_html($user_name),
admin_url('admin.php?page=wpmt_docs')
);
$responses['was ist wordpress'] = sprintf(
__('WordPress, %s? 📝 Ein kostenloses CMS für Websites, Blogs oder Shops – ohne Programmierkenntnisse! WP Multi Plugins machen es noch besser. Mehr in der Dokumentation. Neugierig? 😊', 'wp-multi-toolkit'),
esc_html($user_name),
admin_url('admin.php?page=wpmt_docs')
);
$responses['wie sichere ich meine website'] = sprintf(
__('Website sichern, %s? 🛡️ Nutze WP Multi Features wie Brute-Force-Schutz und Anti-Spam unter Sicherheit. Erstelle Backups (z. B. mit UpdraftPlus) und aktiviere die Rechtsklick-Sperre. Mehr in der Dokumentation. Alles sicher? 🚀', 'wp-multi-toolkit'),
esc_html($user_name),
admin_url('admin.php?page=wpmt_docs')
);
$responses['wie verbessere ich die performance'] = sprintf(
__('Performance boosten, %s? ⚡ Nutze WP Multi Search für schnelle Suchen und Caching-Plugins wie WP Super Cache. Optimiere Bilder und prüfe Ladezeiten unter Benutzer > Benutzer Analytics. Mehr in der Dokumentation. Bereit für Speed? 😎', 'wp-multi-toolkit'),
esc_html($user_name),
admin_url('admin.php?page=wpmt_docs')
);
$responses['wie kontaktiere ich den support'] = sprintf(
__('Support kontaktieren, %s? 😊 Erstelle ein Ticket unter WP-Multi Support (Ticket erstellen) oder besuche m-viper.de. Tipp: Beschreibe dein Problem genau! Bereit? 🌟', 'wp-multi-toolkit'),
esc_html($user_name),
admin_url('admin.php?page=wp_multi_support'),
'https://m-viper.de'
);
$responses['welche plugins sind kompatibel'] = sprintf(
__('Kompatible Plugins, %s? 🌟 WP Multi Plugins passen zu den meisten WordPress-Plugins, wenn sie die Standards einhalten. Teste in einer Staging-Umgebung. Probleme? Schau in die Dokumentation oder erstelle ein Support-Ticket! Alles klar? 😄', 'wp-multi-toolkit'),
esc_html($user_name),
admin_url('admin.php?page=wpmt_docs'),
admin_url('admin.php?page=wp_multi_support')
);
$responses['wie teste ich ein plugin'] = sprintf(
__('Plugin testen, %s? 😊 Installiere es in einer Staging-Umgebung oder lokal. Aktiviere es, teste Funktionen und prüfe Kompatibilität. Probleme? Schau in die Dokumentation oder kontaktiere den Support. Tipp: Deaktiviere andere Plugins, um Konflikte zu finden! Bereit? 🚀', 'wp-multi-toolkit'),
esc_html($user_name),
admin_url('admin.php?page=wpmt_docs'),
admin_url('admin.php?page=wp_multi_support')
);
return $responses;
});
/**
* Sicherstellen, dass jQuery geladen wird
*/
function wpmt_enqueue_scripts() {
wp_enqueue_script('jquery');
}
add_action('admin_enqueue_scripts', 'wpmt_enqueue_scripts');
/*
* Schnellzugriff-Menü (Floating Toolbar)
*/
function wpmt_add_floating_toolbar() {
if (!current_user_can('manage_options') || !is_admin()) {
return;
}
?>
' . __('Multi-Funktion ist aktiviert!', 'wp-multi-toolkit') . '
'; } return '' . __('Multi-Funktion ist deaktiviert.', 'wp-multi-toolkit') . '
'; } add_shortcode('wpmt_multi', 'wpmt_multi_shortcode'); // ### Automatisierte Plugin-Dokumentation ### /** * Ruft die neueste Version eines Plugins aus der Gitea-API ab. * * @param string $repo_name Der Name des Gitea-Repositorys. * @return string|null Die neueste Version oder null bei Fehlern. */ function wpmt_get_latest_plugin_version($repo_name) { $api_url = "https://git.viper.ipv64.net/api/v1/repos/M_Viper/{$repo_name}/releases"; $response = wp_remote_get($api_url, array( 'timeout' => 10, 'headers' => array('Accept' => 'application/json') )); if (is_wp_error($response)) { return null; } $body = wp_remote_retrieve_body($response); $releases = json_decode($body, true); if (empty($releases) || !is_array($releases)) { return null; } // Sortiere Releases nach Erstellungsdatum (neuestes zuerst) usort($releases, function($a, $b) { return strtotime($b['created_at']) - strtotime($a['created_at']); }); return !empty($releases[0]['tag_name']) ? ltrim($releases[0]['tag_name'], 'v') : null; } function wpmt_generate_plugin_docs() { require_once ABSPATH . 'wp-admin/includes/plugin.php'; $installed_plugins = get_plugins(); $wp_multi_plugins = array( 'wp-multi-toolkit' => array( 'file' => 'wp-multi-toolkit/wp-multi-toolkit.php', 'name' => 'WP Multi Toolkit', 'description' => __('Zentrales Toolkit für die WP Multi Plugin-Reihe mit Update-Management und Support-Funktionen.', 'wp-multi-toolkit'), 'repo' => 'wp-multi-toolkit' ), 'wp-multi' => array( 'file' => 'WP-Multi/wp-multi.php', 'name' => 'WP Multi', 'description' => __('Hauptplugin für Multi-Funktionen mit Shortcode-Unterstützung.', 'wp-multi-toolkit'), 'repo' => 'wp-multi' ), 'wp-multi-search' => array( 'file' => 'wp-multi-search/wp-multi-search.php', 'name' => 'WP Multi Search', 'description' => __('Erweiterte Suchfunktionen für WordPress.', 'wp-multi-toolkit'), 'repo' => 'WP-Multi-Search' ), 'wp-multi-comment-notifications' => array( 'file' => 'wp-multi-comment-notifications/wp-multi-comment-notifications.php', 'name' => 'WP Multi Comment Notifications', 'description' => __('Automatische Benachrichtigungen für neue Kommentare.', 'wp-multi-toolkit'), 'repo' => 'wp-multi-comment-notifications' ), 'wp-multi-kategorie' => array( 'file' => 'wp-multi-kategorie/wp-multi-kategorie.php', 'name' => 'WP Multi Kategorie', 'description' => __('Filtert und verwaltet Kategorien für Beiträge.', 'wp-multi-toolkit'), 'repo' => 'wp-multi-kategorie' ), 'wp-multi-teamcard' => array( 'file' => 'wp-multi-teamcards/wp-multi-team-card.php', 'name' => 'WP Multi Team-Card', 'description' => __('Erstellt Teamkarten mit Name, Funktion, Zuständigkeit und Bild, die über den Shortcode [teamcards] angezeigt werden.', 'wp-multi-toolkit'), 'repo' => 'wp-multi-teamcard' ) ); ?> $widget) + $wp_meta_boxes['dashboard']['normal']['high']; } } add_action('wp_dashboard_setup', 'wpmt_update_dashboard_widget', 1); add_action('wp_dashboard_setup', 'wpmt_force_widget_position', 999); // Widget nicht ausblendbar machen function wpmt_prevent_widget_hiding($widgets) { $widgets['wpmt_update_widget'] = array( 'id' => 'wpmt_update_widget', 'title' => __('Verfügbare Updates für WP Multi Toolkit', 'wp-multi-toolkit'), 'callback' => 'wpmt_update_dashboard_widget_content' ); return $widgets; } add_filter('dashboard_available_widgets', 'wpmt_prevent_widget_hiding'); // Benutzerdefiniertes Cron-Intervall hinzufügen add_filter('cron_schedules', function ($schedules) { $schedules['hourly'] = array( 'interval' => 3600, 'display' => __('Stündlich', 'wp-multi-toolkit'), ); return $schedules; }); // Cron-Job registrieren function wpmt_update_schedule_check() { if (!wp_next_scheduled('wpmt_update_check_event')) { wp_schedule_event(time(), 'hourly', 'wpmt_update_check_event'); } } add_action('wp', 'wpmt_update_schedule_check'); // Hilfsfunktion zur Wiederverwendung der Gitea-API-Abfrage function wpmt_fetch_latest_release($repo, $show_prereleases = false) { $api_url = "https://git.viper.ipv64.net/api/v1/repos/M_Viper/{$repo}/releases"; $response = wp_remote_get($api_url, array('timeout' => 10)); if (is_wp_error($response)) { error_log("WP Multi Toolkit Update Fehler für {$repo}: " . $response->get_error_message()); return false; } $body = wp_remote_retrieve_body($response); $data = json_decode($body, true); if (!is_array($data)) { error_log("WP Multi Toolkit Update für {$repo}: Ungültige API-Antwort"); return false; } foreach ($data as $release) { if (!$show_prereleases && isset($release['prerelease']) && $release['prerelease']) { continue; } if (!empty($release['tag_name'])) { return $release; } } return null; } // Cron-Job für Update-Überprüfung function wpmt_update_check() { require_once ABSPATH . 'wp-admin/includes/plugin.php'; $show_prereleases = get_option('wpmt_update_show_prereleases', false); $installed_plugins = get_plugins(); $plugins_to_check = array( 'wp-multi-toolkit' => 'wp-multi-toolkit/wp-multi-toolkit.php', 'wp-multi' => 'WP-Multi/wp-multi.php', 'WP-Multi-Search' => 'wp-multi-search/wp-multi-search.php', 'wp-multi-comment-notifications' => 'wp-multi-comment-notifications/wp-multi-comment-notifications.php' ); foreach ($plugins_to_check as $repo => $file) { if (array_key_exists($file, $installed_plugins) && is_plugin_active($file)) { $plugin_data = get_plugin_data(WP_PLUGIN_DIR . '/' . $file); $installed_version = $plugin_data['Version']; $valid_release = wpmt_fetch_latest_release($repo, $show_prereleases); if ($valid_release) { $latest_version = $valid_release['tag_name']; $release_notes = $valid_release['body'] ?? ''; $is_prerelease = isset($release['prerelease']) && $release['prerelease']; update_option("wpmt_update_latest_version_{$repo}", $latest_version); update_option("wpmt_update_release_notes_{$repo}", $release_notes); update_option("wpmt_update_is_prerelease_{$repo}", $is_prerelease); } } } } add_action('wpmt_update_check_event', 'wpmt_update_check'); // Funktion zur Überprüfung des Update-Server-Status function wpmt_check_update_server_status() { $update_server_url = 'https://git.viper.ipv64.net'; $response = wp_remote_head($update_server_url, array('timeout' => 5)); return !is_wp_error($response) && wp_remote_retrieve_response_code($response) == 200; } // Callback-Funktion für das Widget function wpmt_update_dashboard_widget_content() { require_once ABSPATH . 'wp-admin/includes/plugin.php'; $installed_plugins = get_plugins(); $show_prereleases = get_option('wpmt_update_show_prereleases', false); // Update-Server-Status nur bei Offline anzeigen $server_online = wpmt_check_update_server_status(); if (!$server_online) { echo '🔴 ' . __('Update Server offline', 'wp-multi-toolkit') . '
'; echo '%s
', esc_html__('Fehler beim Abrufen der Versionsinformationen.', 'wp-multi-toolkit')); } elseif ($valid_release) { $latest_version = $valid_release['tag_name']; $release_notes = $valid_release['body'] ?? ''; $is_prerelease = isset($valid_release['prerelease']) && $valid_release['prerelease']; if (version_compare($installed_version, $latest_version, '>=')) { printf( '%s
', sprintf( __('Ihre Version ist aktuell. Version %s ist die neueste Version.', 'wp-multi-toolkit'), esc_html($installed_version) ) ); } else { printf( '%s
', sprintf( __('Es ist eine neue Version von %s verfügbar! Version %s ist jetzt verfügbar.', 'wp-multi-toolkit'), esc_html($plugin['name']), esc_html($latest_version) ) ); printf( '%s: %s
', __('Aktuell installierte Version', 'wp-multi-toolkit'), esc_html($installed_version) ); printf( '%s: %s
', __('Neue Version auf Gitea', 'wp-multi-toolkit'), esc_html($latest_version) ); if ($is_prerelease && $show_prereleases) { printf('%s
', __('Dieses Update ist ein PreRelease.', 'wp-multi-toolkit')); } if (!empty($release_notes)) { printf( '%s:
%s
', __('Information zum Update', 'wp-multi-toolkit'), nl2br(esc_html($release_notes)) ); } $button_text = $is_prerelease ? __('PreRelease herunterladen', 'wp-multi-toolkit') : __('Update herunterladen', 'wp-multi-toolkit'); $download_url = $valid_release['assets'][0]['browser_download_url'] ?? '#'; printf( '', esc_url($download_url), esc_html($button_text) ); } } else { printf('%s
', esc_html__('Keine Versionsinformationen gefunden.', 'wp-multi-toolkit')); } } } if (!$has_active_plugins) { echo '' . __('Keine aktiven WP Multi Plugins gefunden.', 'wp-multi-toolkit') . '
'; } // Optionale Plugins $optional_plugins = array( 'wp-multi-toolkit' => array( 'file' => 'wp-multi-toolkit/wp-multi-toolkit.php', 'download_url' => 'https://git.viper.ipv64.net/M_Viper/wp-multi-toolkit/releases', 'description' => __('Kern-Toolkit für WP Multi Plugins.', 'wp-multi-toolkit') ), 'wp-multi' => array( 'file' => 'WP-Multi/wp-multi.php', 'download_url' => 'https://git.viper.ipv64.net/M_Viper/wp-multi/releases', 'description' => __('Hauptplugin für WP Multi Funktionen.', 'wp-multi-toolkit') ), 'WP-Multi-Search' => array( 'file' => 'wp-multi-search/wp-multi-search.php', 'download_url' => 'https://git.viper.ipv64.net/M_Viper/WP-Multi-Search/releases', 'description' => __('Erweiterte Suchfunktionen.', 'wp-multi-toolkit') ), 'wp-multi-comment-notifications' => array( 'file' => 'wp-multi-comment-notifications/wp-multi-comment-notifications.php', 'download_url' => 'https://git.viper.ipv64.net/M_Viper/wp-multi-comment-notifications/releases', 'description' => __('Kommentar-Benachrichtigungen.', 'wp-multi-toolkit') ), 'wp-multi-kategorie' => array( 'file' => 'wp-multi-kategorie/wp-multi-kategorie.php', 'download_url' => 'https://git.viper.ipv64.net/M_Viper/wp-multi-kategorie/releases', 'description' => __('Erweiterte Kategorie-Funktionen für WP Multi.', 'wp-multi-toolkit') ) ); echo '' . __('Plugin', 'wp-multi-toolkit') . ' | ' . __('Beschreibung', 'wp-multi-toolkit') . ' | ' . __('Status', 'wp-multi-toolkit') . ' | ' . __('Aktion', 'wp-multi-toolkit') . ' |
---|---|---|---|
' . esc_html($plugins_to_check[$key]['name']) . ' | '; echo '' . esc_html($plugin['description']) . ' | '; echo ''; if ($is_active) { echo '' . __('Aktiv', 'wp-multi-toolkit') . ''; } elseif ($is_installed) { echo '' . __('Inaktiv', 'wp-multi-toolkit') . ''; } else { echo '' . __('Nicht installiert', 'wp-multi-toolkit') . ''; } echo ' | '; echo ''; if ($is_active) { echo '—'; } elseif ($is_installed) { echo '' . __('Aktivieren', 'wp-multi-toolkit') . ''; } else { echo '' . __('Herunterladen', 'wp-multi-toolkit') . ''; } echo ' | '; echo '
' . __('Achtung: Pre-Releases sind Beta-Versionen und können Fehler enthalten. Verwenden Sie sie nur, wenn Sie Fehlerberichterstattung oder Tests durchführen möchten.', 'wp-multi-toolkit') . '
'; } // Deinstallation function wpmt_uninstall() { $repos = array('wp-multi-toolkit', 'wp-multi', 'WP-Multi-Search', 'wp-multi-comment-notifications'); foreach ($repos as $repo) { delete_option("wpmt_update_latest_version_{$repo}"); delete_option("wpmt_update_release_notes_{$repo}"); delete_option("wpmt_update_is_prerelease_{$repo}"); } delete_option('wpmt_update_show_prereleases'); delete_option('wpmt_multi_settings'); wp_clear_scheduled_hook('wpmt_update_check_event'); } register_uninstall_hook(__FILE__, 'wpmt_uninstall'); /* * Ban Funktion */ // Add Admin Menu add_action('admin_menu', 'wp_multi_toolkit_setup_menu'); function wp_multi_toolkit_setup_menu() { if (!current_user_can('manage_options')) { return; } add_submenu_page( 'users.php', 'WP Multi Ban', 'WP Multi Ban', 'manage_options', 'wp-multi-ban', 'wp_multi_ban_options_page' ); } // WP Multi Ban Functions ### Function: Get IP Address function wp_multi_ban_get_ip() { $banned_options = get_option('wp_multi_ban_options', array('reverse_proxy' => 0)); $ip = ''; if (!empty($banned_options['reverse_proxy']) && intval($banned_options['reverse_proxy']) === 1) { foreach (array('HTTP_CLIENT_IP', 'HTTP_X_FORWARDED_FOR', 'HTTP_X_FORWARDED', 'HTTP_X_CLUSTER_CLIENT_IP', 'HTTP_FORWARDED_FOR', 'HTTP_FORWARDED', 'REMOTE_ADDR') as $key) { if (!empty($_SERVER[$key])) { foreach (explode(',', $_SERVER[$key]) as $potential_ip) { $potential_ip = trim($potential_ip); if (filter_var($potential_ip, FILTER_VALIDATE_IP)) { return $potential_ip; } } } } } elseif (!empty($_SERVER['REMOTE_ADDR']) && filter_var($_SERVER['REMOTE_ADDR'], FILTER_VALIDATE_IP)) { $ip = explode(',', $_SERVER['REMOTE_ADDR'])[0]; return $ip; } return ''; } ### Function: Preview Banned Message add_action('wp_ajax_wp_multi_ban_admin', 'wp_multi_ban_preview_banned_message'); function wp_multi_ban_preview_banned_message() { if (!current_user_can('manage_options')) { wp_send_json_error('Zugriff verweigert'); } $banned_stats = get_option('wp_multi_ban_stats', array('users' => array(), 'count' => 0)); $banned_message = stripslashes(get_option('wp_multi_ban_message', 'Ihr Zugriff auf %SITE_NAME% (%SITE_URL%) wurde gesperrt.')); $banned_message = str_replace( array( '%SITE_NAME%', '%SITE_URL%', '%USER_ATTEMPTS_COUNT%', '%USER_IP%', '%USER_HOSTNAME%', '%TOTAL_ATTEMPTS_COUNT%' ), array( esc_html(get_option('blogname')), esc_url(get_option('siteurl')), number_format_i18n($banned_stats['users'][wp_multi_ban_get_ip()] ?? 0), esc_html(wp_multi_ban_get_ip()), esc_html(@gethostbyaddr(wp_multi_ban_get_ip())), number_format_i18n($banned_stats['count'] ?? 0) ), $banned_message ); wp_send_json_success(array('message' => $banned_message)); } ### Function: Print Out Banned Message function wp_multi_ban_print_banned_message() { $banned_ip = wp_multi_ban_get_ip(); $banned_stats = get_option('wp_multi_ban_stats', array('users' => array(), 'count' => 0)); $banned_stats['count'] = isset($banned_stats['count']) ? $banned_stats['count'] + 1 : 1; $banned_stats['users'][$banned_ip] = isset($banned_stats['users'][$banned_ip]) ? $banned_stats['users'][$banned_ip] + 1 : 1; update_option('wp_multi_ban_stats', $banned_stats); $banned_message = stripslashes(get_option('wp_multi_ban_message', 'Ihr Zugriff auf %SITE_NAME% (%SITE_URL%) wurde gesperrt.')); $banned_message = str_replace( array( '%SITE_NAME%', '%SITE_URL%', '%USER_ATTEMPTS_COUNT%', '%USER_IP%', '%USER_HOSTNAME%', '%TOTAL_ATTEMPTS_COUNT%' ), array( esc_html(get_option('blogname')), esc_url(get_option('siteurl')), number_format_i18n($banned_stats['users'][$banned_ip] ?? 0), esc_html($banned_ip), esc_html(@gethostbyaddr($banned_ip)), number_format_i18n($banned_stats['count'] ?? 0) ), $banned_message ); echo 'Detail | Wert |
---|---|
IP | |
Hostname | |
User Agent | |
Seiten-URL | |
Bitte nicht sich selbst sperren. |