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; } } // 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(); ?>

Beiträge für:

Login deaktivieren

ID, 'disable_login', true), 1 ); ?> /> Markiere diese Option, um den Login des Benutzers zu deaktivieren.
ID, 'disable_login', true ) ) { // Fehlermeldung anzeigen, wenn der Login deaktiviert ist wp_die( 'Dein Login wurde deaktiviert. Bitte kontaktiere den Administrator.' ); } } // Der Filter wird bei jedem Login-Versuch angewendet add_action( 'wp_login', 'wp_multi_block_login_if_disabled', 10, 2 ); /* * Auto Tag */ // Automatische Tags zu Beiträgen hinzufügen function wp_multi_auto_add_tags($post_id) { if (get_post_type($post_id) !== 'post' || wp_is_post_revision($post_id)) return; $existing_tags = wp_get_post_tags($post_id, ['fields' => 'names']); if (!empty($existing_tags)) return; $post = get_post($post_id); $content = strip_tags($post->post_content); $content = strtolower($content); // Stopwörter aus der Admin-Eingabe holen $custom_stopwords = get_option('wp_multi_custom_stopwords', ''); $custom_stopwords = array_map('trim', explode(',', $custom_stopwords)); // In ein Array umwandeln // Standard-Stopwörter $default_stopwords = ['und', 'oder', 'ein', 'eine', 'der', 'die', 'das', 'in', 'mit', 'auf', 'zu', 'von', 'für', 'ist', 'es', 'im', 'an', 'am', 'bei', 'auch', 'aber', 'so', 'dass', 'kann', 'wenn', 'wie', 'wir', 'man', 'nur', 'nicht', 'mehr', 'als', 'sein', 'wurde', 'werden', 'hat', 'haben', 'schon', 'doch', 'denn', 'diese', 'dieser', 'dieses', 'nach', 'sehr', 'Allgemein']; // Alle Stopwörter (standard und benutzerdefiniert) $stopwords = array_merge($default_stopwords, $custom_stopwords); preg_match_all('/\b[a-zäöüß]{4,}\b/u', $content, $matches); $words = array_unique(array_diff($matches[0], $stopwords)); $word_counts = array_count_values($words); arsort($word_counts); $top_tags = array_slice(array_keys($word_counts), 0, 5); if (!empty($top_tags)) { wp_set_post_tags($post_id, implode(',', $top_tags), true); } } // Menüeintrag für Automatische Tags function wp_multi_admin_menu() { add_submenu_page( 'edit.php', 'Automatische Tags', 'Automatische Tags', 'manage_options', 'wp-multi-auto-tags', 'wp_multi_auto_tags_page' ); } add_action('admin_menu', 'wp_multi_admin_menu'); // Menüseite mit Banner & schöner Progress Bar function wp_multi_auto_tags_page() { ?>
M_Viper Logo

Automatische Tags

Diese Funktion fügt automatisch Tag zu Beiträgen hinzu, die noch keine haben.



Trenne die Wörter durch Kommas, z. B. "wird, auch, aber".

0%

'post', 'posts_per_page' => -1, 'fields' => 'ids']; $posts = get_posts($args); set_transient('wp_multi_auto_tags_queue', $posts, 300); wp_send_json(['total' => count($posts)]); } add_action('wp_ajax_wp_multi_process_auto_tags_step', 'wp_multi_process_auto_tags_step'); function wp_multi_process_auto_tags_step() { $queue = get_transient('wp_multi_auto_tags_queue'); $batchSize = isset($_POST['batchSize']) ? intval($_POST['batchSize']) : 10; if (!$queue || empty($queue)) { wp_send_json(['done' => false]); } $posts_to_process = array_splice($queue, 0, $batchSize); foreach ($posts_to_process as $post_id) { wp_multi_auto_add_tags($post_id); } set_transient('wp_multi_auto_tags_queue', $queue, 300); wp_send_json(['done' => true]); } /* * Admin - Panel Banner */ // Admin-Banner als Notice mit Blauem Hintergrund (#0073aa) function wp_multi_add_warning_banner() { echo '

Danke, dass du WP Multi verwendest! Dein Feedback hilft uns, das Plugin ständig zu verbessern. Wenn du Fehler entdeckst oder Verbesserungsvorschläge hast, besuche bitte unsere Gitea-Seite und teile uns deine Ideen mit!

'; } add_action('admin_notices', 'wp_multi_add_warning_banner'); /* * Anti Spam Honey */ // Standardwerte setzen function wp_multi_set_default_options() { add_option('wp_multi_honeypot_field', 'iwlxja5187'); add_option('wp_multi_honeypot_error', 'Spamming or your Javascript is disabled !!'); add_option('wp_multi_honeypot_widget', 0); add_option('wp_multi_max_links', 3); add_option('wp_multi_blocked_keywords', 'viagra,casino,bitcoin'); add_option('wp_multi_blocked_ips', ''); add_option('wp_multi_blocked_comments', 0); // Zähler für blockierte Kommentare add_option('wp_multi_honeypot_hits', 0); // Zähler für Honeypot-Aktivierungen add_option('wp_multi_spammer_ips', []); // Liste der blockierten Spammer-IP-Adressen add_option('wp_multi_spam_submissions', []); // Liste der Spam-Einreichungen } register_activation_hook(__FILE__, 'wp_multi_set_default_options'); // Menüpunkt "Sicherheit" und Statistik hinzufügen function wp_multi_add_security_menu() { add_menu_page( 'Sicherheit', 'Sicherheit', 'manage_options', 'wp-multi-security', 'wp_multi_security_settings_page', 'dashicons-shield', 80 ); add_submenu_page( 'wp-multi-security', 'WP Multi Statistik', 'WP Multi Statistik', 'manage_options', 'wp-multi-statistics', 'wp_multi_statistics_page' ); } add_action('admin_menu', 'wp_multi_add_security_menu'); // Einstellungsseite mit CSS & JS für Generator function wp_multi_security_settings_page() { ?>
WP Multi Logo

WP Multi - Anti Spam

WP Multi Logo

WP Multi - Anti Spam Statistik

Statistik Wert
Blockierte Kommentare
Aktivierte Honeypot-Felder
Spammer-IP-Adressen
Spam-Einreichungen

Spammer-IP-Adressen

Keine Spammer-IP-Adressen gefunden.

prefix . 'blocked_ips'; // Tabelle für blockierte IPs $user = get_user_by('login', $username); // Benutzerinformationen basierend auf dem Anmeldenamen // Überprüfen, ob die IP bereits in der Tabelle existiert $row = $wpdb->get_row($wpdb->prepare("SELECT * FROM $table_name WHERE ip = %s", $ip)); if ($row) { // Wenn die IP existiert, erhöhen wir die Anzahl der fehlgeschlagenen Versuche $wpdb->update( $table_name, array('attempts' => $row->attempts + 1, 'last_attempt' => current_time('mysql')), array('ip' => $ip) ); } else { // Wenn die IP nicht existiert, fügen wir sie hinzu $wpdb->insert( $table_name, array('ip' => $ip, 'attempts' => 1, 'last_attempt' => current_time('mysql')) // Die `last_attempt` sollte ebenfalls beim Einfügen gesetzt werden ); } // Zähler für E-Mails und Versuche (maximal 3 E-Mails) $max_attempts = 3; // Wenn die Anzahl der Versuche größer oder gleich 5 ist, blockiere die IP und sende E-Mails if ($row && $row->attempts >= 5) { // Prüfen, ob bereits mehr als 3 E-Mails versendet wurden $email_sent = get_option('failed_login_email_sent_' . $ip, 0); if ($email_sent < $max_attempts) { // E-Mail an den betroffenen Benutzer senden (falls der Benutzer existiert) if ($user) { wp_mail( $user->user_email, 'Deine IP-Adresse wurde gesperrt', 'Hallo ' . $user->user_login . ',\n\nDeine IP-Adresse wurde aufgrund zu vieler fehlgeschlagener Anmeldeversuche gesperrt. Bitte kontaktiere den Administrator, falls du Unterstützung benötigst.', array('Content-Type: text/plain; charset=UTF-8') ); // Zähler erhöhen update_option('failed_login_email_sent_' . $ip, $email_sent + 1); } // E-Mail an den Administrator senden $admin_email = get_option('admin_email'); wp_mail( $admin_email, 'Brute-Force-Angriff erkannt', 'Es wurde ein Brute-Force-Angriff auf deine WordPress-Seite erkannt. Die IP-Adresse ' . $ip . ' wurde nach mehreren fehlgeschlagenen Anmeldeversuchen blockiert.', array('Content-Type: text/plain; charset=UTF-8') ); // Zähler erhöhen update_option('failed_login_email_sent_' . $ip, $email_sent + 1); } // Benutzer sperren und eine Fehlermeldung anzeigen wp_die("Deine IP-Adresse wurde aufgrund zu vieler Fehlversuche gesperrt. Bitte versuche es später noch einmal."); } } // Funktion zur Überwachung von Benutzeranmeldungen function wp_multi_failed_login_hook($username) { wp_multi_log_failed_login($username); } // Hook zum Abfangen fehlgeschlagener Anmeldungen add_action('wp_login_failed', 'wp_multi_failed_login_hook'); // Funktion zur Erstellung der Tabelle für blockierte IPs (Einmal bei der Installation ausführen) function wp_multi_create_blocked_ips_table() { global $wpdb; $table_name = $wpdb->prefix . 'blocked_ips'; // Tabelle für blockierte IPs $charset_collate = $wpdb->get_charset_collate(); // SQL-Anweisung zur Erstellung der Tabelle $sql = "CREATE TABLE $table_name ( id mediumint(9) NOT NULL AUTO_INCREMENT, ip varchar(45) NOT NULL, attempts int NOT NULL DEFAULT 0, last_attempt datetime NOT NULL, PRIMARY KEY (id) ) $charset_collate;"; require_once(ABSPATH . 'wp-admin/includes/upgrade.php'); dbDelta($sql); // Tabellen erstellen oder aktualisieren } // Diese Funktion wird beim Aktivieren des Plugins aufgerufen register_activation_hook(__FILE__, 'wp_multi_create_blocked_ips_table'); function wp_multi_blocked_ips_menu() { add_submenu_page( 'wp-multi-security', // Übergeordnetes Menü: "Sicherheit" 'Blockierte IPs', // Titel der Seite 'Blockierte IPs', // Menüname 'manage_options', // Berechtigung (nur Administratoren) 'wp_multi_blocked_ips', // Slug 'wp_multi_display_blocked_ips' // Callback-Funktion ); } add_action('admin_menu', 'wp_multi_blocked_ips_menu'); // Callback-Funktion für die Anzeige der blockierten IPs function wp_multi_display_blocked_ips() { global $wpdb; // Tabelle für blockierte IPs $table_name = $wpdb->prefix . 'blocked_ips'; // Berechnen des Datums vor 5 Tagen $five_days_ago = date('Y-m-d H:i:s', strtotime('-5 days')); // Berechnung der Pagination $per_page = 50; $page = isset($_GET['paged']) ? intval($_GET['paged']) : 1; $offset = ($page - 1) * $per_page; // Hole alle blockierten IPs aus der Datenbank, die innerhalb der letzten 5 Tage liegen $blocked_ips = $wpdb->get_results( $wpdb->prepare( "SELECT * FROM $table_name WHERE last_attempt >= %s ORDER BY last_attempt DESC LIMIT %d OFFSET %d", $five_days_ago, $per_page, $offset ) ); // Wenn keine blockierten IPs vorhanden sind if (empty($blocked_ips)) { echo '

