Compare commits

...

15 Commits
2.3 ... main

3 changed files with 716 additions and 11542 deletions

223
README.md
View File

@ -1,164 +1,143 @@
# WP-Multi Plugin
# WP Multi
Das **WP-Multi** Plugin für WordPress bietet eine leistungsstarke Sammlung von Funktionen, die speziell entwickelt wurden, um die Verwaltung und Personalisierung deiner Website zu verbessern. Mit diesem Plugin kannst du eine Vielzahl von Statistiken wie die Gesamtzahl von Beiträgen, Kommentaren und Kategorien auf einfache Weise anzeigen. Zudem hast du die Möglichkeit, benutzerdefinierte Banner zu erstellen, um Besucher gezielt auf wichtige Inhalte oder Aktionen hinzuweisen.
**Erweiterter Anti-Spam-Schutz, Sicherheitsfeatures, Inhaltsmanagement und mehr für WordPress**
WP-Multi geht darüber hinaus und ermöglicht dir die Integration von Benachrichtigungen via Telegram und Discord für neue Beiträge, die Verwaltung von Gastautoren und die Erstellung benutzerdefinierter Admin-Links. Das Plugin umfasst außerdem fortschrittliche Funktionen zur Kommentarmoderation, wie das Sperren von Benutzern und das Blockieren unerwünschter Inhalte. Alles lässt sich bequem und flexibel direkt im WordPress-Dashboard anpassen, sodass du deine Website mit wenigen Klicks noch effizienter und benutzerfreundlicher gestalten kannst.
[![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
### Beiträge
- **Custom Textbox**:
- Fügt eine benutzerdefinierte Textbox am Ende eines Beitrags hinzu (z.B. für Copyright-Informationen).
### Sidebar
- **Pinwand**:
- Ermöglicht das Teilen von Informationen im Admin-Bereich, um wichtige Mitteilungen oder Nachrichten direkt an Administratoren und Benutzer zu senden.
- **Custom Shortcodes**:
- Benutzerdefinierte Shortcodes können per Auswahl im Editor eingefügt werden.
- **Beitrags Report**:
- Nutzer können Beiträge melden.
- Verfügbar über den Shortcode: `[report_button]`, um es in Widgets oder direkt in Beiträge einzufügen.
- **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
### Kommentare
- **Kommentar Filter**:
- Blockiert Schimpfwörter, Telefonnummern, E-Mail-Adressen und URLs in Kommentaren.
- **Sicherheitsfunktionen:**
- Schutz vor Brute-Force-Angriffen mit IP-Sperrung
- Textkopierschutz und Einschränkung der Entwicklertools
- Möglichkeit, Benutzer-Logins zu deaktivieren
### Benutzer
- **Blockierte IPs**:
- Zeigt alle blockierten IPs an und ermöglicht das Verwalten dieser.
- **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]`
- **Benutzer Analytics**:
- Zeigt eine Übersicht über die Benutzeraktivitäten, z.B. die Anzahl der Kommentare eines Benutzers.
- **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
- **Benutzer sperren**:
- Sperrt Benutzer anhand von Namen, E-Mail-Adresse oder IP-Adresse für Kommentare.
- **Admin-Tools:**
- Dashboard-Widget für Plugin-Updates (mit Pre-Release-Unterstützung)
- Pinnwand für Administratoren
- Verwaltung benutzerdefinierter Seiten und gemeldeter Beiträge
- **GastAutoren**:
- Ermöglicht es, den Namen des Gastautors anzugeben, der im Frontend angezeigt wird.
- Verfolgt, wie viele Beiträge jeder Gastautor verfasst hat.
### WP Stats & Notice
- **Statistik anzeigen**:
- Zeigt Statistiken über die Gesamtzahl der veröffentlichten Beiträge, Kommentare, Kategorien und Serien (falls eine benutzerdefinierte Taxonomie für Serien existiert).
- Verfügbar über den Shortcode: `[statistik_manager]`.
- **Banner für Hinweise oder Nachrichten**:
- Ermöglicht das Hinzufügen eines anpassbaren Banners auf der Website.
- Nutze es für Neuigkeiten, Angebote oder andere wichtige Inhalte.
- Anpassbare Textfarbe, Hintergrundfarbe und Position des Banners.
### Werkzeuge
- **Admin Links**:
- Ermöglicht das Hinzufügen benutzerdefinierter Links im WordPress-Adminbereich.
- Sowohl interne als auch externe Links können hinzugefügt werden.
### Notify
- **Telegram Benachrichtigung bei neuem Beitrag**:
- Sendet eine Benachrichtigung an Telegram, wenn ein neuer Beitrag veröffentlicht wird.
- **Discord Benachrichtigung bei neuem Beitrag**:
- Sendet eine Benachrichtigung an Discord, wenn ein neuer Beitrag veröffentlicht wird.
### Sicherheit
- **Schutz vor Brute-Force-Angriffen**:
- Bietet Schutzmechanismen, die gegen Brute-Force-Angriffe auf deine Login-Seite vorgehen, um die Sicherheit deiner Website zu erhöhen.
- **Besucher Analytics**:
- Zeigt die meistbesuchten Beiträge auf der Website an, sodass du Einblicke in die beliebtesten Inhalte bekommst.
- **Integrationen:**
- HappyForms-Unterstützung
- Gitea-API für automatische Update-Prüfungen
## Installation
1. Lade das Plugin herunter und entpacke die ZIP-Datei.
2. Gehe in deinem WordPress-Dashboard zu **Plugins** > **Installieren** > **Plugin hochladen**.
3. Wähle die entpackte ZIP-Datei aus und klicke auf **Jetzt installieren**.
4. Aktiviere das Plugin nach der Installation.
1. **Download:**
- Lade das Plugin von [Gitea](https://git.viper.ipv64.net/M_Viper/wp-multi) herunter oder klone das Repository:
## Verwendung
```
git clone https://git.viper.ipv64.net/M_Viper/wp-multi.git
```
### Statistiken anzeigen
2. **Installation:**
Um die Statistiken auf deiner Seite anzuzeigen, füge einfach den folgenden Shortcode in den Inhalt einer Seite oder eines Beitrags ein:
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`).
`[statistik_manager]`
3. **Aktivierung:**
Dieser Shortcode zeigt die verschiedenen Statistiken an, die im Admin-Bereich konfiguriert wurden.
Gehe im WordPress-Admin-Bereich zu "Plugins" und aktiviere "WP Multi".
### Banner anzeigen
## Nutzung
Das Banner kann im Admin-Bereich konfiguriert werden und wird dann automatisch auf der Website angezeigt, basierend auf den konfigurierten Einstellungen.
### Admin-Konfiguration
### Eröffnungsdatum anzeigen
Nach der Aktivierung finden Sie die WP Multi-Einstellungen im WordPress-Admin-Bereich. Hier können Sie die verschiedenen Funktionen konfigurieren:
Im Admin-Bereich kannst du das Eröffnungsdatum deiner Website angeben. Wenn ein Datum eingetragen wurde, wird es zusammen mit der Statistik angezeigt. Falls kein Datum eingetragen ist, wird es nicht angezeigt.
* **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.
### Beitrags Report anzeigen
### Shortcodes
Um den Report-Button in einem Beitrag oder Widget anzuzeigen, füge den Shortcode `[report_button]` an der gewünschten Stelle ein.
* `[alphabetical_index]`: Zeigt ein alphabetisches Verzeichnis aller Beiträge an.
- Attribute:
- `posts_per_page`: Anzahl der Beiträge pro Seite (Standard: 20).
## Einstellungen
* `[report_button]`: Fügt einen "Beitrag melden"-Button hinzu (nur für eingeloggte Benutzer).
1. Gehe im WordPress-Dashboard zu **WP Stat & Notice** > **Einstellungen**.
2. Konfiguriere die gewünschten Optionen:
- Statistiken (Beiträge, Kommentare, Kategorien, Serien)
- Banner-Einstellungen (Text, Farben, Position)
- Telegram und Discord Benachrichtigungen aktivieren
- GastAutoren Einstellungen
- Kommentar Sperren und Filter-Einstellungen
- Besucher Analytics
- Pinwand
- Brute-Force-Schutz
* `[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.
## Optionen
* `[display_bookmarks]`: Zeigt die gespeicherten Lesezeichen eines Gastes an.
- Zeigt eine Liste der gespeicherten Lesezeichen an, die mit einem Cookie identifiziert werden.
### WP Stats & Notice
- **Beiträge anzeigen**: Zeigt die Gesamtzahl der veröffentlichten Beiträge.
- **Kommentare anzeigen**: Zeigt die Gesamtzahl der Kommentare.
- **Kategorien anzeigen**: Zeigt die Anzahl der Kategorien (oder nur die ausgewählten Kategorien).
- **Serien anzeigen**: Zeigt die Anzahl der Serien an (falls diese Taxonomie in deiner WordPress-Installation vorhanden ist).
- **Banner anzeigen**: Ermöglicht das Anzeigen eines anpassbaren Banners auf der Website.
- **Eröffnungsdatum der Webseite**: Ermöglicht das Hinzufügen eines Eröffnungsdatums, das unter den Statistiken angezeigt wird.
* `[statistik_manager]`: Zeigt eine Statistikübersicht an (Beiträge, Kommentare, Kategorien, etc.).
### Kommentare
- **Kommentar Filter**: Blockiert Schimpfwörter, URLs, E-Mail-Adressen und Telefonnummern.
### Beispielkonfiguration
### Benutzer
- **Blockierte IPs**: Zeigt blockierte IPs an und ermöglicht die Verwaltung dieser.
- **GastAutoren**: Zeigt die Anzahl der Beiträge eines Gastautors an.
- **Kommentar Sperren**: Sperrt Kommentare von bestimmten Nutzern basierend auf Namen, E-Mail-Adresse oder IP.
- **Benutzer Analytics**: Zeigt eine Übersicht der Benutzeraktivitäten, z.B. die Anzahl der Kommentare eines Benutzers.
* Füge den Shortcode `[statistik_manager]` in eine Seite ein, um detaillierte Website-Statistiken anzuzeigen.
### Sidebar
- **Pinwand**: Ermöglicht das Teilen von Nachrichten im Admin-Bereich.
- **Custom Shortcodes**: Benutzerdefinierte Shortcodes können im Editor eingefügt werden.
- **Beitrags Report**: Ermöglicht das Melden von Beiträgen durch die Benutzer.
* Aktiviere das Banner unter "WP Stat & Notice" und wähle eine Farbe sowie Position (oben/unten), um Administratoren wichtige Hinweise anzuzeigen.
### Sicherheit
- **Schutz vor Brute-Force-Angriffen**: Aktiviert Sicherheitsmaßnahmen gegen Brute-Force-Angriffe.
* Konfiguriere blockierte Schlüsselwörter wie `viagra`, `casino` im Anti-Spam-Menü, um unerwünschte Kommentare zu filtern.
### Notify
- **Telegram Benachrichtigung**: Sende Benachrichtigungen an Telegram bei neuen Beiträgen.
- **Discord Benachrichtigung**: Sende Benachrichtigungen an Discord bei neuen Beiträgen.
* Verwende den Shortcode `[alphabetical_index posts_per_page="30"]`, um das alphabetische Verzeichnis mit 30 Beiträgen pro Seite anzuzeigen.
## Screenshots
### Details zu Kernfunktionen
1. **Dashboard Ansicht** Die Statistiken werden im Admin-Bereich angezeigt.
2. **Frontend Anzeige** Die Statistiken und das Banner werden auf der Webseite angezeigt, wenn der Shortcode verwendet wird.
3. **Eröffnungsdatum** Zeigt das Eröffnungsdatum der Webseite unter den Statistiken an, falls angegeben.
4. **Beitrags Report Button** Zeigt den Button zum Melden von Beiträgen.
* **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.
## Entwickler
* **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.
- **Plugin Name**: WP Multi
- **Autor**: M_Viper
- **Website**: [https://m-viper.de](https://m-viper.de)
- **Gitea Repository**: [https://git.viper.ipv64.net/M_Viper/wp-multi](https://git.viper.ipv64.net/M_Viper/wp-multi)
* **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/gpl-2.0.html) lizenziert.
Dieses Plugin ist unter der GPLv2-Lizenz veröffentlicht. Siehe [LICENSE](LICENSE) -Datei für Details.
## Contributing
## Danksagung
Beiträge zum Plugin sind willkommen! Wenn du eine Idee für eine Verbesserung hast oder einen Fehler findest, kannst du einen **Issue** hier öffnen oder einen **Pull Request** einreichen.
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