6 Commits
2.1 ... 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 ## Funktionen
### Beiträge ### 1. **Statistik-Übersicht**
- **Custom Textbox**: - **Zeigt detaillierte Statistiken an:**
- Fügt eine benutzerdefinierte Textbox am Ende eines Beitrags hinzu (z.B. für Copyright-Informationen). - Anzahl der Beiträge
- Anzahl der Kommentare
- Anzahl der Kategorien
- Anzahl der Serien
- **Shortcode für die Anzeige der Statistik:** `[statistik_manager]`
### Sidebar ### 2. **Benachrichtigungen auf Telegram und Discord**
- **Pinwand**: - **Telegram & Discord Benachrichtigungen:**
- Ermöglicht das Teilen von Informationen im Admin-Bereich, um wichtige Mitteilungen oder Nachrichten direkt an Administratoren und Benutzer zu senden. - 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**: ### 3. **Custom Admin Links**
- Benutzerdefinierte Shortcodes können per Auswahl im Editor eingefügt werden. - **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**: ### 4. **Gast-Autor**
- Nutzer können Beiträge melden. - **Gast-Autor Feature:**
- Verfügbar über den Shortcode: `[report_button]`, um es in Widgets oder direkt in Beiträge einzufügen. - 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 ### 5. **Beitrags-Report**
- **Kommentar Filter**: - **Melden unangemessener oder falscher Beiträge:**
- Blockiert Schimpfwörter, Telefonnummern, E-Mail-Adressen und URLs in Kommentaren. - 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 ### 6. **Custom Textbox**
- **Blockierte IPs**: - **Fügt benutzerdefinierte Textboxen hinzu:**
- Zeigt alle blockierten IPs an und ermöglicht das Verwalten dieser. - Erstelle Textboxen mit vordefinierten Inhalten, die in jedem Beitrag angezeigt werden.
- Diese Textboxen können leicht im Admin-Panel konfiguriert werden.
- **Benutzer Analytics**: ### 7. **Banner für Nachrichten**
- Zeigt eine Übersicht über die Benutzeraktivitäten, z.B. die Anzahl der Kommentare eines Benutzers. - **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**: ### 8. **Admin Dashboard Update Anzeige**
- Sperrt Benutzer anhand von Namen, E-Mail-Adresse oder IP-Adresse für Kommentare. - **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**: ### 9. **Gast Lesezeichen**
- Ermöglicht es, den Namen des Gastautors anzugeben, der im Frontend angezeigt wird. - **Lesezeichen für Gäste:**
- Verfolgt, wie viele Beiträge jeder Gastautor verfasst hat. - 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 ### 10. **Benutzer für Kommentare sperren**
- **Statistik anzeigen**: - **Verhindert störende Kommentare:**
- Zeigt Statistiken über die Gesamtzahl der veröffentlichten Beiträge, Kommentare, Kategorien und Serien (falls eine benutzerdefinierte Taxonomie für Serien existiert). - 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.
- Verfügbar über den Shortcode: `[statistik_manager]`.
- **Banner für Hinweise oder Nachrichten**: ### 11. **Kommentar Filter**
- Ermöglicht das Hinzufügen eines anpassbaren Banners auf der Website. - **Automatischer Filter für schadhafte Inhalte:**
- Nutze es für Neuigkeiten, Angebote oder andere wichtige Inhalte. - Verhindert das Senden von bestimmten Informationen in Kommentaren wie:
- Anpassbare Textfarbe, Hintergrundfarbe und Position des Banners. - Rufnummern
- E-Mail-Adressen
- URLs
- IP-Adressen
- Schimpfwörtern
- Diese Elemente werden automatisch durch `*` ersetzt, wenn sie gesendet werden.
### Werkzeuge ### 12. **Custom Shortcodes**
- **Admin Links**: - **Erstellung benutzerdefinierter Shortcodes:**
- Ermöglicht das Hinzufügen benutzerdefinierter Links im WordPress-Adminbereich. - 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.
- Sowohl interne als auch externe Links können hinzugefügt werden.
### Notify ### 13. **Besucher Analytics**
- **Telegram Benachrichtigung bei neuem Beitrag**: - **Verfolge die beliebtesten Beiträge:**
- Sendet eine Benachrichtigung an Telegram, wenn ein neuer Beitrag veröffentlicht wird. - 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**: ### 14. **Pinwand für Administratoren**
- Sendet eine Benachrichtigung an Discord, wenn ein neuer Beitrag veröffentlicht wird. - **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 ### 15. **Schutz vor Brute-Force-Angriffen**
- **Schutz vor Brute-Force-Angriffen**: - **Sperrung nach Fehlversuchen:**
- Bietet Schutzmechanismen, die gegen Brute-Force-Angriffe auf deine Login-Seite vorgehen, um die Sicherheit deiner Website zu erhöhen. - 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**: ### 16. **Anti-Spam Honey**
- Zeigt die meistbesuchten Beiträge auf der Website an, sodass du Einblicke in die beliebtesten Inhalte bekommst. - **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 ## Installation
1. Lade das Plugin herunter und entpacke die ZIP-Datei. ### Schritt 1: Plugin herunterladen
2. Gehe in deinem WordPress-Dashboard zu **Plugins** > **Installieren** > **Plugin hochladen**. Lade das **WP-Multi Plugin** als ZIP-Datei von GitHub oder deinem bevorzugten Source-Repository herunter.
3. Wähle die entpackte ZIP-Datei aus und klicke auf **Jetzt installieren**.
4. Aktiviere das Plugin nach der Installation. ### 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 ## 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 ## 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 Name: WP Multi
* Plugin URI: https://git.viper.ipv64.net/M_Viper/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. * 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: M_Viper
* Author URI: https://m-viper.de * Author URI: https://m-viper.de
* Requires at least: 6.7.2 * Requires at least: 6.7.2
@@ -16,355 +16,259 @@
if (!defined('ABSPATH')) exit; 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 * Index Verzeichnis [alphabetical_index]
'Broken Link Checker', */
'Broken Link Checker',
'manage_options',
'wp-multi-broken-links', // Shortcode zum Erstellen des Indexes
'wp_multi_broken_link_checker_page' 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',
); );
}
add_action('admin_menu', 'wp_multi_broken_link_checker_menu');
// Menüseite für den Broken-Link-Checker $posts = get_posts($args);
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 Sie sich die Auswahl des Benutzers // Beiträge nach Anfangsbuchstaben gruppieren
$checked_link_types = get_option('wp_multi_broken_link_checked_types', [ $alphabet = range('A', 'Z');
'html_links' => true, $posts_by_letter = array();
'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,
]);
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;
}
}
// Holen des aktuellen Buchstabens aus der URL
$letter = isset($_GET['letter']) ? strtoupper($_GET['letter']) : ''; // Der Buchstabe aus der URL
// 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"> <div class="alphabetical-index">
<img src="https://m-viper.de/img/logo.png" alt="Logo" class="plugin-logo"> <!-- Links zu den Buchstaben -->
<h1>Broken Link Checker</h1> <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>
<div id="status-section"> <?php if ($letter): ?>
<h2>Status</h2> <!-- Box für den aktuellen Buchstaben -->
<p id="broken-links-count">0 fehlerhafte Links gefunden</p> <div class="letter-heading-box">
<p id="total-links">0 eindeutige Links wurden in 0 Links erkannt</p> <h2>Beiträge für: <?php echo $letter; ?></h2>
<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>
</div> </div>
<h2>Link-Überprüfung</h2> <!-- Zeige die Beiträge für den ausgewählten Buchstaben in zwei Boxen -->
<button id="check-broken-links" class="button button-primary">Jetzt auf kaputte Links prüfen</button> <div class="letter-pair-container">
<div class="letter-box">
<!-- Fortschrittsanzeige --> <ul class="post-list">
<div id="progress-container" style="display:none; margin-top: 20px;"> <?php foreach ($first_half as $post): ?>
<p>Prüfe Links...</p> <li><a href="<?php echo get_permalink($post->ID); ?>"><?php echo $post->post_title; ?></a></li>
<progress id="progress-bar" value="0" max="100" style="width:100%;"></progress> <?php endforeach; ?>
<p id="progress-text">0%</p> </ul>
</div> </div>
<div id="broken-links-results" style="margin-top: 20px;"> <div class="letter-box">
<h3>Kaputte Links</h3> <ul class="post-list">
<ul id="broken-links-list"></ul> <?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> </div>
</div>
<hr> <?php endif; ?>
<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> </div>
<style> <style>
.wrap { .alphabetical-index {
background-color: #f4f4f4;
padding: 20px;
font-family: Arial, sans-serif; font-family: Arial, sans-serif;
margin: 20px;
} }
.banner { .alphabet-links {
background-color: #0073aa; margin-bottom: 20px;
color: white;
padding: 15px;
display: flex; display: flex;
align-items: center; justify-content: center;
border-radius: 5px; flex-wrap: wrap;
} }
.plugin-logo { .alphabet-links a {
width: 40px; margin-right: 10px;
margin-right: 15px; font-size: 18px;
} text-decoration: none;
h1 {
font-size: 30px;
margin: 0;
}
h2 {
color: #0073aa; color: #0073aa;
} }
.button { .alphabet-links a:hover {
background-color: #0073aa; text-decoration: underline;
color: white;
border: none;
padding: 10px 20px;
text-transform: uppercase;
font-size: 14px;
cursor: pointer;
} }
.button:hover { .letter-heading-box {
background-color: #005f8a; margin-bottom: 20px;
}
#status-section {
background-color: #f0f0f0; background-color: #f0f0f0;
padding: 15px; padding: 20px;
border-radius: 5px; 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; list-style-type: none;
padding: 0; padding: 0;
} }
#broken-links-results li { .post-list li {
margin: 10px 0; margin-bottom: 5px;
} }
hr { .post-list a {
border-top: 1px solid #ddd; text-decoration: none;
color: #333;
} }
progress { .post-list a:hover {
margin-top: 10px; text-decoration: underline;
}
#progress-text {
font-size: 14px;
margin-top: 5px;
} }
</style> </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 <?php
return ob_get_clean();
} }
// AJAX-Aktion für den Broken-Link-Checker // Shortcode registrieren
add_action('wp_ajax_wp_multi_check_broken_links', 'wp_multi_check_broken_links'); add_shortcode('alphabetical_index', 'wp_multi_alphabetical_index');
function wp_multi_check_broken_links() {
// Holen Sie sich die Basis-URL der Webseite
$site_url = get_site_url();
// 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', [ * Sperre Trash Mail Adressen
'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,
]);
$broken_links = [];
$all_links = [];
$total_links = 0;
// Definiere die Regex-Pattern für die verschiedenen Linktypen // Funktion zum Laden der Liste von Einweg-Mail-Anbietern
$patterns = [ function load_disposable_email_list() {
'html_links' => '/<a href=["\'](https?:\/\/[^\s]+)["\']/', // HTML-Links $file_path = plugin_dir_path(__FILE__) . 'includes/disposable_email_blocklist.conf'; // Pfad zur Datei im includes-Ordner
'html_images' => '/<img [^>]*src=["\'](https?:\/\/[^\s]+)["\']/', // Bilder-Links if (file_exists($file_path)) {
'plaintext_urls' => '/https?:\/\/[^\s]+/', // Klartext-URLs return file($file_path, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
'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]);
} }
return [];
$total_links = count($all_links);
$broken_links_count = 0;
// 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ü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++;
}
}
wp_send_json([
'broken_links' => array_unique($broken_links),
'total_links' => $total_links,
'broken_links_count' => $broken_links_count,
]);
} }
// Optionen für den Broken Link Checker registrieren // Funktion zum Überprüfen der E-Mail-Adresse eines Kommentators
function wp_multi_broken_link_settings_init() { function check_disposable_email($commentdata) {
register_setting('wp_multi_broken_link_settings', 'wp_multi_broken_link_email_notifications'); $disposable_list = load_disposable_email_list();
register_setting('wp_multi_broken_link_settings', 'wp_multi_broken_link_send_admin_email'); $email = $commentdata['comment_author_email'];
register_setting('wp_multi_broken_link_settings', 'wp_multi_broken_link_send_author_email'); $domain = substr(strrchr($email, "@"), 1); // Nur die Domain extrahieren
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'); // Überprüfen, ob die Domain auf der Liste steht
register_setting('wp_multi_broken_link_settings', 'wp_multi_broken_link_checked_types'); if (in_array($domain, $disposable_list)) {
wp_die(__('Fehler: Trash-Mail-Adressen sind in Kommentaren nicht erlaubt.'));
}
return $commentdata;
} }
add_action('admin_init', 'wp_multi_broken_link_settings_init');
// 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();
}
// 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();
}
// 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 <?php
} }
// Einstellungen registrieren // Einstellungen registrieren
function wp_multi_register_security_settings() { function wp_multi_register_security_settings() {
register_setting('wp_multi_security_settings', 'wp_multi_honeypot_field'); 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_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_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_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_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'); 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() { function wp_multi_update_dashboard_widget_content() {
// Gitea API-URL und Token // Gitea API-URL und Token
$api_url = 'https://git.viper.ipv64.net/api/v1/repos/M_Viper/wp-multi/releases'; $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 // Die Version des Plugins aus den Metadaten der Plugin-Datei holen
$plugin_data = get_plugin_data( __FILE__ ); $plugin_data = get_plugin_data( __FILE__ );