Keine blockierten IPs gefunden

'; return; } // HTML-Tabelle zur Anzeige der blockierten IPs echo '

Blockierte IPs (letzte 5 Tage)

'; echo ''; echo ''; echo ''; foreach ($blocked_ips as $ip) { echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; } echo ''; echo '
IDIP-AdresseVersucheLetzter VersuchAktionen
' . $ip->id . '' . $ip->ip . '' . $ip->attempts . '' . $ip->last_attempt . 'Entfernen
'; // Berechne die Gesamtzahl der blockierten IPs $total_ips = $wpdb->get_var("SELECT COUNT(*) FROM $table_name WHERE last_attempt >= '$five_days_ago'"); // Pagination $total_pages = ceil($total_ips / $per_page); if ($total_pages > 1) { echo '
'; for ($i = 1; $i <= $total_pages; $i++) { $class = ($i == $page) ? ' class="current"' : ''; echo '' . $i . ' '; } echo '
'; } // Automatische Löschung von IPs mit weniger als 10 Versuchen, die älter als 3 Tage sind $three_days_ago = date('Y-m-d H:i:s', strtotime('-3 days')); $wpdb->query( $wpdb->prepare( "DELETE FROM $table_name WHERE attempts < 10 AND last_attempt < %s", $three_days_ago ) ); } // Funktion zum Entfernen einer blockierten IP function wp_multi_remove_blocked_ip() { if (!current_user_can('manage_options')) { wp_die('Du hast nicht die erforderlichen Berechtigungen, um diese Aktion durchzuführen.'); } global $wpdb; // Hole die IP-ID aus der URL $id = isset($_GET['id']) ? intval($_GET['id']) : 0; if ($id > 0) { // Lösche die blockierte IP aus der Datenbank $table_name = $wpdb->prefix . 'blocked_ips'; $wpdb->delete($table_name, array('id' => $id)); } // Weiterleitung zurück zur Admin-Seite der blockierten IPs wp_redirect(admin_url('users.php?page=wp_multi_blocked_ips')); exit; } 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; $table_name = $wpdb->prefix . 'message_board'; // Tabelle für Nachrichten $charset_collate = $wpdb->get_charset_collate(); $sql = "CREATE TABLE $table_name ( id mediumint(9) NOT NULL AUTO_INCREMENT, message text NOT NULL, user_id bigint(20) NOT NULL, created_at datetime DEFAULT CURRENT_TIMESTAMP NOT NULL, PRIMARY KEY (id) ) $charset_collate;"; require_once(ABSPATH . 'wp-admin/includes/upgrade.php'); dbDelta($sql); } register_activation_hook(__FILE__, 'wp_multi_create_message_board_table'); // Funktion zum Anzeigen der Nachrichten im Adminbereich function wp_multi_add_message_board() { if (!current_user_can('administrator')) { return; } ?>

Pinwand

Neue Nachricht erstellen



