Compare commits

...

10 Commits
2.4 ... main

3 changed files with 732 additions and 11553 deletions

250
README.md
View File

@ -1,159 +1,143 @@
# WP-Multi Plugin für WordPress
# WP Multi
**WP-Multi** ist ein multifunktionales WordPress-Plugin, das eine breite Palette von leistungsstarken Funktionen zur Verwaltung deiner Website bietet. Es umfasst Statistiken, benutzerdefinierte Admin-Links, Schutzmechanismen gegen Spam und Brute-Force-Angriffe, sowie viele nützliche Tools für die Verbesserung des Benutzererlebnisses und der Website-Verwaltung.
**Erweiterter Anti-Spam-Schutz, Sicherheitsfeatures, Inhaltsmanagement und mehr für WordPress**
Das Plugin ist darauf ausgelegt, dir zu helfen, eine detaillierte Übersicht über die Interaktionen auf deiner Seite zu erhalten, Beiträge effizient zu verwalten und gleichzeitig die Sicherheit und das Benutzererlebnis zu optimieren.
[![PHP Version](https://img.shields.io/badge/PHP-7.4%2B-blue)](https://www.php.net/)
[![WordPress Version](https://img.shields.io/badge/WordPress-6.7.2%2B-green)](https://wordpress.org/)
[![License](https://img.shields.io/badge/License-GPLv2-brightgreen)](https://www.gnu.org/licenses/gpl-2.0.html)
**WP Multi** ist ein umfassendes WordPress-Plugin, das fortschrittlichen Anti-Spam-Schutz mit Funktionen wie Honeypot, Keyword-Filter, Link-Limit und mehr bietet. Es integriert Statistiken im Dashboard, HappyForms-Unterstützung und zahlreiche nützliche Tools wie automatische Tags, Lesezeichen für Gäste und Schutz vor Brute-Force-Angriffen. Zusätzlich bietet es Anpassungen des Admin-Bereichs und Schutz vor dem Kopieren von Inhalten.
## Funktionen
### 1. **Statistik-Übersicht**
- **Zeigt detaillierte Statistiken an:**
- Anzahl der Beiträge
- Anzahl der Kommentare
- Anzahl der Kategorien
- Anzahl der Serien
- **Shortcode für die Anzeige der Statistik:** `[statistik_manager]`
- **Anti-Spam-Schutz:**
- Honeypot-Felder zur Erkennung von Bots
- Blockierung von Einweg-Mail-Adressen (Trash-Mails)
- Filter für blockierte Schlüsselwörter und maximale Links in Kommentaren
- Statistik über blockierte Kommentare und Spammer-IPs
### 2. **Benachrichtigungen auf Telegram und Discord**
- **Telegram & Discord Benachrichtigungen:**
- Du erhältst Benachrichtigungen in Echtzeit über neue Beiträge auf deiner Website. So bleibst du immer auf dem Laufenden.
- Unterstützt sowohl Telegram als auch Discord.
- **Sicherheitsfunktionen:**
- Schutz vor Brute-Force-Angriffen mit IP-Sperrung
- Textkopierschutz und Einschränkung der Entwicklertools
- Möglichkeit, Benutzer-Logins zu deaktivieren
### 3. **Custom Admin Links**
- **Fügt benutzerdefinierte Links im WordPress-Adminbereich hinzu:**
- Erstelle und verwalte eigene Links, die direkt im Admin-Dashboard angezeigt werden, um den Verwaltungsaufwand zu reduzieren und deine Arbeit zu optimieren.
- **Inhaltsmanagement:**
- Automatische Generierung von Tags für Beiträge
- Alphabetisches Index für Beiträge mit Shortcode `[alphabetical_index]`
- Beitrag melden mit Shortcode `[report_button]`
### 4. **Gast-Autor**
- **Gast-Autor Feature:**
- Ermögliche es, einen Gast-Autornamen für Beiträge festzulegen. Der Name wird im Frontend des Beitrags angezeigt und dient dazu, die Quellen klar darzustellen.
### 5. **Beitrags-Report**
- **Melden unangemessener oder falscher Beiträge:**
- Benutzer können Beiträge melden, die unangemessen oder fehlerhaft sind. Du erhältst eine Benachrichtigung im Admin-Panel und kannst sofort handeln.
- Der Admin kann alle gemeldeten Beiträge im Adminbereich einsehen und gegebenenfalls Maßnahmen ergreifen.
- **Benutzerfreundlichkeit:**
- Lesezeichen für Gäste mit Shortcodes `[add_bookmark]` und `[display_bookmarks]`
- Statistik-Widget mit Shortcode `[statistik_manager]`
- Anpassbares Banner mit Position, Farbe und Icon
### 6. **Custom Textbox**
- **Fügt benutzerdefinierte Textboxen hinzu:**
- Erstelle Textboxen mit vordefinierten Inhalten, die in jedem Beitrag angezeigt werden.
- Diese Textboxen können leicht im Admin-Panel konfiguriert werden.
- **Admin-Tools:**
- Dashboard-Widget für Plugin-Updates (mit Pre-Release-Unterstützung)
- Pinnwand für Administratoren
- Verwaltung benutzerdefinierter Seiten und gemeldeter Beiträge
### 7. **Banner für Nachrichten**
- **Banner für Ankündigungen und Informationen:**
- Zeige wichtige Nachrichten als Banner im Frontend deiner Website an. Die Banner können entweder im Header oder im Footer angezeigt werden.
### 8. **Admin Dashboard Update Anzeige**
- **Plugin-Update Benachrichtigung im Admin-Dashboard:**
- Zeigt im Admin-Dashboard an, ob eine neue Version von **WP-Multi** verfügbar ist und ob ein Update notwendig ist.
### 9. **Gast Lesezeichen**
- **Lesezeichen für Gäste:**
- Gäste können Beiträge mit einem Lesezeichen versehen, das über Cookies gespeichert wird.
- **Shortcodes:**
- `[add_bookmark]` Fügt ein Lesezeichen hinzu.
- `[display_bookmarks]` Zeigt alle Lesezeichen des Besuchers an.
### 10. **Benutzer für Kommentare sperren**
- **Verhindert störende Kommentare:**
- Sperre bestimmte Benutzer vom Kommentieren, indem du ihren Benutzernamen, ihre IP-Adresse oder E-Mail-Adresse eingibst. Diese Benutzer können dann keine weiteren Kommentare abgeben.
### 11. **Kommentar Filter**
- **Automatischer Filter für schadhafte Inhalte:**
- Verhindert das Senden von bestimmten Informationen in Kommentaren wie:
- Rufnummern
- E-Mail-Adressen
- URLs
- IP-Adressen
- Schimpfwörtern
- Diese Elemente werden automatisch durch `*` ersetzt, wenn sie gesendet werden.
### 12. **Custom Shortcodes**
- **Erstellung benutzerdefinierter Shortcodes:**
- Du kannst benutzerdefinierte Shortcodes erstellen, die im WordPress-Editor per Auswahl eingefügt werden können, um die Flexibilität und Funktionalität deiner Seite zu erweitern.
### 13. **Besucher Analytics**
- **Verfolge die beliebtesten Beiträge:**
- Sieh dir an, welche Beiträge am häufigsten angesehen oder kommentiert werden.
- Es wird angezeigt:
- Art der Aktion (View oder Comment)
- Titel des Beitrags
- Beitrag-ID
- Zeitstempel der Aktion
### 14. **Pinwand für Administratoren**
- **Nachrichten und Ankündigungen für Administratoren:**
- Erstelle, bearbeite und lösche Nachrichten auf der Pinwand im Admin-Panel. Diese Nachrichten können für andere Administratoren und Benutzer sichtbar sein.
### 15. **Schutz vor Brute-Force-Angriffen**
- **Sperrung nach Fehlversuchen:**
- Alle fehlgeschlagenen Login-Versuche werden protokolliert. Nach fünf fehlgeschlagenen Versuchen wird der Account automatisch gesperrt und eine E-Mail-Benachrichtigung an den Administrator und den betroffenen Benutzer gesendet.
### 16. **Anti-Spam Honey**
- **Automatischer Spam-Schutz:**
- Das Plugin erkennt Spam, Bots und andere unerwünschte Aktivitäten und blockiert diese automatisch.
- Eine detaillierte Übersicht über blockierte Inhalte wird im Admin-Panel bereitgestellt.
### 17. **Auto Tagging**
- **Automatisches Hinzufügen von Tags:**
- Wenn ein Beitrag keine Tags hat, fügt das Plugin automatisch relevante Tags hinzu.
- Du kannst im Admin-Panel eine Liste von unerwünschten Tags definieren, die das Plugin niemals hinzufügen soll.
### 18. **Login Deaktivieren**
- **Deaktiviere das Login für bestimmte Benutzer:**
- Du kannst das Login für bestimmte Benutzer deaktivieren, um unbefugten Zugriff zu verhindern. Diese Funktion kann direkt im Benutzerprofil aktiviert werden.
### 19. **Text Copy Schutz**
- **Schutz vor unerlaubtem Kopieren:**
- Verhindert das Kopieren von Texten auf deiner Website, um die Inhalte zu schützen.
### 20. **Sperre Trash-Mail-Adressen**
- **Blockiere Trash-Mail-Adressen in Kommentaren:**
- Trash-Mail-Adressen werden in Kommentaren blockiert. Die Liste der blockierten Domains kann nur vom Entwickler des Plugins erweitert werden.
### 21. **Inhaltsverzeichnis für Beiträge**
- **Erstelle ein Inhaltsverzeichnis für Beiträge:**
- Erstelle automatisch ein alphabetisches Inhaltsverzeichnis aller Beiträge auf deiner Website.
- **Shortcode:** `[alphabetical_index]`
---
- **Integrationen:**
- HappyForms-Unterstützung
- Gitea-API für automatische Update-Prüfungen
## Installation
### Schritt 1: Plugin herunterladen
Lade das **WP-Multi Plugin** als ZIP-Datei von GitHub oder deinem bevorzugten Source-Repository herunter.
1. **Download:**
- Lade das Plugin von [Gitea](https://git.viper.ipv64.net/M_Viper/wp-multi) herunter oder klone das Repository:
### Schritt 2: Plugin installieren
1. Gehe in deinem WordPress-Adminbereich zu **Plugins** > **Installieren**.
2. Klicke auf **Plugin hochladen** und wähle die ZIP-Datei des Plugins aus.
3. Klicke auf **Jetzt installieren** und dann auf **Aktivieren**.
```
git clone https://git.viper.ipv64.net/M_Viper/wp-multi.git
```
### Schritt 3: Plugin konfigurieren
Nach der Aktivierung kannst du das Plugin über das **WP-Multi** Menü im Adminbereich konfigurieren. Passe die Einstellungen nach deinen Bedürfnissen an, um alle Funktionen optimal zu nutzen.
2. **Installation:**
---
Kopiere den Ordner `wp-multi` in dein WordPress-Plugin-Verzeichnis (`/wp-content/plugins/`).
Alternativ: Lade die ZIP-Datei über das WordPress-Admin-Panel hoch (`Plugins > Neu hinzufügen > Plugin hochladen`).
## Verwendung
3. **Aktivierung:**
Nach der Installation kannst du die Funktionen und Shortcodes im Adminbereich oder direkt in deinen Beiträgen verwenden. Hier sind einige nützliche Shortcodes:
Gehe im WordPress-Admin-Bereich zu "Plugins" und aktiviere "WP Multi".
- **Statistik anzeigen:** `[statistik_manager]`
- **Lesezeichen hinzufügen:** `[add_bookmark]`
- **Lesezeichen anzeigen:** `[display_bookmarks]`
- **Inhaltsverzeichnis anzeigen:** `[alphabetical_index]`
## Nutzung
Im Adminbereich kannst du auch die benutzerdefinierten Funktionen wie die Textboxen, Kommentar-Filter und Anti-Spam-Maßnahmen konfigurieren.
### Admin-Konfiguration
---
Nach der Aktivierung finden Sie die WP Multi-Einstellungen im WordPress-Admin-Bereich. Hier können Sie die verschiedenen Funktionen konfigurieren:
* **WP Multi -> Sicherheit:**
* Konfigurieren Sie den Honeypot-Schutz.
* Verwalten Sie blockierte IPs und Schlüsselwörter zur Spam-Bekämpfung.
* Aktivieren Sie den Schutz vor dem Kopieren von Text und den Schutz der Entwicklertools.
* **WP Multi -> Automatische Tags:**
* Passen Sie Stopwörter an, die bei der automatischen Tag-Generierung ignoriert werden sollen.
* Führen Sie die automatische Tag-Generierung für vorhandene Beiträge aus.
* **WP Multi -> WP Stat & Notice:**
* Aktivieren oder deaktivieren Sie die Statistik-Funktionen.
* Konfigurieren Sie das anpassbare Admin-Banner (Farbe, Position, Text).
* **WP Multi -> Gemeldete Beiträge:**
* Überprüfen und verwalten Sie von Benutzern gemeldete Beiträge.
* **WP Multi -> Admin-Pinnwand:**
* Zeigen Sie wichtige Nachrichten und Hinweise für Administratoren an.
### Shortcodes
* `[alphabetical_index]`: Zeigt ein alphabetisches Verzeichnis aller Beiträge an.
- Attribute:
- `posts_per_page`: Anzahl der Beiträge pro Seite (Standard: 20).
* `[report_button]`: Fügt einen "Beitrag melden"-Button hinzu (nur für eingeloggte Benutzer).
* `[add_bookmark]`: Fügt ein Formular zum Hinzufügen von Lesezeichen für Gäste hinzu.
- Ermöglicht es nicht registrierten Besuchern, Beiträge zu ihren Lesezeichen hinzuzufügen.
* `[display_bookmarks]`: Zeigt die gespeicherten Lesezeichen eines Gastes an.
- Zeigt eine Liste der gespeicherten Lesezeichen an, die mit einem Cookie identifiziert werden.
* `[statistik_manager]`: Zeigt eine Statistikübersicht an (Beiträge, Kommentare, Kategorien, etc.).
### Beispielkonfiguration
* Füge den Shortcode `[statistik_manager]` in eine Seite ein, um detaillierte Website-Statistiken anzuzeigen.
* Aktiviere das Banner unter "WP Stat & Notice" und wähle eine Farbe sowie Position (oben/unten), um Administratoren wichtige Hinweise anzuzeigen.
* Konfiguriere blockierte Schlüsselwörter wie `viagra`, `casino` im Anti-Spam-Menü, um unerwünschte Kommentare zu filtern.
* Verwende den Shortcode `[alphabetical_index posts_per_page="30"]`, um das alphabetische Verzeichnis mit 30 Beiträgen pro Seite anzuzeigen.
### Details zu Kernfunktionen
* **Update Benachrichtigungen:** Das Plugin überprüft regelmäßig über die Gitea-API auf neue Versionen. Sie können in den Einstellungen festlegen, ob Pre-Release-Versionen angezeigt werden sollen. Im Dashboard wird ein Widget angezeigt, das Sie über verfügbare Updates informiert und einen direkten Download-Link bereitstellt.
* **Schutz vor Trash-Mails:** Das Plugin verwendet eine Blockliste von Einweg-E-Mail-Anbietern, um zu verhindern, dass Spam-Kommentare über temporäre E-Mail-Adressen abgegeben werden.
* **Text Copy Schutz und Schutz vor Entwicklertools:** Das Plugin verhindert das Markieren und Kopieren von Text auf Ihrer Webseite und blockiert den Zugriff auf Entwicklertools, um den Quellcode vor unbefugtem Zugriff zu schützen.
* **Admin Banner:** Über das Admin-Panel kann ein anpassbares Banner angezeigt werden, um Administratoren wichtige Informationen oder Hinweise zu geben.
## Voraussetzungen
* WordPress 6.7.2 oder höher
* PHP 7.4 oder höher
## Support
* Microsoft Teams: [Support-Community](https://teams.live.com/l/community/FEAzokphpZTJ2u6OgI)
* Telegram: [Support-Chat](https://t.me/M_Viper04)
* Gitea: [Erstelle ein Issue auf Gitea](https://git.viper.ipv64.net/M_Viper/wp-multi/issues)
## Beitrag leisten
1. Forke das Repository auf Gitea.
2. Erstelle einen neuen Branch: `git checkout -b feature/deine-funktion`.
3. Committe deine Änderungen: `git commit -m "Beschreibung deiner Änderungen"`.
4. Pushe den Branch: `git push origin feature/deine-funktion`.
5. Erstelle einen Pull-Request auf Gitea.
## Lizenz
Dieses Plugin ist unter der [GPL-2.0 Lizenz](https://www.gnu.org/licenses/old-licenses/gpl-2.0.de.html) veröffentlicht.
Dieses Plugin ist unter der GPLv2-Lizenz veröffentlicht. Siehe [LICENSE](LICENSE) -Datei für Details.
---
## Danksagung
## Unterstützung
Wenn du Fragen hast oder auf Probleme stößt, eröffne ein **Issue** auf GitHub. Wir sind gerne bereit, dir zu helfen!
---
Vielen Dank, dass du **WP-Multi** verwendest! Wir hoffen, dass es dir hilft, deine WordPress-Website effizient zu verwalten und zu schützen.
Entwickelt von M\_Viper. Vielen Dank an die WordPress-Community für die Inspiration und Unterstützung.

File diff suppressed because it is too large Load Diff

View File

@ -3,7 +3,7 @@
* Plugin Name: WP Multi
* Plugin URI: https://git.viper.ipv64.net/M_Viper/wp-multi
* Description: Erweiterter Anti-Spam-Schutz mit Honeypot, Keyword-Filter, Link-Limit und mehr. Jetzt mit Statistik im Dashboard und HappyForms-Integration.
* Version: 2.3
* Version: 2.6
* Author: M_Viper
* Author URI: https://m-viper.de
* Requires at least: 6.7.2
@ -12,11 +12,41 @@
* License URI: https://www.gnu.org/licenses/gpl-2.0.html
* Text Domain: wp-multi
* Tags: anti-spam, security, honeypot, comment-protection, statistics, happyforms
* Support: [Microsoft Teams Support](https://teams.live.com/l/community/FEAzokphpZTJ2u6OgI)
* Support: [Telegram Support](https://t.me/M_Viper04)
*/
if (!defined('ABSPATH')) exit;
/*
* Admin - Panel Banner
*/
// Admin-Banner als Notice mit Blauem Hintergrund (#0073aa)
function wp_multi_add_warning_banner() {
echo '
<div class="notice notice-warning is-dismissible" style="background-color: #0073aa; color: white; border-left: 4px solid #005177;">
<p><strong>Danke, dass du WP Multi verwendest!</strong> Dein Feedback hilft uns, das Plugin ständig zu verbessern. Wenn du Fehler entdeckst oder Verbesserungsvorschläge hast, besuche bitte unsere <a href="https://git.viper.ipv64.net/M_Viper/wp-multi" target="_blank" style="color: #FFDD00; text-decoration: none;">Gitea-Seite</a> und teile uns deine Ideen mit!</p>
<p><strong>Support:</strong> Bei Fragen oder Supportanfragen kannst du uns über <a href="https://teams.live.com/l/community/FEAzokphpZTJ2u6OgI" target="_blank" style="color: #FFDD00; text-decoration: none;">Microsoft Teams</a> oder <a href="https://t.me/M_Viper04" target="_blank" style="color: #FFDD00; text-decoration: none;">Telegram</a> erreichen.</p>
</div>';
}
add_action('admin_notices', 'wp_multi_add_warning_banner');
// Support-Links in der Plugin-Übersicht anzeigen
function wp_multi_plugin_row_meta($links, $file) {
if ($file == plugin_basename(__FILE__)) {
$new_links = array(
'support_teams' => '<a href="https://teams.live.com/l/community/FEAzokphpZTJ2u6OgI" target="_blank" style="color:rgb(255, 0, 0);">Microsoft Teams Support</a>',
'support_telegram' => '<a href="https://t.me/M_Viper04" target="_blank" style="color:rgb(255, 0, 0);">Telegram Support</a>',
);
// Links an die Plugin-Übersicht anhängen
$links = array_merge($links, $new_links);
}
return $links;
}
add_filter('plugin_row_meta', 'wp_multi_plugin_row_meta', 10, 2);
/*
* Index Verzeichnis [alphabetical_index]
@ -33,7 +63,7 @@ function wp_multi_alphabetical_index($atts) {
// Hole alle Beiträge
$args = array(
'post_type' => 'post',
'posts_per_page' => -1, // Alle Beiträge (wir filtern später nach Buchstabenbereich)
'posts_per_page' => -1,
'orderby' => 'title',
'order' => 'ASC',
);
@ -616,21 +646,6 @@ function wp_multi_process_auto_tags_step() {
}
/*
* Admin - Panel Banner
*/
// Admin-Banner als Notice mit Blauem Hintergrund (#0073aa)
function wp_multi_add_warning_banner() {
echo '
<div class="notice notice-warning is-dismissible" style="background-color: #0073aa; color: white; border-left: 4px solid #005177;">
<p><strong>Danke, dass du WP Multi verwendest!</strong> Dein Feedback hilft uns, das Plugin ständig zu verbessern. Wenn du Fehler entdeckst oder Verbesserungsvorschläge hast, besuche bitte unsere <a href="https://git.viper.ipv64.net/M_Viper/wp-multi" target="_blank" style="color: #FFDD00; text-decoration: none;">Gitea-Seite</a> und teile uns deine Ideen mit!</p>
</div>';
}
add_action('admin_notices', 'wp_multi_add_warning_banner');
/*
* Anti Spam Honey
*/
@ -866,6 +881,7 @@ function wp_multi_statistics_page() {
<?php
}
// Einstellungen registrieren
function wp_multi_register_security_settings() {
register_setting('wp_multi_security_settings', 'wp_multi_honeypot_field');
@ -881,11 +897,56 @@ function wp_multi_register_security_settings() {
add_settings_field('wp_multi_honeypot_error', 'Honey Pot Error Message', 'wp_multi_honeypot_error_callback', 'wp-multi-security', 'wp_multi_honeypot_section');
add_settings_field('wp_multi_honeypot_widget', 'Disable Honeypot Test Widget', 'wp_multi_honeypot_widget_callback', 'wp-multi-security', 'wp_multi_honeypot_section');
add_settings_field('wp_multi_max_links', 'Maximale Links im Kommentar', 'wp_multi_max_links_callback', 'wp-multi-security', 'wp_multi_honeypot_section');
add_settings_field('wp_multi_blocked_keywords', 'Blockierte Keywords', 'wp_multi_blocked_keywords_callback', 'wp-multi-security', 'wp_multi_honeypot_section');
add_settings_field('wp_multi_blocked_keywords', 'Blockierte Schlüsselwörter', 'wp_multi_blocked_keywords_callback', 'wp-multi-security', 'wp_multi_honeypot_section');
add_settings_field('wp_multi_blocked_ips', 'Blockierte IP-Adressen', 'wp_multi_blocked_ips_callback', 'wp-multi-security', 'wp_multi_honeypot_section');
}
add_action('admin_init', 'wp_multi_register_security_settings');
function wp_multi_honeypot_field_callback() {
?>
<div class="wp-multi-honeypot-group">
<input type="text" id="wp_multi_honeypot_field" name="wp_multi_honeypot_field" value="<?php echo esc_attr(get_option('wp_multi_honeypot_field')); ?>">
<button type="button" onclick="generateHoneypotName()">Generieren</button>
</div>
<small>Verwenden Sie ein zufälliges Zeichenfolgen für das Honeypot-Feld.</small>
<?php
}
function wp_multi_honeypot_error_callback() {
?>
<input type="text" name="wp_multi_honeypot_error" value="<?php echo esc_attr(get_option('wp_multi_honeypot_error')); ?>">
<small>Die Nachricht, die angezeigt wird, wenn ein Honeypot ausgelöst wird.</small>
<?php
}
function wp_multi_honeypot_widget_callback() {
?>
<input type="checkbox" name="wp_multi_honeypot_widget" value="1" <?php checked(1, get_option('wp_multi_honeypot_widget'), true); ?>>
<small>Deaktivieren Sie das Honeypot-Test-Widget im Frontend.</small>
<?php
}
function wp_multi_max_links_callback() {
?>
<input type="number" name="wp_multi_max_links" value="<?php echo esc_attr(get_option('wp_multi_max_links')); ?>">
<small>Maximale Anzahl von Links, die in einem Kommentar erlaubt sind.</small>
<?php
}
function wp_multi_blocked_keywords_callback() {
?>
<input type="text" name="wp_multi_blocked_keywords" value="<?php echo esc_attr(get_option('wp_multi_blocked_keywords')); ?>">
<small>Schlüsselwörter, die blockiert werden sollen (durch Kommas getrennt).</small>
<?php
}
function wp_multi_blocked_ips_callback() {
?>
<textarea name="wp_multi_blocked_ips" rows="5"><?php echo esc_textarea(get_option('wp_multi_blocked_ips')); ?></textarea>
<small>Blockierte IP-Adressen (jede Adresse in einer neuen Zeile).</small>
<?php
}
/*
@ -1071,7 +1132,7 @@ function wp_multi_display_blocked_ips() {
echo '<div class="tablenav"><div class="alignleft actions">';
for ($i = 1; $i <= $total_pages; $i++) {
$class = ($i == $page) ? ' class="current"' : '';
echo '<a href="' . admin_url('users.php?page=wp_multi_blocked_ips&paged=' . $i) . '" ' . $class . '>' . $i . '</a> ';
echo '<a href="' . admin_url('admin.php?page=wp_multi_blocked_ips&paged=' . $i) . '" ' . $class . '>' . $i . '</a> ';
}
echo '</div></div>';
}
@ -1114,6 +1175,7 @@ add_action('admin_post_remove_blocked_ip', 'wp_multi_remove_blocked_ip');
* Admin - Pinnwand
*/
// Funktion zum Erstellen der Datenbanktabelle für Nachrichten
function wp_multi_create_message_board_table() {
global $wpdb;
@ -1695,50 +1757,44 @@ function wp_multi_register_comment_filter_settings() {
add_option('wp_multi_filter_email', '1');
add_option('wp_multi_filter_url', '1');
add_option('wp_multi_filter_swear', '1');
add_option('wp_multi_filter_ip', '1'); // Neue Option für IP-Filterung
add_option('wp_multi_filter_ip', '1');
add_option('wp_multi_allowed_urls', ''); // NEU: Erlaubte URLs
register_setting('wp_multi_filter_options_group', 'wp_multi_filter_phone');
register_setting('wp_multi_filter_options_group', 'wp_multi_filter_email');
register_setting('wp_multi_filter_options_group', 'wp_multi_filter_url');
register_setting('wp_multi_filter_options_group', 'wp_multi_filter_swear');
register_setting('wp_multi_filter_options_group', 'wp_multi_filter_ip'); // Neue Option für IP-Filterung
register_setting('wp_multi_filter_options_group', 'wp_multi_filter_ip');
register_setting('wp_multi_filter_options_group', 'wp_multi_allowed_urls'); // NEU
}
add_action('admin_init', 'wp_multi_register_comment_filter_settings');
// Admin-Menü & Untermenü hinzufügen
function wp_multi_create_menu() {
add_submenu_page(
'users.php',
'Benutzer sperren',
'Benutzer sperren',
'manage_options',
'wp-multi-blocked-users',
'wp_multi_blocked_users_page'
);
// Admin-Menü & Untermenü hinzufügen
function wp_multi_create_menu() {
// 'Benutzer sperren' Menü als Untermenü im Benutzer-Menü hinzufügen
add_submenu_page(
'users.php', // 'Benutzer' Menü
'Benutzer sperren',
'Benutzer sperren',
'manage_options',
'wp-multi-blocked-users',
'wp_multi_blocked_users_page'
);
// Kommentar-Filter unter Kommentare verschieben
add_submenu_page(
'edit-comments.php', // 'Kommentare' Menü
'Kommentar-Filter Einstellungen',
'Kommentar-Filter',
'manage_options',
'wp-multi-comment-filter-settings',
'wp_multi_comment_filter_settings_page'
);
}
add_action('admin_menu', 'wp_multi_create_menu');
add_submenu_page(
'edit-comments.php',
'Kommentar-Filter Einstellungen',
'Kommentar-Filter',
'manage_options',
'wp-multi-comment-filter-settings',
'wp_multi_comment_filter_settings_page'
);
}
add_action('admin_menu', 'wp_multi_create_menu');
// Admin-Seite für Kommentar-Filter
function wp_multi_comment_filter_settings_page() {
?>
<div class="wrap">
<!-- Blaues Banner mit Logo -->
<div class="wp-multi-banner">
<img src="https://m-viper.de/img/logo.png" alt="Logo" class="wp-multi-logo">
</div>
@ -1748,125 +1804,88 @@ function wp_multi_comment_filter_settings_page() {
<form method="post" action="options.php">
<?php settings_fields('wp_multi_filter_options_group'); ?>
<table class="form-table">
<tr>
<th><label for="wp_multi_filter_phone">Rufnummern filtern</label></th>
<tr><th><label for="wp_multi_filter_phone">Rufnummern filtern</label></th>
<td><input type="checkbox" name="wp_multi_filter_phone" value="1" <?php checked(1, get_option('wp_multi_filter_phone'), true); ?>></td>
</tr>
<tr>
<th><label for="wp_multi_filter_email">E-Mail-Adressen filtern</label></th>
<tr><th><label for="wp_multi_filter_email">E-Mail-Adressen filtern</label></th>
<td><input type="checkbox" name="wp_multi_filter_email" value="1" <?php checked(1, get_option('wp_multi_filter_email'), true); ?>></td>
</tr>
<tr>
<th><label for="wp_multi_filter_url">URLs filtern</label></th>
<tr><th><label for="wp_multi_filter_url">URLs filtern</label></th>
<td><input type="checkbox" name="wp_multi_filter_url" value="1" <?php checked(1, get_option('wp_multi_filter_url'), true); ?>></td>
</tr>
<tr>
<th><label for="wp_multi_filter_swear">Schimpfwörter filtern</label></th>
<tr><th><label for="wp_multi_filter_swear">Schimpfwörter filtern</label></th>
<td><input type="checkbox" name="wp_multi_filter_swear" value="1" <?php checked(1, get_option('wp_multi_filter_swear'), true); ?>></td>
</tr>
<tr>
<th><label for="wp_multi_filter_ip">IP-Adressen filtern</label></th>
<tr><th><label for="wp_multi_filter_ip">IP-Adressen filtern</label></th>
<td><input type="checkbox" name="wp_multi_filter_ip" value="1" <?php checked(1, get_option('wp_multi_filter_ip'), true); ?>></td>
</tr>
<tr>
<th><label for="wp_multi_allowed_urls">Erlaubte URLs</label></th>
<td>
<textarea name="wp_multi_allowed_urls" rows="5" cols="50"><?php echo esc_textarea(get_option('wp_multi_allowed_urls')); ?></textarea>
<p class="description">Trenne mehrere URLs mit einem Komma. Es wird automatisch <strong>http://</strong> und <strong>www.</strong> entfernt, bevor die URL überprüft wird.</p>
</td>
</tr>
</table>
<?php submit_button(); ?>
</form>
</div>
<style>
/* Banner Styling */
.wp-multi-banner {
background-color: #0073aa; /* Blaues Banner */
padding: 20px;
text-align: center;
border-radius: 8px 8px 0 0;
margin-bottom: 30px;
}
.wp-multi-logo {
max-width: 200px;
height: auto;
}
/* Anpassung für die Kommentar-Filter-Seite */
.wrap {
font-family: Arial, sans-serif;
padding: 20px;
background-color: #ffffff;
border-radius: 10px;
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
}
h1 {
color: #0073aa;
font-size: 24px;
font-weight: 600;
margin-bottom: 20px;
}
.form-table th {
padding: 12px 15px;
text-align: left;
background-color: #f9f9f9;
border: 1px solid #ddd;
}
.form-table td {
padding: 12px 15px;
border: 1px solid #ddd;
}
.form-table input[type="checkbox"] {
margin-right: 10px;
}
input[type="submit"] {
background-color: #0073aa;
color: white;
padding: 10px 20px;
border: none;
border-radius: 5px;
cursor: pointer;
font-size: 16px;
transition: background-color 0.3s ease;
}
input[type="submit"]:hover {
background-color: #005177;
}
.wp-multi-banner { background-color: #0073aa; padding: 20px; text-align: center; border-radius: 8px 8px 0 0; margin-bottom: 30px; }
.wp-multi-logo { max-width: 200px; height: auto; }
.wrap { font-family: Arial, sans-serif; padding: 20px; background-color: #ffffff; border-radius: 10px; box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1); }
h1 { color: #0073aa; font-size: 24px; font-weight: 600; margin-bottom: 20px; }
.form-table th { padding: 12px 15px; text-align: left; background-color: #f9f9f9; border: 1px solid #ddd; }
.form-table td { padding: 12px 15px; border: 1px solid #ddd; }
input[type="submit"] { background-color: #0073aa; color: white; padding: 10px 20px; border: none; border-radius: 5px; cursor: pointer; font-size: 16px; transition: background-color 0.3s ease; }
input[type="submit"]:hover { background-color: #005177; }
</style>
<?php
}
// Kommentar-Filter
// Kommentar-Filter Funktion
function wp_multi_filter_comment_content($comment_content) {
// Rufnummern filtern (mit verschiedenen Trennzeichen und Formaten)
$bad_words_url = 'https://git.viper.ipv64.net/M_Viper/wp-multi/raw/branch/main/includes/bad-words.json';
$swear_words = get_transient('wp_multi_swear_words');
if ($swear_words === false) {
$response = wp_remote_get($bad_words_url);
if (!is_wp_error($response)) {
$json_content = wp_remote_retrieve_body($response);
$decoded_data = json_decode($json_content, true);
if (json_last_error() === JSON_ERROR_NONE && isset($decoded_data['words']) && is_array($decoded_data['words'])) {
$swear_words = $decoded_data['words'];
set_transient('wp_multi_swear_words', $swear_words, HOUR_IN_SECONDS);
}
}
}
if (get_option('wp_multi_filter_swear') == 1 && !empty($swear_words)) {
foreach ($swear_words as $word) {
$pattern = '/\b' . preg_quote($word, '/') . '\b/iu';
$replacement = str_repeat('*', mb_strlen($word));
$comment_content = preg_replace($pattern, $replacement, $comment_content);
}
}
if (get_option('wp_multi_filter_phone') == 1) {
$comment_content = preg_replace('/\b(\+?[0-9]{1,3}[-.\s]?)?(\(?\d{2,4}\)?[-.\s]?\d{2,4}[-.\s]?\d{2,4})\b/i', '**********', $comment_content);
}
// E-Mail-Adressen filtern (alle möglichen Varianten, z.B. mit und ohne Subdomains)
if (get_option('wp_multi_filter_email') == 1) {
$comment_content = preg_replace('/[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}/i', '**********', $comment_content);
}
// URLs filtern (verschiedene Varianten, z.B. mit oder ohne http://, www)
if (get_option('wp_multi_filter_url') == 1) {
$comment_content = preg_replace('/\b((https?:\/\/)?(www\.)?[a-zA-Z0-9.-]+\.[a-zA-Z]{2,})(\/\S*)?\b/i', '**************', $comment_content);
$allowed_urls = array_map('trim', explode(',', get_option('wp_multi_allowed_urls', '')));
$comment_content = preg_replace_callback('/\b((https?:\/\/)?(www\.)?[a-zA-Z0-9.-]+\.[a-zA-Z]{2,})(\/\S*)?\b/i', function($matches) use ($allowed_urls) {
// Entfernt "http://", "https://" und "www."
$url = strtolower(preg_replace(['/^https?:\/\//', '/^www\./'], '', $matches[0]));
return in_array($url, $allowed_urls) ? $matches[0] : '**************';
}, $comment_content);
}
// Schimpfwörter filtern (verschiedene Schreibweisen und Abkürzungen berücksichtigen)
if (get_option('wp_multi_filter_swear') == 1) {
$swear_words = ['arsch', 'schlechtwort1', 'schlechtwort2', 'examplebadword']; // Echte Wörter einfügen
foreach ($swear_words as $word) {
$comment_content = preg_replace('/\b' . preg_quote($word, '/') . '\b/i', str_repeat('*', strlen($word)), $comment_content);
// Alternative Schreibweisen oder Abkürzungen können hier auch berücksichtigt werden, z.B.:
$comment_content = preg_replace('/\b' . preg_quote($word, '/') . '[s]{0,2}\b/i', str_repeat('*', strlen($word)), $comment_content); // Beispiel für 'arssch' oder 'arschs'
}
}
// IP-Adressen filtern (alle gängigen Formate)
if (get_option('wp_multi_filter_ip') == 1) {
$comment_content = preg_replace('/\b(?:\d{1,3}\.){3}\d{1,3}\b/', '**********', $comment_content);
}
@ -2389,22 +2408,79 @@ function wp_multi_update_dashboard_widget() {
}
add_action('wp_dashboard_setup', 'wp_multi_update_dashboard_widget');
// Callback-Funktion für das Widget
function wp_multi_update_dashboard_widget_content() {
// Gitea API-URL und Token
// Cron-Job registrieren
function wp_multi_update_schedule_check() {
if (!wp_next_scheduled('wp_multi_update_check_event')) {
// Registriere den Cron-Job, der alle 3 Minuten ausgeführt wird
wp_schedule_event(time(), 'three_minutes', 'wp_multi_update_check_event');
}
}
add_action('wp', 'wp_multi_update_schedule_check');
// Cron-Job für Update-Überprüfung
function wp_multi_update_check() {
// Gitea API-URL
$api_url = 'https://git.viper.ipv64.net/api/v1/repos/M_Viper/wp-multi/releases';
$api_token = '9a8bfc571ec98af17bdfadf9e8495c6c330d8c7d';
// Die Version des Plugins aus den Metadaten der Plugin-Datei holen
$plugin_data = get_plugin_data( __FILE__ );
$installed_version = $plugin_data['Version']; // Die installierte Version aus den Plugin-Metadaten
// Gitea API-Anfrage für die neuesten Releases
$response = wp_remote_get($api_url, array(
'headers' => array(
'Authorization' => 'token ' . $api_token
)
));
// Hole die Einstellung, ob PreRelease-Versionen angezeigt werden sollen
$show_prereleases = get_option('wp_multi_update_show_prereleases', false);
// Gitea API-Anfrage für die neuesten Releases ohne Authentifizierung
$response = wp_remote_get($api_url);
if (is_wp_error($response)) {
return; // Fehler nicht weitergeben, aber nichts tun
}
// API-Antwort verarbeiten
$body = wp_remote_retrieve_body($response);
$data = json_decode($body, true);
// Finde das neueste, gültige Release (nicht PreRelease, falls deaktiviert)
$valid_release = null;
foreach ($data as $release) {
// Wenn PreRelease deaktiviert ist, überspringe alle PreRelease-Versionen
if (!$show_prereleases && isset($release['prerelease']) && $release['prerelease']) {
continue;
}
if (!empty($release['tag_name'])) {
$valid_release = $release;
break; // Nur das erste gültige Release verwenden
}
}
if ($valid_release) {
$latest_version = $valid_release['tag_name'];
$release_notes = isset($valid_release['body']) ? $valid_release['body'] : '';
$is_prerelease = isset($valid_release['prerelease']) && $valid_release['prerelease'];
// Speichern von Release-Daten
update_option('wp_multi_update_latest_version', $latest_version);
update_option('wp_multi_update_release_notes', $release_notes);
update_option('wp_multi_update_is_prerelease', $is_prerelease);
}
}
add_action('wp_multi_update_check_event', 'wp_multi_update_check');
// Callback-Funktion für das Widget
function wp_multi_update_dashboard_widget_content() {
// Gitea API-URL
$api_url = 'https://git.viper.ipv64.net/api/v1/repos/M_Viper/wp-multi/releases';
// Die Version des Plugins aus den Metadaten der Plugin-Datei holen
$plugin_data = get_plugin_data( __FILE__ );
$installed_version = $plugin_data['Version']; // Die installierte Version aus den Plugin-Metadaten
// Hole die Einstellung, ob PreRelease-Versionen angezeigt werden sollen
$show_prereleases = get_option('wp_multi_update_show_prereleases', false);
// Gitea API-Anfrage für die neuesten Releases ohne Authentifizierung
$response = wp_remote_get($api_url);
if (is_wp_error($response)) {
echo 'Fehler beim Abrufen der Versionsinformationen von Gitea.';
@ -2414,11 +2490,27 @@ function wp_multi_update_dashboard_widget_content() {
// API-Antwort verarbeiten
$body = wp_remote_retrieve_body($response);
$data = json_decode($body, true);
if (!empty($data) && isset($data[0]['tag_name'])) {
$latest_version = $data[0]['tag_name']; // Neuste Version von Gitea
// Vergleiche die installierte Version mit der neuesten Version
// Finde das neueste, gültige Release (nicht PreRelease, falls deaktiviert)
$valid_release = null;
foreach ($data as $release) {
// Wenn PreRelease deaktiviert ist, überspringe alle PreRelease-Versionen
if (!$show_prereleases && isset($release['prerelease']) && $release['prerelease']) {
continue;
}
if (!empty($release['tag_name'])) {
$valid_release = $release;
break; // Nur das erste gültige Release verwenden
}
}
if ($valid_release) {
$latest_version = $valid_release['tag_name'];
$release_notes = isset($valid_release['body']) ? $valid_release['body'] : '';
$is_prerelease = isset($valid_release['prerelease']) && $valid_release['prerelease'];
// Anzeige der Versionen und Text basierend auf PreRelease
if (version_compare($installed_version, $latest_version, '>=')) {
// Wenn die installierte Version gleich oder neuer ist als die Version in Gitea
echo '<p style="color: green;">Ihre Version ist aktuell. Version ' . $installed_version . ' ist die neueste Version.</p>';
@ -2427,13 +2519,54 @@ function wp_multi_update_dashboard_widget_content() {
echo '<p style="color: red;">Es ist eine neue Version von WP Multi verfügbar! <strong>Version ' . $latest_version . '</strong> ist jetzt verfügbar.</p>';
echo '<p>Aktuell installierte Version: <strong>' . $installed_version . '</strong></p>';
echo '<p>Neue Version auf Gitea: <strong>' . $latest_version . '</strong></p>';
echo '<p><a href="' . esc_url($data[0]['assets'][0]['browser_download_url']) . '" class="button button-primary" target="_blank">Update herunterladen</a></p>';
// PreRelease in blauer Schrift anzeigen, wenn erlaubt und das Update ein PreRelease ist
if ($is_prerelease && $show_prereleases) {
echo '<p style="color: blue;">Dieses Update ist ein PreRelease.</p>';
}
// Verfassen-Text anzeigen, falls verfügbar
if (!empty($release_notes)) {
echo '<p><strong>Information zum Update:</strong></p>';
echo '<p>' . nl2br(esc_html($release_notes)) . '</p>';
}
// Button-Text anpassen je nachdem, ob es ein PreRelease ist
$button_text = $is_prerelease ? 'PreRelease herunterladen' : 'Update herunterladen';
$download_url = $valid_release['assets'][0]['browser_download_url'];
echo '<p><a href="' . esc_url($download_url) . '" class="button button-primary" target="_blank">' . esc_html($button_text) . '</a></p>';
}
} else {
echo 'Fehler beim Abrufen der neuesten Version von Gitea.';
}
}
// Benutzerdefinierte Intervalle für Cron hinzufügen
function wp_multi_update_custom_intervals($schedules) {
// 3 Minuten Intervall hinzufügen
$schedules['three_minutes'] = array(
'interval' => 180, // Alle 3 Minuten
'display' => __('Alle 3 Minuten'),
);
return $schedules;
}
add_filter('cron_schedules', 'wp_multi_update_custom_intervals');
// PreRelease Option in den Einstellungen hinzufügen
function wp_multi_update_register_settings() {
add_option('wp_multi_update_show_prereleases', false);
register_setting('general', 'wp_multi_update_show_prereleases');
add_settings_field('wp_multi_update_show_prereleases', 'Pre-Release-Versionen anzeigen', 'wp_multi_update_show_prereleases_field', 'general');
}
add_action('admin_init', 'wp_multi_update_register_settings');
// Einstellung für PreRelease-Versionen
function wp_multi_update_show_prereleases_field() {
$value = get_option('wp_multi_update_show_prereleases', false);
echo '<input type="checkbox" id="wp_multi_update_show_prereleases" name="wp_multi_update_show_prereleases" value="1" ' . checked(1, $value, false) . ' />';
echo '<p class="description" style="color: red;">Aktiviere diese Option, um Pre-Release-Versionen anzuzeigen, die noch nicht vollständig veröffentlicht wurden. Deaktiviere die Option, um nur stabile Versionen anzuzeigen.</p>';
}
/*
* Notify Seite Discord & Telegram