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!
Support: Bei Fragen oder Supportanfragen kannst du uns über Microsoft Teams oder Telegram erreichen.
';
}
add_action('admin_notices', 'wp_multi_add_warning_banner');
// Support-Links in der Plugin-Übersicht anzeigen
function wp_multi_plugin_row_meta($links, $file) {
if ($file == plugin_basename(__FILE__)) {
$new_links = array(
'support_teams' => 'Microsoft Teams Support',
'support_telegram' => 'Telegram Support',
);
// Links an die Plugin-Übersicht anhängen
$links = array_merge($links, $new_links);
}
return $links;
}
add_filter('plugin_row_meta', 'wp_multi_plugin_row_meta', 10, 2);
/*
* Index Verzeichnis [alphabetical_index]
*/
// Shortcode zum Erstellen des Indexes
function wp_multi_alphabetical_index($atts) {
// Definiere die Argumente für den Shortcode
$atts = shortcode_atts(array(
'posts_per_page' => 20, // Maximale Beiträge pro Seite
), $atts, 'alphabetical_index');
// Hole alle Beiträge
$args = array(
'post_type' => 'post',
'posts_per_page' => -1,
'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();
?>
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() {
?>
Automatische Tags
Diese Funktion fügt automatisch Tag zu Beiträgen hinzu, die noch keine haben.
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]);
}
/*
* 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 - Anti Spam
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.
Verwenden Sie ein zufälliges Zeichenfolgen für das Honeypot-Feld.
Die Nachricht, die angezeigt wird, wenn ein Honeypot ausgelöst wird.
>
Deaktivieren Sie das Honeypot-Test-Widget im Frontend.
Maximale Anzahl von Links, die in einem Kommentar erlaubt sind.
Schlüsselwörter, die blockiert werden sollen (durch Kommas getrennt).
Blockierte IP-Adressen (jede Adresse in einer neuen Zeile).
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 '
ID
IP-Adresse
Versuche
Letzter Versuch
Aktionen
';
echo '';
foreach ($blocked_ips as $ip) {
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 '
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
?>
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');
// Cron-Job registrieren
function wp_multi_update_schedule_check() {
if (!wp_next_scheduled('wp_multi_update_check_event')) {
// Registriere den Cron-Job, der alle 3 Minuten ausgeführt wird
wp_schedule_event(time(), 'three_minutes', 'wp_multi_update_check_event');
}
}
add_action('wp', 'wp_multi_update_schedule_check');
// Cron-Job für Update-Überprüfung
function wp_multi_update_check() {
// Gitea API-URL
$api_url = 'https://git.viper.ipv64.net/api/v1/repos/M_Viper/wp-multi/releases';
// Die Version des Plugins aus den Metadaten der Plugin-Datei holen
$plugin_data = get_plugin_data( __FILE__ );
$installed_version = $plugin_data['Version']; // Die installierte Version aus den Plugin-Metadaten
// Hole die Einstellung, ob PreRelease-Versionen angezeigt werden sollen
$show_prereleases = get_option('wp_multi_update_show_prereleases', false);
// Gitea API-Anfrage für die neuesten Releases ohne Authentifizierung
$response = wp_remote_get($api_url);
if (is_wp_error($response)) {
return; // Fehler nicht weitergeben, aber nichts tun
}
// API-Antwort verarbeiten
$body = wp_remote_retrieve_body($response);
$data = json_decode($body, true);
// Finde das neueste, gültige Release (nicht PreRelease, falls deaktiviert)
$valid_release = null;
foreach ($data as $release) {
// Wenn PreRelease deaktiviert ist, überspringe alle PreRelease-Versionen
if (!$show_prereleases && isset($release['prerelease']) && $release['prerelease']) {
continue;
}
if (!empty($release['tag_name'])) {
$valid_release = $release;
break; // Nur das erste gültige Release verwenden
}
}
if ($valid_release) {
$latest_version = $valid_release['tag_name'];
$release_notes = isset($valid_release['body']) ? $valid_release['body'] : '';
$is_prerelease = isset($valid_release['prerelease']) && $valid_release['prerelease'];
// Speichern von Release-Daten
update_option('wp_multi_update_latest_version', $latest_version);
update_option('wp_multi_update_release_notes', $release_notes);
update_option('wp_multi_update_is_prerelease', $is_prerelease);
}
}
add_action('wp_multi_update_check_event', 'wp_multi_update_check');
// Callback-Funktion für das Widget
function wp_multi_update_dashboard_widget_content() {
// Gitea API-URL
$api_url = 'https://git.viper.ipv64.net/api/v1/repos/M_Viper/wp-multi/releases';
// Die Version des Plugins aus den Metadaten der Plugin-Datei holen
$plugin_data = get_plugin_data( __FILE__ );
$installed_version = $plugin_data['Version']; // Die installierte Version aus den Plugin-Metadaten
// Hole die Einstellung, ob PreRelease-Versionen angezeigt werden sollen
$show_prereleases = get_option('wp_multi_update_show_prereleases', false);
// Gitea API-Anfrage für die neuesten Releases ohne Authentifizierung
$response = wp_remote_get($api_url);
if (is_wp_error($response)) {
echo 'Fehler beim Abrufen der Versionsinformationen von Gitea.';
return;
}
// API-Antwort verarbeiten
$body = wp_remote_retrieve_body($response);
$data = json_decode($body, true);
// Finde das neueste, gültige Release (nicht PreRelease, falls deaktiviert)
$valid_release = null;
foreach ($data as $release) {
// Wenn PreRelease deaktiviert ist, überspringe alle PreRelease-Versionen
if (!$show_prereleases && isset($release['prerelease']) && $release['prerelease']) {
continue;
}
if (!empty($release['tag_name'])) {
$valid_release = $release;
break; // Nur das erste gültige Release verwenden
}
}
if ($valid_release) {
$latest_version = $valid_release['tag_name'];
$release_notes = isset($valid_release['body']) ? $valid_release['body'] : '';
$is_prerelease = isset($valid_release['prerelease']) && $valid_release['prerelease'];
// Anzeige der Versionen und Text basierend auf PreRelease
if (version_compare($installed_version, $latest_version, '>=')) {
// Wenn die installierte Version gleich oder neuer ist als die Version in Gitea
echo '
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.
';
}
} else {
echo 'Fehler beim Abrufen der neuesten Version von Gitea.';
}
}
// Benutzerdefinierte Intervalle für Cron hinzufügen
function wp_multi_update_custom_intervals($schedules) {
// 3 Minuten Intervall hinzufügen
$schedules['three_minutes'] = array(
'interval' => 180, // Alle 3 Minuten
'display' => __('Alle 3 Minuten'),
);
return $schedules;
}
add_filter('cron_schedules', 'wp_multi_update_custom_intervals');
// PreRelease Option in den Einstellungen hinzufügen
function wp_multi_update_register_settings() {
add_option('wp_multi_update_show_prereleases', false);
register_setting('general', 'wp_multi_update_show_prereleases');
add_settings_field('wp_multi_update_show_prereleases', 'Pre-Release-Versionen anzeigen', 'wp_multi_update_show_prereleases_field', 'general');
}
add_action('admin_init', 'wp_multi_update_register_settings');
// Einstellung für PreRelease-Versionen
function wp_multi_update_show_prereleases_field() {
$value = get_option('wp_multi_update_show_prereleases', false);
echo '';
echo '
Aktiviere diese Option, um Pre-Release-Versionen anzuzeigen, die noch nicht vollständig veröffentlicht wurden. Deaktiviere die Option, um nur stabile Versionen anzuzeigen.
';
}
/*
* 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() {
?>
';
}
/*
* 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));
?>
';
}
// 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 '
';
}
}
// 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 '
';
foreach ($bookmarks as $bookmark) {
$bookmark_url = get_post_meta($bookmark->ID, '_bookmark_url', true);
$bookmark_id = $bookmark->ID;
$bookmark_name = get_the_title($bookmark); // Benutzerdefinierter Name des Lesezeichens
// Ausgabe des Lesezeichens mit getauschtem Button und Titel
$output .= '
';
}
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() {
?>
Verwenden Sie den Statistik Manager, um eine benutzerdefinierte Statistik Box auf Ihrer Website anzuzeigen und wichtige Statistiken zu verfolgen. Hier ist eine kurze Anleitung:
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].
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.
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.
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.
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:
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].
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.
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!