prefix . 'message_board'; $messages = $wpdb->get_results("SELECT * FROM $table_name ORDER BY created_at DESC"); if ($messages) { echo '
'; foreach ($messages as $message) { $user_info = get_userdata($message->user_id); echo '
'; echo '' . esc_html($user_info->user_login) . ' (' . date('d-m-Y H:i:s', strtotime($message->created_at)) . ')'; echo '

' . wp_trim_words($message->message, 20) . '...

'; // Zeige nur eine Vorschau echo '
'; } echo '
'; } else { echo '

Keine Nachrichten vorhanden.

'; } ?>
prefix . 'message_board'; $wpdb->insert( $table_name, array( 'message' => $new_message, 'user_id' => $user_id ) ); echo '

Nachricht wurde erfolgreich erstellt.

'; echo ""; // Seite neu laden } } // Menüeintrag im Adminbereich hinzufügen function wp_multi_add_message_board_menu() { add_menu_page( 'Pinwand', // Seitentitel 'Pinwand', // Menüeintrag 'manage_options', // Berechtigung 'message-board', // Slug 'wp_multi_add_message_board', // Callback 'dashicons-bell', // Icon 6 // Position im Menü ); } add_action('admin_menu', 'wp_multi_add_message_board_menu'); // Funktion zum Abrufen der vollständigen Nachricht function wp_multi_get_message() { if (isset($_POST['message_id'])) { global $wpdb; $table_name = $wpdb->prefix . 'message_board'; $message_id = intval($_POST['message_id']); $message = $wpdb->get_row("SELECT * FROM $table_name WHERE id = $message_id"); if ($message) { // Datum im gewünschten Format (DD-MM-JJJJ HH:MM:SS) $formatted_date = date('d-m-Y H:i:s', strtotime($message->created_at)); echo json_encode([ 'created_at' => $formatted_date, 'message' => nl2br(esc_textarea($message->message)), 'user' => get_userdata($message->user_id)->user_login ]); } } wp_die(); } add_action('wp_ajax_wp_multi_get_message', 'wp_multi_get_message'); // Funktion zum Löschen einer Nachricht function wp_multi_delete_message() { if (isset($_POST['message_id'])) { global $wpdb; $table_name = $wpdb->prefix . 'message_board'; $message_id = intval($_POST['message_id']); $wpdb->delete($table_name, array('id' => $message_id)); echo 'success'; } wp_die(); } add_action('wp_ajax_wp_multi_delete_message', 'wp_multi_delete_message'); // Funktion zum Deaktivieren der Pinwand bei der Deinstallation function wp_multi_delete_message_board_table() { global $wpdb; $table_name = $wpdb->prefix . 'message_board'; $wpdb->query("DROP TABLE IF EXISTS $table_name"); } register_deactivation_hook(__FILE__, 'wp_multi_delete_message_board_table'); // Funktion, um das Dashboard-Widget zu registrieren function wp_multi_dashboard_widget() { wp_add_dashboard_widget( 'wp_multi_pinwand_widget', // Widget-ID 'Pinwand Übersicht', // Widget-Titel 'wp_multi_dashboard_widget_content' // Callback-Funktion ); } add_action('wp_dashboard_setup', 'wp_multi_dashboard_widget'); // Callback-Funktion, die den Inhalt des Widgets erstellt function wp_multi_dashboard_widget_content() { global $wpdb; $table_name = $wpdb->prefix . 'message_board'; $messages = $wpdb->get_results("SELECT * FROM $table_name ORDER BY created_at DESC LIMIT 5"); // Zeige die neuesten 5 Nachrichten an if ($messages) { echo ''; } else { echo '

Keine neuen Nachrichten.

'; } } /* * Benutzer-Analytics */ // Funktion zur Erstellung der Datenbanktabelle für Benutzer-Analytics function wp_multi_create_analytics_table() { global $wpdb; $table_name = $wpdb->prefix . 'wp_multi_user_analytics'; // Überprüfen, ob die Tabelle bereits existiert if ($wpdb->get_var("SHOW TABLES LIKE '$table_name'") != $table_name) { // Tabelle erstellen $charset_collate = $wpdb->get_charset_collate(); $sql = "CREATE TABLE $table_name ( id mediumint(9) NOT NULL AUTO_INCREMENT, user_id bigint(20) NOT NULL, action varchar(255) NOT NULL, post_id bigint(20) DEFAULT NULL, timestamp datetime DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (id) ) $charset_collate;"; require_once(ABSPATH . 'wp-admin/includes/upgrade.php'); dbDelta($sql); } } register_activation_hook(__FILE__, 'wp_multi_create_analytics_table'); // Funktion zur Verfolgung von Benutzerinteraktionen (Kommentare und Beitragsaufrufe) function wp_multi_track_user_activity($user_id, $action, $post_id = null) { global $wpdb; $table_name = $wpdb->prefix . 'wp_multi_user_analytics'; // Wenn die Aktion ein 'view' ist, stelle sicher, dass wir die post_id korrekt setzen if ($action == 'view' && is_single()) { $post_id = get_the_ID(); } // Benutzerinteraktionen in die Datenbank speichern $wpdb->insert( $table_name, array( 'user_id' => $user_id, 'action' => $action, 'post_id' => $post_id, ) ); } // Kommentar-Verfolgung function wp_multi_comment_activity($comment_id) { $comment = get_comment($comment_id); $user_id = $comment->user_id; wp_multi_track_user_activity($user_id, 'comment', $comment->comment_post_ID); } add_action('comment_post', 'wp_multi_comment_activity'); // Beitragsaufruf-Verfolgung function wp_multi_post_view_activity() { if (is_single() && is_user_logged_in()) { $user_id = get_current_user_id(); $post_id = get_the_ID(); wp_multi_track_user_activity($user_id, 'view', $post_id); } } add_action('wp_head', 'wp_multi_post_view_activity'); // Funktion zur Anzeige der Benutzer-Analytics im Admin-Bereich function wp_multi_display_user_analytics() { global $wpdb; $table_name = $wpdb->prefix . 'wp_multi_user_analytics'; // Abfrage, um die Benutzerinteraktionen zu holen $results = wp_multi_get_analytics_data(); ?>
Logo

$row) : ?>
user_id); ?> action); ?> post_id) { $post_title = get_the_title($row->post_id); echo esc_html($post_title ? $post_title : 'Kein Titel verfügbar'); } else { echo 'Kein Beitrag'; } ?> post_id); ?> timestamp); ?>
prefix . 'wp_multi_user_analytics'; // Die letzten 7 Tage abrufen $results = $wpdb->get_results(" SELECT DATE(timestamp) AS date, action, post_id, COUNT(*) AS count, user_id, timestamp FROM $table_name WHERE timestamp >= CURDATE() - INTERVAL 7 DAY GROUP BY date, action, post_id, user_id, timestamp ORDER BY date ASC "); // Daten für das Diagramm und die Tabelle organisieren $dates = array(); $comment_counts = array(); $view_counts = array(); $post_titles = array(); foreach ($results as $result) { $dates[] = $result->date; if ($result->action == 'comment') { $comment_counts[$result->date] = $result->count; } elseif ($result->action == 'view') { $view_counts[$result->date] = $result->count; } // Hinzufügen der Post-Titel für die Anzeige if (!empty($result->post_id)) { $post_titles[$result->post_id] = get_the_title($result->post_id); } } // Sicherstellen, dass alle Daten für die letzten 7 Tage vorhanden sind $unique_dates = array_unique($dates); $all_dates = array(); $datasets = array( 'comments' => [], 'views' => [] ); for ($i = 6; $i >= 0; $i--) { $date = date('Y-m-d', strtotime("-$i day")); $all_dates[] = $date; $datasets['comments'][] = isset($comment_counts[$date]) ? $comment_counts[$date] : 0; $datasets['views'][] = isset($view_counts[$date]) ? $view_counts[$date] : 0; } // Rückgabe der Daten für das Diagramm und die Tabelle return [ 'dates' => array_reverse($all_dates), 'datasets' => [ [ 'label' => 'Kommentare', 'data' => array_reverse($datasets['comments']), 'borderColor' => 'rgba(75, 192, 192, 1)', 'borderWidth' => 1, 'fill' => false, ], [ 'label' => 'Beitragsaufrufe', 'data' => array_reverse($datasets['views']), 'borderColor' => 'rgba(153, 102, 255, 1)', 'borderWidth' => 1, 'fill' => false, ] ], 'data' => $results ]; } // Hinzufügen der Analytics-Seite unter "Benutzer" im Admin-Menü function wp_multi_add_analytics_page() { add_submenu_page( 'users.php', // Die übergeordnete Seite (Benutzer) __('Benutzer Analytics', 'wp-multi'), // Titel der Seite __('Benutzer Analytics', 'wp-multi'), // Text im Menü 'manage_options', // Berechtigungen 'wp_multi_analytics', // Menü-Slug 'wp_multi_display_user_analytics' // Die Funktion, die die Seite anzeigt ); } add_action('admin_menu', 'wp_multi_add_analytics_page'); /* * User Daten Filtern (URL, Mail-Adresse usw...) */ // Admin-Einstellungen registrieren function wp_multi_register_comment_filter_settings() { add_option('wp_multi_filter_phone', '1'); 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 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 } add_action('admin_init', 'wp_multi_register_comment_filter_settings'); // 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'); // Admin-Seite für Kommentar-Filter function wp_multi_comment_filter_settings_page() { ?>

Kommentar-Filter Einstellungen

>
>
>
>
>
prefix . 'blocked_users'; $charset_collate = $wpdb->get_charset_collate(); $sql = "CREATE TABLE $table_name ( id mediumint(9) NOT NULL AUTO_INCREMENT, username varchar(100) DEFAULT '' NOT NULL, email varchar(100) DEFAULT '' NOT NULL, ip_address varchar(45) DEFAULT '' NOT NULL, PRIMARY KEY (id) ) $charset_collate;"; require_once( ABSPATH . 'wp-admin/includes/upgrade.php' ); dbDelta( $sql ); } function wp_multi_activate() { wp_multi_create_blocked_users_table(); } register_activation_hook( __FILE__, 'wp_multi_activate' ); // Funktion zum Sperren von Benutzernamen, E-Mail-Adressen und IP-Adressen function wp_multi_block_user($username = '', $email = '', $ip_address = '') { global $wpdb; // Sicherstellen, dass mindestens eines der Felder ausgefüllt wurde if (empty($username) && empty($email) && empty($ip_address)) { return; } // Eintrag in die Datenbank einfügen $wpdb->insert( $wpdb->prefix . 'blocked_users', [ 'username' => $username, 'email' => $email, 'ip_address' => $ip_address ] ); } // Funktion zum Löschen eines gesperrten Benutzers function wp_multi_delete_blocked_user($id) { global $wpdb; $wpdb->delete($wpdb->prefix . 'blocked_users', ['id' => $id]); } // Admin-Seite für die Verwaltung der gesperrten Benutzer function wp_multi_blocked_users_page() { global $wpdb; // Benutzer sperren if (isset($_POST['block_username']) || isset($_POST['block_email']) || isset($_POST['block_ip'])) { $username = sanitize_text_field($_POST['block_username']); $email = sanitize_email($_POST['block_email']); $ip_address = sanitize_text_field($_POST['block_ip']); wp_multi_block_user($username, $email, $ip_address); echo '

Benutzer wurde gesperrt!

'; } // Suche $search_query = ''; if (isset($_GET['search'])) { $search_query = sanitize_text_field($_GET['search']); } // Abfrage der gesperrten Benutzer $blocked_users = $wpdb->get_results($wpdb->prepare( "SELECT * FROM {$wpdb->prefix}blocked_users WHERE username LIKE %s OR email LIKE %s OR ip_address LIKE %s", '%' . $search_query . '%', '%' . $search_query . '%', '%' . $search_query . '%' )); ?>

Benutzer sperren

Benutzernamen sperren

E-Mail-Adresse sperren

IP-Adresse sperren



Gesperrte Benutzer

