6 Commits
2.2 ... 2.5

Author SHA1 Message Date
58aa3c7e78 README.md aktualisiert 2025-03-08 15:01:48 +00:00
feb5e9cc44 README.md aktualisiert 2025-03-08 15:00:12 +00:00
dbc64a6716 README.md aktualisiert 2025-03-08 14:28:10 +00:00
c0d2e5a925 README.md aktualisiert 2025-03-08 14:26:37 +00:00
7543be3c56 README.md aktualisiert 2025-03-08 14:20:54 +00:00
fbf63a1efc wp-multi.php aktualisiert 2025-03-08 13:16:33 +00:00
2 changed files with 5087 additions and 5272 deletions

255
README.md
View File

@@ -1,164 +1,159 @@
# WP-Multi Plugin
# WP-Multi Plugin für WordPress
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.
**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.
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.
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.
## Funktionen
### Beiträge
- **Custom Textbox**:
- Fügt eine benutzerdefinierte Textbox am Ende eines Beitrags hinzu (z.B. für Copyright-Informationen).
### 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]`
### Sidebar
- **Pinwand**:
- Ermöglicht das Teilen von Informationen im Admin-Bereich, um wichtige Mitteilungen oder Nachrichten direkt an Administratoren und Benutzer zu senden.
### 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.
- **Custom Shortcodes**:
- Benutzerdefinierte Shortcodes können per Auswahl im Editor eingefügt werden.
### 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.
- **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.
### 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.
### Kommentare
- **Kommentar Filter**:
- Blockiert Schimpfwörter, Telefonnummern, E-Mail-Adressen und URLs in Kommentaren.
### 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.
### Benutzer
- **Blockierte IPs**:
- Zeigt alle blockierten IPs an und ermöglicht das Verwalten dieser.
### 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.
- **Benutzer Analytics**:
- Zeigt eine Übersicht über die Benutzeraktivitäten, z.B. die Anzahl der Kommentare eines Benutzers.
### 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.
- **Benutzer sperren**:
- Sperrt Benutzer anhand von Namen, E-Mail-Adresse oder IP-Adresse für Kommentare.
### 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.
- **GastAutoren**:
- Ermöglicht es, den Namen des Gastautors anzugeben, der im Frontend angezeigt wird.
- Verfolgt, wie viele Beiträge jeder Gastautor verfasst hat.
### 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.
### 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]`.
### 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.
- **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.
### 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.
### Werkzeuge
- **Admin Links**:
- Ermöglicht das Hinzufügen benutzerdefinierter Links im WordPress-Adminbereich.
- Sowohl interne als auch externe Links können hinzugefügt 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.
### Notify
- **Telegram Benachrichtigung bei neuem Beitrag**:
- Sendet eine Benachrichtigung an Telegram, wenn ein neuer Beitrag veröffentlicht wird.
### 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
- **Discord Benachrichtigung bei neuem Beitrag**:
- Sendet eine Benachrichtigung an Discord, wenn ein neuer Beitrag veröffentlicht wird.
### 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.
### 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.
### 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.
- **Besucher Analytics**:
- Zeigt die meistbesuchten Beiträge auf der Website an, sodass du Einblicke in die beliebtesten Inhalte bekommst.
### 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]`
---
## 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.
### Schritt 1: Plugin herunterladen
Lade das **WP-Multi Plugin** als ZIP-Datei von GitHub oder deinem bevorzugten Source-Repository herunter.
### 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**.
### 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.
---
## Verwendung
### Statistiken anzeigen
Nach der Installation kannst du die Funktionen und Shortcodes im Adminbereich oder direkt in deinen Beiträgen verwenden. Hier sind einige nützliche Shortcodes:
Um die Statistiken auf deiner Seite anzuzeigen, füge einfach den folgenden Shortcode in den Inhalt einer Seite oder eines Beitrags ein:
- **Statistik anzeigen:** `[statistik_manager]`
- **Lesezeichen hinzufügen:** `[add_bookmark]`
- **Lesezeichen anzeigen:** `[display_bookmarks]`
- **Inhaltsverzeichnis anzeigen:** `[alphabetical_index]`
`[statistik_manager]`
Im Adminbereich kannst du auch die benutzerdefinierten Funktionen wie die Textboxen, Kommentar-Filter und Anti-Spam-Maßnahmen konfigurieren.
Dieser Shortcode zeigt die verschiedenen Statistiken an, die im Admin-Bereich konfiguriert wurden.
### Banner anzeigen
Das Banner kann im Admin-Bereich konfiguriert werden und wird dann automatisch auf der Website angezeigt, basierend auf den konfigurierten Einstellungen.
### Eröffnungsdatum anzeigen
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.
### Beitrags Report anzeigen
Um den Report-Button in einem Beitrag oder Widget anzuzeigen, füge den Shortcode `[report_button]` an der gewünschten Stelle ein.
## Einstellungen
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
## Optionen
### 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.
### Kommentare
- **Kommentar Filter**: Blockiert Schimpfwörter, URLs, E-Mail-Adressen und Telefonnummern.
### 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.
### 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.
### Sicherheit
- **Schutz vor Brute-Force-Angriffen**: Aktiviert Sicherheitsmaßnahmen gegen Brute-Force-Angriffe.
### Notify
- **Telegram Benachrichtigung**: Sende Benachrichtigungen an Telegram bei neuen Beiträgen.
- **Discord Benachrichtigung**: Sende Benachrichtigungen an Discord bei neuen Beiträgen.
## Screenshots
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.
## Entwickler
- **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)
---
## 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 [GPL-2.0 Lizenz](https://www.gnu.org/licenses/old-licenses/gpl-2.0.de.html) veröffentlicht.
## Contributing
---
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.
## 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.

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.1
* Version: 2.3
* Author: M_Viper
* Author URI: https://m-viper.de
* Requires at least: 6.7.2
@@ -16,355 +16,259 @@
if (!defined('ABSPATH')) exit;
// Menüeintrag für Broken-Link-Checker
function wp_multi_broken_link_checker_menu() {
add_submenu_page(
'tools.php', // Add to the "Tools" menu
'Broken Link Checker',
'Broken Link Checker',
'manage_options',
'wp-multi-broken-links',
'wp_multi_broken_link_checker_page'
/*
* Index Verzeichnis [alphabetical_index]
*/
// Shortcode zum Erstellen des Indexes
function wp_multi_alphabetical_index($atts) {
// Definiere die Argumente für den Shortcode
$atts = shortcode_atts(array(
'posts_per_page' => 20, // Maximale Beiträge pro Seite
), $atts, 'alphabetical_index');
// Hole alle Beiträge
$args = array(
'post_type' => 'post',
'posts_per_page' => -1, // Alle Beiträge (wir filtern später nach Buchstabenbereich)
'orderby' => 'title',
'order' => 'ASC',
);
$posts = get_posts($args);
// Beiträge nach Anfangsbuchstaben gruppieren
$alphabet = range('A', 'Z');
$posts_by_letter = array();
foreach ($posts as $post) {
$first_letter = strtoupper(substr($post->post_title, 0, 1));
if (in_array($first_letter, $alphabet)) {
$posts_by_letter[$first_letter][] = $post;
}
}
add_action('admin_menu', 'wp_multi_broken_link_checker_menu');
// Menüseite für den Broken-Link-Checker
function wp_multi_broken_link_checker_page() {
// Holen Sie sich die gespeicherten Optionen für den Broken Link Checker
$email_notifications_enabled = get_option('wp_multi_broken_link_email_notifications', false);
$send_admin_email = get_option('wp_multi_broken_link_send_admin_email', false);
$send_author_email = get_option('wp_multi_broken_link_send_author_email', false);
$check_interval = get_option('wp_multi_broken_link_check_interval', 72);
$notification_email = get_option('wp_multi_broken_link_notification_email', get_option('admin_email'));
// Holen des aktuellen Buchstabens aus der URL
$letter = isset($_GET['letter']) ? strtoupper($_GET['letter']) : ''; // Der Buchstabe aus der URL
// Holen Sie sich die Auswahl des Benutzers
$checked_link_types = get_option('wp_multi_broken_link_checked_types', [
'html_links' => true,
'html_images' => true,
'plaintext_urls' => true,
'youtube_videos' => true,
'googlevideo_videos' => true,
'youtube_playlists' => true,
'old_youtube_videos' => true,
'smart_youtube' => true,
'dailymotion_videos' => true,
'vimeo_videos' => true,
]);
// Bestimme, welche Beiträge angezeigt werden
$posts_in_letter = [];
if ($letter && isset($posts_by_letter[$letter])) {
$posts_in_letter = $posts_by_letter[$letter];
}
// Teile die Beiträge in zwei Hälften für die Boxen
$halfway = ceil(count($posts_in_letter) / 2); // Rundet die Hälfte auf
$first_half = array_slice($posts_in_letter, 0, $halfway); // Erste Hälfte der Beiträge
$second_half = array_slice($posts_in_letter, $halfway); // Zweite Hälfte der Beiträge
// Ausgabe
ob_start();
?>
<div class="wrap">
<div class="banner">
<img src="https://m-viper.de/img/logo.png" alt="Logo" class="plugin-logo">
<h1>Broken Link Checker</h1>
<div class="alphabetical-index">
<!-- Links zu den Buchstaben -->
<div class="alphabet-links">
<?php foreach ($alphabet as $char): ?>
<a href="?letter=<?php echo $char; ?>" class="letter-link"><?php echo $char; ?></a>
<?php endforeach; ?>
</div>
<div id="status-section">
<h2>Status</h2>
<p id="broken-links-count">0 fehlerhafte Links gefunden</p>
<p id="total-links">0 eindeutige Links wurden in 0 Links erkannt</p>
<p>Link-Überprüfung: Alle <?php echo $check_interval; ?> Stunden</p>
<p>Vorhandene Links werden regelmäßig erneut kontrolliert. Neue Links werden normalerweise sofort geprüft.</p>
<?php if ($letter): ?>
<!-- Box für den aktuellen Buchstaben -->
<div class="letter-heading-box">
<h2>Beiträge für: <?php echo $letter; ?></h2>
</div>
<h2>Link-Überprüfung</h2>
<button id="check-broken-links" class="button button-primary">Jetzt auf kaputte Links prüfen</button>
<!-- Fortschrittsanzeige -->
<div id="progress-container" style="display:none; margin-top: 20px;">
<p>Prüfe Links...</p>
<progress id="progress-bar" value="0" max="100" style="width:100%;"></progress>
<p id="progress-text">0%</p>
<!-- Zeige die Beiträge für den ausgewählten Buchstaben in zwei Boxen -->
<div class="letter-pair-container">
<div class="letter-box">
<ul class="post-list">
<?php foreach ($first_half as $post): ?>
<li><a href="<?php echo get_permalink($post->ID); ?>"><?php echo $post->post_title; ?></a></li>
<?php endforeach; ?>
</ul>
</div>
<div id="broken-links-results" style="margin-top: 20px;">
<h3>Kaputte Links</h3>
<ul id="broken-links-list"></ul>
<div class="letter-box">
<ul class="post-list">
<?php foreach ($second_half as $post): ?>
<li><a href="<?php echo get_permalink($post->ID); ?>"><?php echo $post->post_title; ?></a></li>
<?php endforeach; ?>
</ul>
</div>
<hr>
<h2>E-Mail-Benachrichtigungen</h2>
<form method="post" action="options.php">
<?php settings_fields('wp_multi_broken_link_settings'); ?>
<?php do_settings_sections('wp_multi_broken_link_settings'); ?>
<label for="wp_multi_broken_link_email_notifications">
<input type="checkbox" name="wp_multi_broken_link_email_notifications" id="wp_multi_broken_link_email_notifications" value="1" <?php checked(1, $email_notifications_enabled); ?>>
Dem Administrator eine E-Mail-Benachrichtigung senden, wenn neue fehlerhafte Links erkannt werden
</label>
<br><br>
<label for="wp_multi_broken_link_send_admin_email">
<input type="checkbox" name="wp_multi_broken_link_send_admin_email" id="wp_multi_broken_link_send_admin_email" value="1" <?php checked(1, $send_admin_email); ?>>
Den Administrator benachrichtigen
</label>
<br><br>
<label for="wp_multi_broken_link_send_author_email">
<input type="checkbox" name="wp_multi_broken_link_send_author_email" id="wp_multi_broken_link_send_author_email" value="1" <?php checked(1, $send_author_email); ?>>
Den Autoren benachrichtigen
</label>
<br><br>
<label for="wp_multi_broken_link_notification_email">Benachrichtigungs-E-Mail-Adresse</label>
<input type="email" name="wp_multi_broken_link_notification_email" id="wp_multi_broken_link_notification_email" value="<?php echo esc_attr($notification_email); ?>" class="regular-text">
<br><br>
<h3>Link-Typen zur Überprüfung</h3>
<fieldset>
<legend>Wählen Sie die Link-Typen, die Sie überprüfen möchten:</legend>
<label><input type="checkbox" name="wp_multi_broken_link_checked_types[html_links]" value="1" <?php checked(1, $checked_link_types['html_links']); ?>> HTML-Links</label><br>
<label><input type="checkbox" name="wp_multi_broken_link_checked_types[html_images]" value="1" <?php checked(1, $checked_link_types['html_images']); ?>> HTML-Bilder</label><br>
<label><input type="checkbox" name="wp_multi_broken_link_checked_types[plaintext_urls]" value="1" <?php checked(1, $checked_link_types['plaintext_urls']); ?>> Klartext-URLs</label><br>
<label><input type="checkbox" name="wp_multi_broken_link_checked_types[youtube_videos]" value="1" <?php checked(1, $checked_link_types['youtube_videos']); ?>> Eingebettete YouTube-Videos</label><br>
<label><input type="checkbox" name="wp_multi_broken_link_checked_types[googlevideo_videos]" value="1" <?php checked(1, $checked_link_types['googlevideo_videos']); ?>> Eingebettete GoogleVideo-Videos</label><br>
<label><input type="checkbox" name="wp_multi_broken_link_checked_types[youtube_playlists]" value="1" <?php checked(1, $checked_link_types['youtube_playlists']); ?>> Eingebettete YouTube-Wiedergabelisten (alter Code)</label><br>
<label><input type="checkbox" name="wp_multi_broken_link_checked_types[old_youtube_videos]" value="1" <?php checked(1, $checked_link_types['old_youtube_videos']); ?>> Eingebettete YouTube-Videos (alter Code)</label><br>
<label><input type="checkbox" name="wp_multi_broken_link_checked_types[smart_youtube]" value="1" <?php checked(1, $checked_link_types['smart_youtube']); ?>> Smart YouTube-HTTPv://-URLs</label><br>
<label><input type="checkbox" name="wp_multi_broken_link_checked_types[dailymotion_videos]" value="1" <?php checked(1, $checked_link_types['dailymotion_videos']); ?>> Eingebettete DailyMotion-Videos</label><br>
<label><input type="checkbox" name="wp_multi_broken_link_checked_types[vimeo_videos]" value="1" <?php checked(1, $checked_link_types['vimeo_videos']); ?>> Eingebettete Vimeo-Videos</label><br>
</fieldset>
<br>
<h3>Link-Einstellungen</h3>
<label for="wp_multi_broken_link_check_interval">
Link-Überprüfungsintervall (in Stunden):
<input type="number" name="wp_multi_broken_link_check_interval" id="wp_multi_broken_link_check_interval" value="<?php echo esc_attr($check_interval); ?>" min="1" step="1" class="small-text">
</label>
<br><br>
<button type="submit" class="button button-secondary">Einstellungen speichern</button>
</form>
</div>
<?php endif; ?>
</div>
<style>
.wrap {
background-color: #f4f4f4;
padding: 20px;
.alphabetical-index {
font-family: Arial, sans-serif;
margin: 20px;
}
.banner {
background-color: #0073aa;
color: white;
padding: 15px;
.alphabet-links {
margin-bottom: 20px;
display: flex;
align-items: center;
border-radius: 5px;
justify-content: center;
flex-wrap: wrap;
}
.plugin-logo {
width: 40px;
margin-right: 15px;
}
h1 {
font-size: 30px;
margin: 0;
}
h2 {
.alphabet-links a {
margin-right: 10px;
font-size: 18px;
text-decoration: none;
color: #0073aa;
}
.button {
background-color: #0073aa;
color: white;
border: none;
padding: 10px 20px;
text-transform: uppercase;
font-size: 14px;
cursor: pointer;
.alphabet-links a:hover {
text-decoration: underline;
}
.button:hover {
background-color: #005f8a;
}
#status-section {
.letter-heading-box {
margin-bottom: 20px;
background-color: #f0f0f0;
padding: 15px;
border-radius: 5px;
padding: 20px;
text-align: center;
border-radius: 8px;
}
#broken-links-results ul {
.letter-heading-box h2 {
font-size: 24px;
margin: 0;
}
.letter-pair-container {
display: flex;
gap: 30px;
justify-content: space-between;
}
.letter-box {
width: 48%;
background-color: #f0f0f0;
padding: 20px;
border-radius: 8px;
}
.letter-box h2 {
font-size: 24px;
margin-bottom: 10px;
}
.post-list {
list-style-type: none;
padding: 0;
}
#broken-links-results li {
margin: 10px 0;
.post-list li {
margin-bottom: 5px;
}
hr {
border-top: 1px solid #ddd;
.post-list a {
text-decoration: none;
color: #333;
}
progress {
margin-top: 10px;
}
#progress-text {
font-size: 14px;
margin-top: 5px;
.post-list a:hover {
text-decoration: underline;
}
</style>
<script>
document.getElementById("check-broken-links").addEventListener("click", function() {
let button = this;
button.disabled = true;
button.innerText = "Wird geprüft...";
// Zeige Fortschrittsanzeige
document.getElementById("progress-container").style.display = 'block';
let progressBar = document.getElementById("progress-bar");
let progressText = document.getElementById("progress-text");
progressBar.value = 0;
progressText.textContent = "0%";
fetch(ajaxurl, {
method: "POST",
headers: { "Content-Type": "application/x-www-form-urlencoded" },
body: "action=wp_multi_check_broken_links"
})
.then(response => response.json())
.then(data => {
// Statusaktualisierung
document.getElementById("broken-links-count").textContent = `${data.broken_links_count} fehlerhafte Links gefunden`;
document.getElementById("total-links").textContent = `${data.total_links} eindeutige Links wurden in ${data.broken_links.length} Links erkannt`;
// Update Progress Bar
progressBar.value = 100;
progressText.textContent = "100%";
});
});
</script>
<?php
return ob_get_clean();
}
// AJAX-Aktion für den Broken-Link-Checker
add_action('wp_ajax_wp_multi_check_broken_links', 'wp_multi_check_broken_links');
function wp_multi_check_broken_links() {
// Holen Sie sich die Basis-URL der Webseite
$site_url = get_site_url();
// Shortcode registrieren
add_shortcode('alphabetical_index', 'wp_multi_alphabetical_index');
// Alle Seiten und Beiträge abrufen
$posts = get_posts(['post_type' => 'any', 'posts_per_page' => -1]);
// Holen Sie sich die vom Benutzer ausgewählten Linktypen
$checked_link_types = get_option('wp_multi_broken_link_checked_types', [
'html_links' => true,
'html_images' => true,
'plaintext_urls' => true,
'youtube_videos' => true,
'googlevideo_videos' => true,
'youtube_playlists' => true,
'old_youtube_videos' => true,
'smart_youtube' => true,
'dailymotion_videos' => true,
'vimeo_videos' => true,
]);
/*
* Sperre Trash Mail Adressen
*/
$broken_links = [];
$all_links = [];
$total_links = 0;
// Definiere die Regex-Pattern für die verschiedenen Linktypen
$patterns = [
'html_links' => '/<a href=["\'](https?:\/\/[^\s]+)["\']/', // HTML-Links
'html_images' => '/<img [^>]*src=["\'](https?:\/\/[^\s]+)["\']/', // Bilder-Links
'plaintext_urls' => '/https?:\/\/[^\s]+/', // Klartext-URLs
'youtube_videos' => '/https:\/\/www\.youtube\.com\/watch\?v=([a-zA-Z0-9_-]+)/', // YouTube Videos
'googlevideo_videos' => '/https:\/\/video\.google\.com\/videoplay\?docid=([a-zA-Z0-9_-]+)/', // Google Video
'youtube_playlists' => '/https:\/\/www\.youtube\.com\/playlist\?list=([a-zA-Z0-9_-]+)/', // YouTube Playlists
'old_youtube_videos' => '/https:\/\/youtube\.com\/v\/([a-zA-Z0-9_-]+)/', // Alter YouTube Code
'smart_youtube' => '/httpv:\/\/(?:www\.)?youtube\.com\/(?:watch\?v=|v\/)([a-zA-Z0-9_-]+)/', // Smart YouTube
'dailymotion_videos' => '/https:\/\/www\.dailymotion\.com\/video\/([a-zA-Z0-9_-]+)/', // DailyMotion Videos
'vimeo_videos' => '/https:\/\/vimeo\.com\/([0-9]+)/', // Vimeo Videos
];
// Schleife durch die Beiträge und Links sammeln
foreach ($posts as $post) {
preg_match_all('/https?:\/\/[^\s]+/', $post->post_content, $matches);
$all_links = array_merge($all_links, $matches[0]);
// Funktion zum Laden der Liste von Einweg-Mail-Anbietern
function load_disposable_email_list() {
$file_path = plugin_dir_path(__FILE__) . 'includes/disposable_email_blocklist.conf'; // Pfad zur Datei im includes-Ordner
if (file_exists($file_path)) {
return file($file_path, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
}
return [];
}
$total_links = count($all_links);
$broken_links_count = 0;
// Funktion zum Überprüfen der E-Mail-Adresse eines Kommentators
function check_disposable_email($commentdata) {
$disposable_list = load_disposable_email_list();
$email = $commentdata['comment_author_email'];
$domain = substr(strrchr($email, "@"), 1); // Nur die Domain extrahieren
// Filtere Links nach den vom Benutzer ausgewählten Typen
$filtered_links = [];
foreach ($checked_link_types as $type => $checked) {
if ($checked && isset($patterns[$type])) {
$filtered_links = array_merge($filtered_links, preg_grep($patterns[$type], $all_links));
}
// Überprüfen, ob die Domain auf der Liste steht
if (in_array($domain, $disposable_list)) {
wp_die(__('Fehler: Trash-Mail-Adressen sind in Kommentaren nicht erlaubt.'));
}
// Überprüfe nur die gefilterten Links
foreach ($filtered_links as $link) {
$response = wp_remote_get($link, ['timeout' => 10]); // Timeout auf 10 Sekunden gesetzt
if (is_wp_error($response) || wp_remote_retrieve_response_code($response) == 404) {
$broken_links[] = $link;
$broken_links_count++;
}
return $commentdata;
}
wp_send_json([
'broken_links' => array_unique($broken_links),
'total_links' => $total_links,
'broken_links_count' => $broken_links_count,
]);
// Die Funktion wird beim Absenden eines Kommentars ausgeführt
add_filter('preprocess_comment', 'check_disposable_email');
/*
* Text Copy Schutz und Schutz vor Entwicklertools
*/
// JavaScript für die Kopierschutz-Funktion einbinden
function wp_multi_enqueue_scripts() {
wp_add_inline_script('jquery', "
jQuery(document).ready(function($) {
// Verhindert das Öffnen der Entwicklertools mit F12, Strg+Shift+I und Strg+Shift+C
$(document).keydown(function(e) {
// Blockiert F12, Strg + Shift + I, Strg + Shift + C (Entwicklertools)
if (e.keyCode == 123 || (e.ctrlKey && e.shiftKey && e.keyCode == 73) || (e.ctrlKey && e.shiftKey && e.keyCode == 67)) {
e.preventDefault();
}
// Optionen für den Broken Link Checker registrieren
function wp_multi_broken_link_settings_init() {
register_setting('wp_multi_broken_link_settings', 'wp_multi_broken_link_email_notifications');
register_setting('wp_multi_broken_link_settings', 'wp_multi_broken_link_send_admin_email');
register_setting('wp_multi_broken_link_settings', 'wp_multi_broken_link_send_author_email');
register_setting('wp_multi_broken_link_settings', 'wp_multi_broken_link_notification_email');
register_setting('wp_multi_broken_link_settings', 'wp_multi_broken_link_check_interval');
register_setting('wp_multi_broken_link_settings', 'wp_multi_broken_link_checked_types');
// Verhindert das Öffnen des Quellcodes mit Strg + U (view-source)
if ((e.ctrlKey && e.keyCode == 85) || (e.ctrlKey && e.shiftKey && e.keyCode == 85)) {
e.preventDefault();
}
add_action('admin_init', 'wp_multi_broken_link_settings_init');
// Verhindert den Zugriff auf die Konsole mit Strg + Shift + J (Konsole-Tab)
if ((e.ctrlKey && e.shiftKey && e.keyCode == 74) || (e.metaKey && e.altKey && e.keyCode == 74)) {
e.preventDefault();
}
// Verhindert das Öffnen des Quellcodes mit view-source
if (e.ctrlKey && e.keyCode == 85) {
e.preventDefault();
}
});
// Verhindert das Öffnen des Kontextmenüs (Rechtsklick)
$('body').on('contextmenu', function(e) {
e.preventDefault();
});
// Kopierschutz-Funktion
$('body').on('copy', function(e) {
e.preventDefault();
var selectedText = window.getSelection().toString();
var numericText = selectedText.replace(/./g, function(char) {
return Math.floor(Math.random() * 10);
});
e.originalEvent.clipboardData.setData('text/plain', numericText);
});
});
");
}
add_action('wp_enqueue_scripts', 'wp_multi_enqueue_scripts');
/*
@@ -962,7 +866,6 @@ function wp_multi_statistics_page() {
<?php
}
// Einstellungen registrieren
function wp_multi_register_security_settings() {
register_setting('wp_multi_security_settings', 'wp_multi_honeypot_field');
@@ -978,94 +881,11 @@ 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 Schlüsselwörter', 'wp_multi_blocked_keywords_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_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');
// Callbacks für Felder
function wp_multi_honeypot_field_callback() {
echo '<div class="wp-multi-honeypot-group">';
echo '<input type="text" id="wp_multi_honeypot_field" name="wp_multi_honeypot_field" value="' . esc_attr(get_option('wp_multi_honeypot_field')) . '" />';
echo '<button type="button" onclick="generateHoneypotName()">🔄 Neu</button>';
echo '</div>';
}
function wp_multi_honeypot_error_callback() {
echo '<input type="text" name="wp_multi_honeypot_error" value="' . esc_attr(get_option('wp_multi_honeypot_error')) . '" />';
}
function wp_multi_honeypot_widget_callback() {
$checked = get_option('wp_multi_honeypot_widget') ? 'checked' : '';
echo '<input type="checkbox" name="wp_multi_honeypot_widget" ' . $checked . ' /> Deaktivieren';
}
function wp_multi_max_links_callback() {
echo '<input type="number" name="wp_multi_max_links" value="' . esc_attr(get_option('wp_multi_max_links')) . '" />';
}
function wp_multi_blocked_keywords_callback() {
echo '<input type="text" name="wp_multi_blocked_keywords" value="' . esc_attr(get_option('wp_multi_blocked_keywords')) . '" />';
}
function wp_multi_blocked_ips_callback() {
echo '<textarea name="wp_multi_blocked_ips" rows="5">' . esc_textarea(get_option('wp_multi_blocked_ips')) . '</textarea>';
}
// Prüfen, ob das Kommentar ein Spam ist
function wp_multi_is_spam($commentdata) {
$honeypot_field = get_option('wp_multi_honeypot_field');
if (!empty($commentdata['comment_' . $honeypot_field])) {
wp_multi_log_spam_submission($commentdata['comment_author_IP']);
wp_die(get_option('wp_multi_honeypot_error'));
}
// Weitere Anti-Spam-Checks hier (Keywords, Links etc.)
return $commentdata;
}
add_filter('preprocess_comment', 'wp_multi_is_spam');
// Spam-Einreichung protokollieren
function wp_multi_log_spam_submission($ip_address) {
$spam_submissions = get_option('wp_multi_spam_submissions', []);
$spam_submissions[] = ['ip' => $ip_address, 'time' => current_time('mysql')];
update_option('wp_multi_spam_submissions', $spam_submissions);
// Spam IPs blockieren
$spammer_ips = get_option('wp_multi_spammer_ips', []);
if (!in_array($ip_address, $spammer_ips)) {
$spammer_ips[] = $ip_address;
update_option('wp_multi_spammer_ips', $spammer_ips);
}
// Zähler für blockierte Kommentare erhöhen
$blocked_comments = get_option('wp_multi_blocked_comments', 0);
update_option('wp_multi_blocked_comments', ++$blocked_comments);
}
// HappyForms-Integration: Honeypot-Feld hinzufügen
function wp_multi_happyforms_add_honeypot($form) {
$honeypot_field = get_option('wp_multi_honeypot_field');
echo '<div style="display:none !important;">';
echo '<label for="' . esc_attr($honeypot_field) . '">Bitte nicht ausfüllen</label>';
echo '<input type="text" name="' . esc_attr($honeypot_field) . '" id="' . esc_attr($honeypot_field) . '" value="" />';
echo '</div>';
}
add_action('happyforms_part_input_after', 'wp_multi_happyforms_add_honeypot');
// HappyForms: Spam-Erkennung
function wp_multi_happyforms_check_honeypot($submission) {
$honeypot_field = get_option('wp_multi_honeypot_field');
if (!empty($_POST[$honeypot_field])) {
wp_multi_log_spam_submission($_SERVER['REMOTE_ADDR']);
wp_die(get_option('wp_multi_honeypot_error'));
}
return $submission;
}
add_filter('happyforms_validate_submission', 'wp_multi_happyforms_check_honeypot');
/*
@@ -2573,7 +2393,7 @@ add_action('wp_dashboard_setup', 'wp_multi_update_dashboard_widget');
function wp_multi_update_dashboard_widget_content() {
// Gitea API-URL und Token
$api_url = 'https://git.viper.ipv64.net/api/v1/repos/M_Viper/wp-multi/releases';
$api_token = 'aad0e1d1ea382921591a144f115c1d55febb50b3';
$api_token = '9a8bfc571ec98af17bdfadf9e8495c6c330d8c7d';
// Die Version des Plugins aus den Metadaten der Plugin-Datei holen
$plugin_data = get_plugin_data( __FILE__ );