Benutzername E-Mail-Adresse IP-Adresse Aktionen
username); ?> email); ?> ip_address); ?> Löschen
Keine gesperrten Benutzer gefunden.
0) { wp_multi_delete_blocked_user($user_id); // Redirect zur Admin-Seite nach dem Löschen wp_redirect(admin_url('admin.php?page=wp-multi-blocked-users')); exit; } } // Kommentar auf gesperrte Benutzer überprüfen function wp_multi_check_blocked_user($commentdata) { global $wpdb; $username = isset($commentdata['comment_author']) ? $commentdata['comment_author'] : ''; $email = isset($commentdata['comment_author_email']) ? $commentdata['comment_author_email'] : ''; $ip_address = isset($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : ''; $blocked_user = $wpdb->get_row($wpdb->prepare( "SELECT * FROM {$wpdb->prefix}blocked_users WHERE username = %s OR email = %s OR ip_address = %s", $username, $email, $ip_address )); if ($blocked_user) { wp_die('Ihr Kommentar konnte nicht abgesendet werden, da Sie gesperrt sind. Bitte wenden Sie sich an den Support.'); } return $commentdata; } add_filter('preprocess_comment', 'wp_multi_check_blocked_user'); /* * custom shortcodes */ // Funktion, um die Datenbanktabelle für Shortcodes zu erstellen function wp_multi_create_shortcodes_table() { global $wpdb; $table_name = $wpdb->prefix . 'wp_multi_shortcodes'; // Name der Tabelle mit Präfix $charset_collate = $wpdb->get_charset_collate(); // SQL-Abfrage zum Erstellen der Tabelle $sql = "CREATE TABLE $table_name ( id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT, shortcode_name varchar(255) NOT NULL, shortcode_content text NOT NULL, PRIMARY KEY (id), UNIQUE KEY shortcode_name (shortcode_name) ) $charset_collate;"; // Datenbank abfragen und ausführen require_once( ABSPATH . 'wp-admin/includes/upgrade.php' ); dbDelta( $sql ); } register_activation_hook( __FILE__, 'wp_multi_create_shortcodes_table' ); // Menü zum Verwalten von Shortcodes im Admin-Bereich hinzufügen function wp_multi_add_shortcode_menu() { add_menu_page( 'Custom Shortcodes', // Seitentitel 'Custom Shortcodes', // Menü-Titel 'manage_options', // Berechtigungen 'wp_multi_shortcodes', // Menü-Slug 'wp_multi_shortcode_page', // Callback-Funktion zum Anzeigen der Seite 'dashicons-editor-code', // Symbol 6 // Position im Menü ); } add_action('admin_menu', 'wp_multi_add_shortcode_menu'); // Callback-Funktion für das Shortcode-Verwaltungs-Interface function wp_multi_shortcode_page() { global $wpdb; $message = ''; // Variable für benutzerdefinierte Nachrichten // Verarbeite das Speichern von Shortcodes if (isset($_POST['wp_multi_shortcode_name']) && isset($_POST['wp_multi_shortcode_content'])) { // Hole die übermittelten Shortcodes $name = sanitize_text_field($_POST['wp_multi_shortcode_name']); $content = sanitize_textarea_field($_POST['wp_multi_shortcode_content']); // Prüfen, ob der Shortcode bereits existiert $existing_shortcode = $wpdb->get_var($wpdb->prepare("SELECT id FROM {$wpdb->prefix}wp_multi_shortcodes WHERE shortcode_name = %s", $name)); if ($existing_shortcode) { // Aktualisiere den Shortcode, falls er bereits existiert $wpdb->update( $wpdb->prefix . 'wp_multi_shortcodes', ['shortcode_content' => $content], ['shortcode_name' => $name] ); $message = 'Shortcode wurde aktualisiert!'; } else { // Andernfalls einen neuen Shortcode einfügen $wpdb->insert( $wpdb->prefix . 'wp_multi_shortcodes', [ 'shortcode_name' => $name, 'shortcode_content' => $content ] ); $message = 'Shortcode wurde hinzugefügt!'; } } // Shortcode löschen if (isset($_GET['delete_shortcode']) && !empty($_GET['delete_shortcode'])) { $delete_id = intval($_GET['delete_shortcode']); $wpdb->delete( $wpdb->prefix . 'wp_multi_shortcodes', ['id' => $delete_id] ); $message = 'Shortcode wurde gelöscht!'; } // Holen der gespeicherten Shortcodes aus der Datenbank $custom_shortcodes = $wpdb->get_results("SELECT * FROM {$wpdb->prefix}wp_multi_shortcodes"); // HTML für die Seite ?>

Custom Shortcodes verwalten

Verfügbare Shortcodes

get_results("SELECT * FROM {$wpdb->prefix}wp_multi_shortcodes"); // Wenn keine benutzerdefinierten Shortcodes vorhanden sind, abbrechen if (empty($custom_shortcodes)) { return; } // Definiere die Shortcodes in WordPress foreach ($custom_shortcodes as $shortcode) { add_shortcode($shortcode->shortcode_name, function() use ($shortcode) { return $shortcode->shortcode_content; }); } } add_action('init', 'wp_multi_register_custom_shortcodes'); // Inhalt der Meta-Box anzeigen function wp_multi_render_shortcode_meta_box($post) { global $wpdb; // Alle gespeicherten Shortcodes aus der Datenbank holen $shortcodes = $wpdb->get_results("SELECT shortcode_name FROM {$wpdb->prefix}wp_multi_shortcodes"); if (!empty($shortcodes)) { echo ''; echo ''; } else { echo '

Keine Shortcodes vorhanden.

'; } } // JavaScript für Meta-Box einbinden function wp_multi_enqueue_admin_scripts($hook) { if ('post.php' === $hook || 'post-new.php' === $hook) { wp_enqueue_script('wp-multi-shortcode', plugin_dir_url(__FILE__) . 'js/editor-shortcode.js', array('jquery'), null, true); } } add_action('admin_enqueue_scripts', 'wp_multi_enqueue_admin_scripts'); // Funktion zum Registrieren des TinyMCE Plugins function wp_multi_add_shortcode_button() { add_filter('mce_external_plugins', 'wp_multi_register_tinymce_plugin'); add_filter('mce_buttons', 'wp_multi_add_tinymce_button'); } add_action('admin_head', 'wp_multi_add_shortcode_button'); // Plugin für TinyMCE registrieren (angepasster Pfad zum JS-File) function wp_multi_register_tinymce_plugin($plugins) { $plugins['wp_multi_shortcodes'] = plugin_dir_url(__FILE__) . 'js/tinymce-shortcodes.js'; return $plugins; } // Button zur TinyMCE Toolbar hinzufügen function wp_multi_add_tinymce_button($buttons) { array_push($buttons, 'wp_multi_shortcodes'); return $buttons; } // Shortcodes aus der Datenbank für das JavaScript bereitstellen function wp_multi_localize_shortcodes() { global $wpdb; $shortcodes = $wpdb->get_results("SELECT shortcode_name FROM {$wpdb->prefix}wp_multi_shortcodes", ARRAY_A); // Shortcodes als JSON an das JS-File übergeben wp_enqueue_script('wp-multi-tinymce', plugin_dir_url(__FILE__) . 'js/tinymce-shortcodes.js', array('jquery'), null, true); wp_localize_script('wp-multi-tinymce', 'wpMultiShortcodes', $shortcodes); } add_action('admin_enqueue_scripts', 'wp_multi_localize_shortcodes'); /* * Update Admin-Dashboard widget */ // Widget zum Admin-Dashboard hinzufügen function wp_multi_update_dashboard_widget() { wp_add_dashboard_widget( 'wp_multi_update_widget', // Widget-ID 'Verfügbare Updates für WP Multi', // Widget-Titel 'wp_multi_update_dashboard_widget_content' // Callback-Funktion ); } 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 $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 ) )); if (is_wp_error($response)) { echo 'Fehler beim Abrufen der Versionsinformationen von Gitea.'; return; } // 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 if (version_compare($installed_version, $latest_version, '>=')) { // Wenn die installierte Version gleich oder neuer ist als die Version in Gitea echo '

Ihre Version ist aktuell. Version ' . $installed_version . ' ist die neueste Version.

'; } else { // Wenn die installierte Version älter ist als die Version in Gitea echo '

Es ist eine neue Version von WP Multi verfügbar! Version ' . $latest_version . ' ist jetzt verfügbar.

'; echo '

Aktuell installierte Version: ' . $installed_version . '

'; echo '

Neue Version auf Gitea: ' . $latest_version . '

'; echo '

Update herunterladen

'; } } else { echo 'Fehler beim Abrufen der neuesten Version von Gitea.'; } } /* * Notify Seite Discord & Telegram */ // Übergeordnetes Menü "Notify" erstellen function wp_multi_menu() { // Menüpunkt für "Notify" add_menu_page( 'Notify', 'Notify', 'manage_options', 'wp-multi-notify', 'wp_multi_notify_page', 'dashicons-bell', 100 ); // Untermenüpunkt für DC-Notify add_submenu_page( 'wp-multi-notify', 'DC-Notify Einstellungen', 'DC-Notify', 'manage_options', 'wp-multi', 'wp_multi_settings_page' ); // Untermenüpunkt für TG-Notify add_submenu_page( 'wp-multi-notify', 'TG-Notify Einstellungen', 'TG-Notify', 'manage_options', 'tg-notify', 'tg_notify_page' ); } add_action('admin_menu', 'wp_multi_menu'); // Callback-Funktion für die Hauptseite Notify function wp_multi_notify_page() { ?>

M_Viper Logo

M_Viper Logo

M_Viper Logo

.wp-multi-admin-page { background-color: #f9f9f9; padding: 20px; border-radius: 8px; } .wp-multi-banner { background-color: #0073aa; /* Blaues Banner */ padding: 10px; text-align: center; margin-bottom: 20px; } .wp-multi-logo-image { width: 200px; height: auto; display: inline-block; } .wp-multi-settings-header h2 { color: #333; font-size: 24px; margin-bottom: 10px; } .wp-multi-settings-header ol { margin-left: 20px; } .wp-multi-settings-header ol li { margin-bottom: 8px; } '; } add_action('admin_head', 'wp_multi_admin_styles'); // Einstellungsseite für Discord Webhook function wp_multi_settings_page() { ?>
Discord Webhook URL

Geben Sie die Webhook-URL für Discord ein, um Benachrichtigungen zu senden.

Bot Name

Geben Sie den Namen des Bots ein, der in Discord angezeigt werden soll.

Discord Nachricht (Vorlage)

Passen Sie die Nachricht an, die an Discord gesendet wird. Verwenden Sie Platzhalter wie {post_title}, {post_author}, und {post_url}.

Discord Benutzerrollen ID (für Ping)

Geben Sie die ID der Discord-Benutzerrolle ein, die gepingt werden soll (z. B. @everyone).

Discord Avatar-URL

Geben Sie die URL des Avatar-Bildes ein, das in den Discord-Nachrichten angezeigt werden soll.

Footer Text (Custom Text 2)

Geben Sie den benutzerdefinierten Text ein, der am Ende der Nachricht angezeigt wird (z. B. "Powered by WP Multi"). Sie können auch Platzhalter wie {post_title}, {post_author} und {post_url} verwenden.

post_author)); // Textvorschau (die ersten 5 Zeilen des Beitrags) $content = get_post_field('post_content', $ID); $excerpt = wp_trim_words($content, 60, '...'); // Benutzerrolle anpingen (optional) $role_id = get_option('wp_multi_discord_role_id'); $mention_role = (!empty($role_id) && is_numeric($role_id)) ? "<@&" . esc_attr($role_id) . ">" : ''; // Footer Text (Custom Text 2) aus den Optionen $footer_text = get_option('wp_multi_discord_footer_text'); $footer = !empty($footer_text) ? str_replace( ['{post_title}', '{post_author}', '{post_url}'], [$post_title, $post_author, $post_url], $footer_text ) : ''; // Nachrichtenvorlage zusammenstellen $message_template = get_option('wp_multi_discord_message_template', 'Beitrag "{post_title}" von {post_author} | Link: {post_url}'); $message = str_replace( ['{post_title}', '{post_author}', '{post_url}'], [$post_title, $post_author, $post_url], $message_template ); // Nachricht aufbauen $message .= "\n\n" . __('') . "\n" . $excerpt; // Fügt eine zusätzliche Zeile Abstand ein, bevor der Footer-Text erscheint $message .= "\n\n" . $footer; // Discord Webhook Daten vorbereiten $data = json_encode([ 'username' => $bot_name, 'avatar_url' => $avatar_url, 'content' => $mention_role . "\n" . $message ]); // Nachricht an Discord senden $response = wp_remote_post($webhook_url, [ 'method' => 'POST', 'body' => $data, 'headers' => [ 'Content-Type' => 'application/json' ] ]); // Prüfen, ob die Nachricht erfolgreich gesendet wurde if (!is_wp_error($response)) { // Erhöhe den Discord-Nachrichtenzähler wp_multi_increment_discord_message_count(); } } // Funktion zum Erhöhen des Discord-Nachrichtenzählers function wp_multi_increment_discord_message_count() { $current_count = get_option('wp_multi_discord_message_count', 0); update_option('wp_multi_discord_message_count', $current_count + 1); } add_action('publish_post', 'wp_multi_send_discord_notification', 10, 2); // Funktion, um die Checkbox in der Sidebar des Beitrag Editors hinzuzufügen function wp_multi_add_checkbox_to_sidebar() { global $post; // Nonce-Feld für Sicherheitsüberprüfung wp_nonce_field('wp_multi_checkbox_nonce', 'wp_multi_checkbox_nonce_field'); // Immer aktivieren (setze den Wert der Checkbox immer auf '1') $value = '1'; // Checkbox im Sidebar Bereich (Veröffentlichen) anzeigen ?>
json_encode($message), 'headers' => ['Content-Type' => 'application/json'], 'method' => 'POST' ]); if (is_wp_error($response)) { $error_message = $response->get_error_message(); error_log('Discord Webhook Fehler: ' . $error_message); } else { error_log('Webhook gesendet: ' . print_r($response, true)); } /* * Telegram Notify */ // Admin-Seiten Callback function tg_notify_page() { ?>

'; } function tg_notify_bot_token_callback() { $value = get_option('tg_notify_bot_token', ''); echo ''; } function tg_notify_chat_ids_callback() { $value = get_option('tg_notify_chat_ids', ''); echo ''; echo '

Kanal ohne Thema: -1001234567890

'; echo '

Kanal mit Thema: -1001234567890_123

'; } function tg_notify_custom_message_callback() { $value = get_option('tg_notify_custom_message', ''); echo ''; echo '

Verfügbare Variablen: {title}, {author}, {link}

'; } // Checkbox beim Beitrag hinzufügen function tg_notify_add_meta_box() { add_meta_box( 'tg_notify_meta_box', __('Telegram Benachrichtigung', 'wp-stat-notice'), 'tg_notify_meta_box_callback', 'post', 'side', 'high' ); } add_action('add_meta_boxes', 'tg_notify_add_meta_box'); function tg_notify_meta_box_callback($post) { $value = get_post_meta($post->ID, '_tg_notify_send', true); // Standardmäßig auf 1 setzen, wenn der Beitrag neu ist if (empty($value) && get_post_status($post->ID) !== 'publish') { $value = 1; } wp_nonce_field('tg_notify_meta_box', 'tg_notify_meta_box_nonce'); echo ''; } function tg_notify_save_post($post_id) { // Sicherheitsprüfungen if (!isset($_POST['tg_notify_meta_box_nonce']) || !wp_verify_nonce($_POST['tg_notify_meta_box_nonce'], 'tg_notify_meta_box')) return; if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return; if (wp_is_post_revision($post_id) || wp_is_post_autosave($post_id)) return; if (!current_user_can('edit_post', $post_id)) return; // Prüfen, ob der Beitrag wirklich veröffentlicht wurde if (get_post_status($post_id) !== 'publish') return; // Prüfen, ob die Nachricht bereits gesendet wurde $already_sent = get_post_meta($post_id, '_tg_notify_sent', true); if ($already_sent) return; $send_notification = isset($_POST['tg_notify_send']) ? 1 : 0; update_post_meta($post_id, '_tg_notify_send', $send_notification); if ($send_notification) { tg_notify_send_telegram_message($post_id); update_post_meta($post_id, '_tg_notify_sent', 1); } } add_action('save_post', 'tg_notify_save_post'); function tg_notify_send_telegram_message($post_id) { $bot_token = get_option('tg_notify_bot_token'); $chat_ids = explode("\n", get_option('tg_notify_chat_ids')); $message_template = get_option('tg_notify_custom_message'); $post = get_post($post_id); // Überprüfen, ob der Beitrag von einem Gast-Author stammt $author_name = get_the_author_meta('display_name', $post->post_author); if (empty($author_name)) { // Falls kein Name vorhanden ist (Gast-Author), den Gast-Namen verwenden oder einen Platzhalter setzen $author_name = 'Gast-Author'; } // Nachricht formatieren $message = str_replace( ['{title}', '{author}', '{link}'], [$post->post_title, $author_name, get_permalink($post_id)], $message_template ); foreach ($chat_ids as $chat_id) { $chat_id = trim($chat_id); if (!empty($chat_id)) { // Überprüfen, ob die ID das Thema enthält (Format: -1001234567890_123) if (strpos($chat_id, '_') !== false) { // Kanal-ID und Themen-ID trennen list($channel_id, $topic_id) = explode('_', $chat_id); $chat_id = $channel_id; // Telegram API-Anfrage senden $url = "https://api.telegram.org/bot$bot_token/sendMessage"; $args = [ 'body' => json_encode([ 'chat_id' => $chat_id, 'text' => $message, 'parse_mode' => 'HTML', 'reply_to_message_id' => $topic_id ]), 'headers' => ['Content-Type' => 'application/json'], 'method' => 'POST', ]; // API-Request senden und Fehlerprotokollierung $response = wp_remote_post($url, $args); if (is_wp_error($response)) { $error_message = $response->get_error_message(); error_log("Telegram Fehler: $error_message"); } else { // Erhöhe den Telegram-Nachrichtenzähler tg_notify_increment_telegram_message_count(); error_log('Telegram Antwort: ' . print_r($response, true)); } } else { // Normaler Kanal ohne Thema $url = "https://api.telegram.org/bot$bot_token/sendMessage"; $args = [ 'body' => json_encode([ 'chat_id' => $chat_id, 'text' => $message, 'parse_mode' => 'HTML' ]), 'headers' => ['Content-Type' => 'application/json'], 'method' => 'POST', ]; // API-Request senden und Fehlerprotokollierung $response = wp_remote_post($url, $args); if (is_wp_error($response)) { $error_message = $response->get_error_message(); error_log("Telegram Fehler: $error_message"); } else { // Erhöhe den Telegram-Nachrichtenzähler tg_notify_increment_telegram_message_count(); error_log('Telegram Antwort: ' . print_r($response, true)); } } } } } function tg_notify_increment_telegram_message_count() { $current_count = get_option('wp_multi_telegram_message_count', 0); update_option('wp_multi_telegram_message_count', $current_count + 1); } /* * Admin-Dashboard Nachrichten sende Zähler */ // Admin Dashboard Widget für Telegram und Discord Nachrichten Zähler function wp_multi_add_dashboard_widgets() { wp_add_dashboard_widget( 'wp_multi_dashboard_widget', 'Telegram & Discord Nachrichten Zähler', 'wp_multi_display_dashboard_widget' ); } add_action('wp_dashboard_setup', 'wp_multi_add_dashboard_widgets'); // Callback-Funktion, die den Inhalt des Widgets anzeigt function wp_multi_display_dashboard_widget() { // Telegram-Nachrichtenzähler $telegram_message_count = get_option('wp_multi_telegram_message_count', 0); // Discord-Nachrichtenzähler $discord_message_count = get_option('wp_multi_discord_message_count', 0); // Ausgabe der Zähler echo '

Telegram Nachrichten gesendet: ' . esc_html($telegram_message_count) . '

'; echo '

Discord Nachrichten gesendet: ' . esc_html($discord_message_count) . '

'; } /* * Gast Autoren */ // Gast-Autor Eingabefeld in der Sidebar im Admin-Bereich hinzufügen function wp_multi_add_guest_author_field() { add_meta_box( 'guest_author_meta_box', __('Gast-Autor', 'wp-multi'), 'wp_multi_guest_author_field', ['post', 'page', 'dein_custom_post_type'], 'side', 'high' ); } add_action('add_meta_boxes', 'wp_multi_add_guest_author_field'); // Callback-Funktion, die das Eingabefeld anzeigt function wp_multi_guest_author_field($post) { // Die Metadaten des Beitrags laden (ob ein Gast-Autor gesetzt ist) $guest_author = get_post_meta($post->ID, '_guest_author', true); ?> ID, '_guest_author', true); if (!empty($guest_author)) { // Ersetze den Standard-Autor mit dem Gast-Autor $author_name = $guest_author; } } } return $author_name; } add_filter('the_author', 'wp_multi_display_guest_author'); // Anzeige des Gast-Autors in der Beitragsübersicht (Backend) function wp_multi_add_guest_author_column($columns) { if (isset($columns['author'])) { $columns['guest_author'] = __('Gast-Autor', 'wp-multi'); } return $columns; } add_filter('manage_posts_columns', 'wp_multi_add_guest_author_column'); // Inhalt der Gast-Autor-Spalte function wp_multi_display_guest_author_column($column_name, $post_id) { if ($column_name == 'guest_author') { $guest_author = get_post_meta($post_id, '_guest_author', true); if (!empty($guest_author)) { echo esc_html($guest_author); } else { echo __('Kein Gast-Autor', 'wp-multi'); } } } add_action('manage_posts_custom_column', 'wp_multi_display_guest_author_column', 10, 2); // Admin-Menü für die Gast-Autor-Übersicht unter Benutzer hinzufügen function wp_multi_add_guest_author_page() { add_submenu_page( 'users.php', __('Gast-Autor Übersicht', 'wp-multi'), __('Gast-Autoren', 'wp-multi'), 'manage_options', 'guest_author_overview', 'wp_multi_guest_author_overview_page' ); } add_action('admin_menu', 'wp_multi_add_guest_author_page'); // Callback-Funktion für die Gast-Autor-Übersicht function wp_multi_guest_author_overview_page() { ?>

get_results("SELECT DISTINCT pm.meta_value AS guest_author FROM {$wpdb->posts} p LEFT JOIN {$wpdb->postmeta} pm ON p.ID = pm.post_id WHERE pm.meta_key = '_guest_author' AND p.post_status = 'publish' ORDER BY guest_author ASC"); // Alle Gast-Autoren anzeigen if ($guest_authors) { foreach ($guest_authors as $author) { // Anzahl der Beiträge für den Gast-Autor zählen $author_posts = $wpdb->get_var($wpdb->prepare("SELECT COUNT(*) FROM {$wpdb->posts} p LEFT JOIN {$wpdb->postmeta} pm ON p.ID = pm.post_id WHERE pm.meta_key = '_guest_author' AND pm.meta_value = %s AND p.post_status = 'publish'", $author->guest_author)); ?> '; } ?>
guest_author); ?>
' . __('Keine Gast-Autoren gefunden.', 'wp-multi') . '

Custom Text verwalten

/>

ID, 'guest_author', true); $author_name = !empty($guest_author_name) ? $guest_author_name : get_the_author(); // Holen der benutzerdefinierten Texte aus den Einstellungen $custom_texts = get_option('wp_multi_custom_texts', ''); $second_custom_texts = get_option('wp_multi_second_custom_text', ''); // Sicherstellen, dass wir eine Liste von Texten haben $custom_texts_array = array_filter(array_map('trim', explode("\n", $custom_texts))); $second_custom_texts_array = array_filter(array_map('trim', explode("\n", $second_custom_texts))); // Die aktuelle Auswahl des Custom Texts aus den Post-Metadaten $selected_custom_text = get_post_meta($post->ID, '_custom_text_choice', true); $selected_second_custom_text = get_post_meta($post->ID, '_second_custom_text_choice', true); // Falls keine Texte verfügbar sind, abbrechen if (empty($custom_texts_array) && empty($second_custom_texts_array)) { return $content; } // Die Ausgabe-Box erstellen $output = '
'; // Anzeige des Autors und des zweiten benutzerdefinierten Texts in einer Zeile $output .= '

' . __('Autor:', 'wp-multi') . ' ' . esc_html($author_name); if ($selected_second_custom_text !== '' && isset($second_custom_texts_array[$selected_second_custom_text])) { $output .= ' | ' . esc_html($second_custom_texts_array[$selected_second_custom_text]); // Trennzeichen " | " } $output .= '

'; // Anzeige des ersten benutzerdefinierten Texts (unterer Bereich) if ($selected_custom_text !== '' && isset($custom_texts_array[$selected_custom_text])) { $output .= '

' . esc_html($custom_texts_array[$selected_custom_text]) . '

'; } $output .= '
'; return $content . $output; } return $content; } add_filter('the_content', 'wp_multi_custom_text_display'); // Funktion zum Hinzufügen der Meta-Box für beide Custom Texts function wp_multi_add_custom_text_fields($post) { // Holen der benutzerdefinierten Texte aus den Einstellungen $custom_texts = get_option('wp_multi_custom_texts'); $custom_texts_array = explode("\n", $custom_texts); // Holen des zweiten benutzerdefinierten Textes aus den Einstellungen $second_custom_text = get_option('wp_multi_second_custom_text'); $second_custom_text_array = explode("\n", $second_custom_text); // Die aktuelle Auswahl des Custom Texts $selected_custom_text = get_post_meta($post->ID, '_custom_text_choice', true); $selected_second_custom_text = get_post_meta($post->ID, '_second_custom_text_choice', true); ?> window.open("' . esc_url($page['url']) . '", "_blank");'; } // Interne Seite anzeigen else if (isset($page['slug'])) { echo '

' . esc_html($page['title']) . '

'; echo '

' . __('Dies ist eine benutzerdefinierte Seite im Admin-Bereich.', 'wp-stat-notice') . '

'; } break; } } } } // Funktion zum Hinzufügen neuer benutzerdefinierter Seiten über ein Admin-Formular function wp_stat_notice_add_custom_page_form() { // Alle Dashicons laden $dashicons = [ 'dashicons-admin-links', 'dashicons-admin-site', 'dashicons-admin-home', 'dashicons-admin-plugins', 'dashicons-admin-users', 'dashicons-analytics', 'dashicons-archive', 'dashicons-book', 'dashicons-calendar', 'dashicons-camera', 'dashicons-cart', 'dashicons-cloud', 'dashicons-clipboard', 'dashicons-clock', 'dashicons-cloud-upload', 'dashicons-email', 'dashicons-heart', 'dashicons-laptop', 'dashicons-lock', 'dashicons-phone', 'dashicons-rss', 'dashicons-search', 'dashicons-settings', 'dashicons-share', 'dashicons-tag', 'dashicons-thumbs-up', 'dashicons-welcome-learn-more', 'dashicons-welcome-write-blog' ]; ?>


$title, 'url' => $url, 'slug' => $slug, 'icon' => $icon, ]; // Option speichern update_option('wp_stat_notice_custom_pages', $custom_pages); // Menü neu hinzufügen wp_stat_notice_add_custom_pages(); // Bestätigung echo '

' . __('Benutzerdefinierte Seite wurde hinzugefügt!', 'wp-stat-notice') . '

'; } // Verwaltung der benutzerdefinierten Seiten $custom_pages = get_option('wp_stat_notice_custom_pages', []); if ($custom_pages) { echo '

' . __('Verwaltung der benutzerdefinierten Seiten', 'wp-stat-notice') . '

'; echo ''; echo ''; echo ''; foreach ($custom_pages as $index => $page) { echo ''; echo ''; echo ''; echo ''; echo ''; } echo ''; echo '
' . __('Titel', 'wp-stat-notice') . '' . __('URL', 'wp-stat-notice') . '' . __('Aktionen', 'wp-stat-notice') . '
' . esc_html($page['title']) . '' . esc_html($page['url']) . ''; echo '' . __('Bearbeiten', 'wp-stat-notice') . ' | '; echo '' . __('Löschen', 'wp-stat-notice') . ''; echo '
'; } // Bearbeiten und Löschen von Seiten if (isset($_GET['edit'])) { $edit_index = (int) $_GET['edit']; $edit_page = $custom_pages[$edit_index]; // Formular zum Bearbeiten der Seite echo '

' . __('Seite bearbeiten', 'wp-stat-notice') . '

'; ?>

' . __('Seite erfolgreich bearbeitet!', 'wp-stat-notice') . '

'; } } // Löschen der Seite if (isset($_GET['delete'])) { $delete_index = (int) $_GET['delete']; unset($custom_pages[$delete_index]); $custom_pages = array_values($custom_pages); update_option('wp_stat_notice_custom_pages', $custom_pages); echo '

' . __('Seite wurde gelöscht.', 'wp-stat-notice') . '

'; } ?> prefix . 'reported_posts'; $charset_collate = $wpdb->get_charset_collate(); // SQL für die Tabelle $sql = "CREATE TABLE IF NOT EXISTS $table_name ( id BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT, post_id BIGINT(20) NOT NULL, report_date DATETIME DEFAULT CURRENT_TIMESTAMP, reason TEXT NOT NULL, name VARCHAR(255) NOT NULL, status VARCHAR(20) DEFAULT 'reported', user_id BIGINT(20) UNSIGNED DEFAULT NULL, PRIMARY KEY (id), KEY post_id (post_id), KEY user_id (user_id) ) $charset_collate;"; // Zuerst prüfen, ob die Spalte `name` vorhanden ist $columns = $wpdb->get_results("SHOW COLUMNS FROM $table_name"); $column_names = array_map(function($column) { return $column->Field; }, $columns); // Wenn die Spalte 'name' nicht vorhanden ist, wird sie hinzugefügt if (!in_array('name', $column_names)) { $wpdb->query("ALTER TABLE $table_name ADD COLUMN `name` VARCHAR(255) NOT NULL"); } // Tabelle erstellen oder aktualisieren require_once(ABSPATH . 'wp-admin/includes/upgrade.php'); dbDelta($sql); } register_activation_hook(__FILE__, 'wp_stat_notice_create_reported_posts_table'); // Shortcode für den "Beitrag melden"-Button function wp_stat_notice_report_button($atts) { global $post; if (!is_user_logged_in()) return ''; $atts = shortcode_atts(array('post_id' => $post->ID), $atts, 'report_button'); $nonce = wp_create_nonce('report_post_nonce'); // Report-Button & Eingabefelder für Name und Grund ob_start(); ?> prefix . 'reported_posts'; // Abfrage, um die letzten 10 gemeldeten Beiträge zu holen $reports = $wpdb->get_results( "SELECT * FROM $table_name ORDER BY report_date DESC LIMIT 10" ); if (empty($reports)) { echo '

Es gibt keine gemeldeten Beiträge.

'; return; } // Tabelle mit den letzten 10 gemeldeten Beiträgen anzeigen echo ''; echo ''; foreach ($reports as $report) { $post = get_post($report->post_id); echo ''; echo ''; echo ''; echo ''; echo ''; } echo '
BeitragDatumGrund
' . esc_html($post->post_title) . '' . esc_html($report->report_date) . '' . esc_html($report->reason) . '
'; } // AJAX-Handler zum Senden eines Reports function wp_stat_notice_handle_report() { check_ajax_referer('report_post_nonce', 'nonce'); if (!isset($_POST['post_id'], $_POST['reason'], $_POST['name']) || !is_user_logged_in()) { wp_send_json_error(array('message' => 'Ungültige Anfrage.')); return; } global $wpdb; $table_name = $wpdb->prefix . 'reported_posts'; $post_id = intval($_POST['post_id']); $reason = sanitize_textarea_field($_POST['reason']); $name = sanitize_text_field($_POST['name']); $user_id = get_current_user_id(); // Versuche den Eintrag in die Datenbank zu schreiben $result = $wpdb->insert( $table_name, array( 'post_id' => $post_id, 'reason' => $reason, 'name' => $name, 'status' => 'reported', 'user_id' => $user_id ), array('%d', '%s', '%s', '%s', '%d') ); if ($result === false) { error_log("Datenbankfehler: " . $wpdb->last_error); // WP Debug Log wp_send_json_error(array('message' => 'Datenbankfehler: ' . $wpdb->last_error)); } else { wp_send_json_success(array('message' => 'Bericht erfolgreich gesendet.')); } } add_action('wp_ajax_report_post', 'wp_stat_notice_handle_report'); // JavaScript in den Footer einfügen function wp_stat_notice_inline_js() { ?> prefix . 'reported_posts'; $reports = $wpdb->get_results("SELECT * FROM $table_name ORDER BY report_date DESC"); ?>

post_id); ?>
Beitrag Datum Name Grund Status Aktionen
post_title); ?> report_date); ?> name); ?> reason); ?> status); ?> Report Löschen | Unpublish | Beitrag Löschen
delete($wpdb->prefix . 'reported_posts', array('id' => intval($_GET['delete_report']))); } elseif (isset($_GET['unpublish_report'])) { $wpdb->update($wpdb->prefix . 'reported_posts', array('status' => 'unpublished'), array('id' => intval($_GET['unpublish_report']))); } elseif (isset($_GET['delete_post'])) { wp_delete_post(intval($_GET['delete_post']), true); } } add_action('admin_init', 'wp_stat_notice_handle_report_actions'); // Menüpunkt im Admin-Bereich hinzufügen function wp_stat_notice_add_reported_posts_menu() { add_menu_page( 'Gemeldete Beiträge', 'Gemeldete Beiträge', 'manage_options', 'reported-posts', 'wp_stat_notice_reported_posts_page', 'dashicons-warning', 25 ); } add_action('admin_menu', 'wp_stat_notice_add_reported_posts_menu'); /* * Gast Lesezeichen */ // Funktion zum Erstellen des benutzerdefinierten Post-Typs für Lesezeichen function statistik_manager_create_bookmark_post_type() { register_post_type('bookmark', array( 'labels' => array( 'name' => __('Lesezeichen', 'statistik-manager'), 'singular_name' => __('Lesezeichen', 'statistik-manager') ), 'public' => false, // Privat, nur für Backend 'show_ui' => false, // Nicht im Backend anzeigen 'show_in_menu' => false, // Nicht im Menü anzeigen 'supports' => array('title', 'custom-fields') ) ); } add_action('init', 'statistik_manager_create_bookmark_post_type'); // Funktion zum Speichern eines Lesezeichens für Gäste function statistik_manager_save_bookmark($post_id) { if (isset($_COOKIE['guest_token'])) { update_post_meta($post_id, '_guest_token', $_COOKIE['guest_token']); } } // Funktion zum Abrufen der Lesezeichen eines Gastes function statistik_manager_get_guest_bookmarks() { $guest_token = isset($_COOKIE['guest_token']) ? $_COOKIE['guest_token'] : null; if (!$guest_token) { // Wenn der Gast noch kein Token hat, erstellen und speichern $guest_token = wp_generate_uuid4(); // Ein zufälliger UUID-Token setcookie('guest_token', $guest_token, time() + 3600 * 24 * 30, COOKIEPATH, COOKIE_DOMAIN); // Cookie für 30 Tage setzen } // Abfrage der Lesezeichen für den aktuellen Gast $args = array( 'post_type' => 'bookmark', 'meta_key' => '_guest_token', 'meta_value' => $guest_token, 'posts_per_page' => -1, 'post_status' => 'publish' ); $bookmarks_query = new WP_Query($args); return $bookmarks_query->posts; } // Funktion zum Löschen eines Lesezeichens (nur für den aktuellen Gast) function statistik_manager_delete_bookmark() { if (isset($_POST['bookmark_id']) && isset($_COOKIE['guest_token'])) { $bookmark_id = intval($_POST['bookmark_id']); $guest_token = $_COOKIE['guest_token']; // Überprüfen, ob das Lesezeichen diesem Gast gehört $stored_token = get_post_meta($bookmark_id, '_guest_token', true); if ($stored_token === $guest_token) { wp_delete_post($bookmark_id, true); echo 'Lesezeichen erfolgreich gelöscht!'; } else { echo 'Du kannst nur deine eigenen Lesezeichen löschen!'; } } wp_die(); // Beende die Anfrage } add_action('wp_ajax_delete_bookmark', 'statistik_manager_delete_bookmark'); add_action('wp_ajax_nopriv_delete_bookmark', 'statistik_manager_delete_bookmark'); // Funktion zum Anzeigen der Lesezeichen mit Löschen-Option function statistik_manager_display_bookmarks() { $bookmarks = statistik_manager_get_guest_bookmarks(); if (!empty($bookmarks)) { $output = '
'; $output .= '

' . __('Gespeicherte Lesezeichen', 'statistik-manager') . '

'; $output .= ''; $output .= '
'; return $output; } else { return '

' . __('Keine Lesezeichen gefunden.', 'statistik-manager') . '

'; } } // Funktion zum Hinzufügen eines Lesezeichens via AJAX function statistik_manager_add_bookmark_ajax() { if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['bookmark_url']) && isset($_POST['bookmark_name'])) { $bookmark_url = sanitize_text_field($_POST['bookmark_url']); $bookmark_name = sanitize_text_field($_POST['bookmark_name']); // Name des Lesezeichens // Neues Lesezeichen erstellen $post_id = wp_insert_post(array( 'post_type' => 'bookmark', 'post_title' => $bookmark_name, // Benutzerdefinierter Name für das Lesezeichen 'post_status' => 'publish', 'meta_input' => array( '_bookmark_url' => $bookmark_url ) )); // Speichern des Gast-Token if (isset($_COOKIE['guest_token'])) { update_post_meta($post_id, '_guest_token', $_COOKIE['guest_token']); } // Rückgabe des neuen Lesezeichens als HTML $bookmark_html = '
  • '; $bookmark_html .= ''; $bookmark_html .= '' . esc_html($bookmark_name) . ''; $bookmark_html .= '
  • '; echo $bookmark_html; } wp_die(); // Beende die Anfrage } add_action('wp_ajax_add_bookmark', 'statistik_manager_add_bookmark_ajax'); add_action('wp_ajax_nopriv_add_bookmark', 'statistik_manager_add_bookmark_ajax'); // JavaScript zum Hinzufügen des Lesezeichens ohne Seitenaktualisierung function statistik_manager_add_bookmark_script() { ?>
    publish; // Kommentare $comments_count = wp_count_comments()->total_comments; // Kategorien $selected_categories = get_option('statistik_manager_selected_categories', []); $categories_count = 0; if (!empty($selected_categories)) { $categories_count = count($selected_categories); } else { // Alle Kategorien zählen, wenn keine ausgewählt wurden $categories_count = wp_count_terms('category'); } // Serien (angenommen, Serien sind benutzerdefinierte Taxonomie) $series_count = wp_count_terms('series'); // 'series' ist die benutzerdefinierte Taxonomie // Eröffnungsdatum $opening_date = get_option('statistik_manager_opening_date', ''); return [ 'posts_count' => $posts_count, 'comments_count' => $comments_count, 'categories_count' => $categories_count, 'series_count' => $series_count, 'opening_date' => $opening_date ]; } // Banner-Funktion function statistik_manager_display_banner($position) { if (!get_option('statistik_manager_banner_enabled', 1)) { return; } $banner_text = get_option('statistik_manager_banner_text', 'Willkommen auf unserer Webseite!'); $banner_color = get_option('statistik_manager_banner_color', '#0073aa'); $banner_position = get_option('statistik_manager_banner_position', 'top'); $font_size = get_option('statistik_manager_banner_font_size', 'medium'); $banner_icon = get_option('statistik_manager_banner_icon', 'fas fa-info-circle'); // Standard-Icon $show_icon = get_option('statistik_manager_show_icon', 1); // Option zur Aktivierung des Icons // Schriftgröße je nach Auswahl setzen switch ($font_size) { case 'small': $font_size_css = '14px'; break; case 'medium': $font_size_css = '18px'; break; case 'large': $font_size_css = '24px'; break; default: $font_size_css = '18px'; } if ($banner_position !== $position) { return; } // Standard-Styles für das Banner $style = "background-color: " . esc_attr($banner_color) . "; color: #fff; text-align: center; padding: 10px; width: 100%; height: 50px; /* Feste Höhe */ line-height: 30px; /* Zentrierte Schrift */ z-index: 9999; position: fixed; top: 0; left: 0;"; $text_style = "font-size: " . esc_attr($font_size_css) . ";"; $icon_style = "font-size: 24px; margin-right: 8px;"; // Feste Größe für Icon echo '
    '; // Icon nur anzeigen, wenn gewünscht if ($show_icon && !empty($banner_icon)) { echo ''; } echo '' . esc_html($banner_text) . ''; echo '
    '; } // Funktion für das Banner im Header (nach ) function statistik_manager_display_banner_header() { add_action('wp_body_open', function() { statistik_manager_display_banner('top'); }); } // Falls `wp_body_open` nicht unterstützt wird, als Fallback `wp_footer` nutzen function statistik_manager_display_banner_header_fallback() { add_action('wp_footer', function() { statistik_manager_display_banner('top'); }, 5); } // Funktion für das Banner im Footer function statistik_manager_display_banner_footer() { add_action('wp_footer', function() { statistik_manager_display_banner('bottom'); }, 10); } // Banner laden (Header mit Fallback) if (function_exists('wp_body_open')) { statistik_manager_display_banner_header(); } else { statistik_manager_display_banner_header_fallback(); } // Fix: Admin-Leiste (Wenn Admin angemeldet ist, Banner nach unten verschieben) function statistik_manager_admin_bar_fix() { if (is_admin_bar_showing()) { echo ''; } else { echo ''; } } add_action('wp_head', 'statistik_manager_admin_bar_fix'); // Shortcode für die Anzeige der Statistiken function statistik_manager_shortcode() { $statistics = statistik_manager_get_statistics(); $webseitenname = get_bloginfo('name'); $output = '
    '; $output .= '

    Statistikübersicht

    '; $output .= '
    '; if (get_option('statistik_manager_show_posts')) { $output .= '
    '; $output .= '

    Beiträge:
    ' . $statistics['posts_count'] . '

    '; } if (get_option('statistik_manager_show_comments')) { $output .= '
    '; $output .= '

    Kommentare:
    ' . $statistics['comments_count'] . '

    '; } if (get_option('statistik_manager_show_categories')) { $output .= '
    '; $output .= '

    Kategorien:
    ' . $statistics['categories_count'] . '

    '; } if (get_option('statistik_manager_show_series')) { $output .= '
    '; $output .= '

    Serien:
    ' . $statistics['series_count'] . '

    '; } $output .= '
    '; // Eröffnungsdatum anzeigen, wenn gesetzt if (!empty($statistics['opening_date'])) { $formatted_date = date('d.m.Y', strtotime($statistics['opening_date'])); $output .= '
    '; $output .= ''; $output .= '

    ' . sprintf(__('%s wurde am %s eröffnet.', 'statistik-manager'), esc_html($webseitenname), esc_html($formatted_date)) . '

    '; $output .= '
    '; } $output .= '
    '; return $output; } add_shortcode('statistik_manager', 'statistik_manager_shortcode'); // Admin-Panel CSS einbinden, nur auf der Plugin-Seite function statistik_manager_enqueue_admin_styles($hook) { if ($hook === 'toplevel_page_statistik_manager') { wp_enqueue_style('statistik-manager-admin-style', plugins_url('css/admin-style.css', __FILE__)); } } add_action('admin_enqueue_scripts', 'statistik_manager_enqueue_admin_styles'); // Frontend CSS nur einbinden, wenn der Shortcode verwendet wird function statistik_manager_enqueue_frontend_styles() { if (has_shortcode(get_post()->post_content, 'statistik_manager')) { wp_enqueue_style('statistik-manager-frontend-style', plugins_url('css/style.css', __FILE__)); } } add_action('wp_enqueue_scripts', 'statistik_manager_enqueue_frontend_styles'); function statistik_manager_menu() { add_menu_page( 'WP Stat & Notice', // Ändern Sie den Seitentitel 'WP Stat & Notice', // Ändern Sie die Menübezeichnung 'manage_options', // Berechtigungen 'statistik_manager', // Menü-Slug 'statistik_manager_options_page', // Callback-Funktion 'dashicons-chart-pie' // Dashicon-Icon ); } add_action('admin_menu', 'statistik_manager_menu'); // Funktion für die Plugin-Optionen-Seite function statistik_manager_options_page() { ?>

    />
    />
    />
    />

    'category', 'orderby' => 'name', 'order' => 'ASC', 'hide_empty' => false, )); if (!empty($categories) && !is_wp_error($categories)) : $selected_categories = get_option('statistik_manager_selected_categories', []); ?>

    Banner-Einstellungen

    Banner anzeigen />
    Banner Text
    Banner Farbe
    Banner Position
    Icon auswählen
    Icon anzeigen />
    Schriftgröße

    Kurzanleitung für den Statistik Manager

    Verwenden Sie den Statistik Manager, um eine benutzerdefinierte Statistik Box auf Ihrer Website anzuzeigen und wichtige Statistiken zu verfolgen. Hier ist eine kurze Anleitung:

    1. Fügen Sie den Shortcode ein: Um die Statistik Box anzuzeigen, fügen Sie den folgenden Shortcode an der gewünschten Stelle in Ihrem Beitrag oder Ihrer Seite ein: [statistik_manager].
    2. Statistiken anzeigen: Die Statistik Box zeigt automatisch verschiedene Statistiken an. Sie können folgende Statistiken anzeigen lassen:
      • Beiträge: Zeigt die Gesamtzahl der veröffentlichten Beiträge auf Ihrer Webseite.
      • Kommentare: Zeigt die Gesamtzahl der eingegangenen Kommentare auf Ihren Beiträgen.
      • Kategorien: Zeigt die Anzahl der erstellten Kategorien auf Ihrer Webseite.
      • Serien: Zeigt die Gesamtzahl der Serien, falls Ihre Seite Serieninhalte enthält.
    3. Auswahl der zu zählenden Kategorien: In den Plugin-Einstellungen können Sie auswählen, welche Kategorien in die Statistik einbezogen werden sollen, z. B. Kommentare, Beiträge oder benutzerdefinierte Kategorien.
    4. Eröffnungsdatum der Webseite: Das Eröffnungsdatum Ihrer Website wird automatisch in der Statistik Box angezeigt, damit Besucher sehen können, wie lange Ihre Seite bereits online ist.
    5. Banner hinzufügen: Sie können in den Plugin-Einstellungen auch ein Banner für die Statistik Box hinzufügen, das individuell angepasst werden kann (z. B. als Werbung oder für besondere Hinweise).

    Die Statistik Box wird an der Stelle angezeigt, an der der Shortcode eingefügt wurde. Alle Statistiken und Inhalte können jederzeit über die Plugin-Einstellungen angepasst werden.

    Bei Fragen oder Problemen können Sie sich jederzeit an uns wenden!

    Kurzanleitung zur Lesezeichen-Verwaltung

    Zusätzlich zur Anzeige von Statistiken können Sie auch eine benutzerdefinierte Liste von Lesezeichen für Ihre Gäste verwalten. Hier sind die wichtigen Schritte:

    1. Fügen Sie den Shortcode für Lesezeichen ein: Um die Lesezeichen-Liste anzuzeigen, fügen Sie den folgenden Shortcode an der gewünschten Stelle in Ihrem Beitrag oder Ihrer Seite ein: [display_bookmarks].
    2. Lesezeichen hinzufügen: Besucher können Lesezeichen zu Ihren Seiten hinzufügen. Diese erscheinen automatisch in der Liste der gespeicherten Lesezeichen. Um ein Lesezeichen hinzuzufügen, müssen sie den Shortcode [add_bookmark] verwenden, der ein Formular zum Speichern eines Lesezeichens anzeigt.
    3. Lesezeichen löschen: Sie können Lesezeichen jederzeit löschen, indem Sie auf den „Lesezeichen Löschen“-Button neben dem jeweiligen Eintrag klicken. Nur der Besitzer des Lesezeichens kann es löschen.

    Wenn Sie Fragen oder Probleme haben, wenden Sie sich an uns!