diff --git a/img/screenshot.png b/img/screenshot.png new file mode 100644 index 0000000..4decb4f Binary files /dev/null and b/img/screenshot.png differ diff --git a/includes/admin-banner.php b/includes/admin-banner.php new file mode 100644 index 0000000..3075122 --- /dev/null +++ b/includes/admin-banner.php @@ -0,0 +1,108 @@ + 0 && (time() - $ts) < (WP_MULTI_BANNER_DAYS * DAY_IN_SECONDS); + } + + // Admin-Banner als Notice mit Blauem Hintergrund (#0073aa) + function wp_multi_add_warning_banner() { + // Nach dem Schließen für WP_MULTI_BANNER_DAYS Tage nicht mehr anzeigen + if (wp_multi_banner_is_dismissed()) { + return; + } + + // Verwende printf für bessere Lesbarkeit und Übersetzbarkeit + printf( + '
+

%s %s %s %s

+

%s: %s %s %s %s %s

+
', + esc_attr(wp_create_nonce('wp_multi_dismiss_banner')), + esc_html__('Danke, dass du WP Multi verwendest!', 'wp-multi'), + esc_html__('Dein Feedback hilft uns, das Plugin ständig zu verbessern. Wenn du Fehler entdeckst oder Verbesserungsvorschläge hast, besuche bitte unsere', 'wp-multi'), + 'https://git.viper.ipv64.net/M_Viper/wp-multi', + esc_html__('Gitea-Seite', 'wp-multi'), + esc_html__('und teile uns deine Ideen mit!', 'wp-multi'), + esc_html__('Support', 'wp-multi'), + esc_html__('Bei Fragen oder Supportanfragen kannst du uns über', 'wp-multi'), + 'https://discord.com/invite/FdRs4BRd8D', + esc_html__('Discord', 'wp-multi'), + esc_html__('oder', 'wp-multi'), + 'https://t.me/M_Viper04', + esc_html__('Telegram', 'wp-multi'), + esc_html__('erreichen.', 'wp-multi') + ); + + // Beim Klick auf das X den Schließ-Zeitpunkt speichern (per AJAX) + ?> + + sprintf( + '%s', + esc_url('https://discord.com/invite/FdRs4BRd8D'), + esc_html__('Discord Support', 'wp-multi') + ), + 'support_telegram' => sprintf( + '%s', + esc_url('https://t.me/M_Viper04'), + esc_html__('Telegram Support', 'wp-multi') + ), + ); + $links = array_merge($links, $new_links); + } + return $links; + } + add_filter('plugin_row_meta', 'wp_multi_plugin_row_meta', 10, 2); + + diff --git a/includes/admin-menu.php b/includes/admin-menu.php new file mode 100644 index 0000000..e16522e --- /dev/null +++ b/includes/admin-menu.php @@ -0,0 +1,88 @@ + 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(); + ?> + +
+ + + + + +
+

Beiträge für:

+
+ + +
+
+ +
+ +
+ +
+
+ +
+ + + + prefix . 'wp_multi_user_analytics'); + +/** + * Erstellt die Datenbanktabelle für Benutzer-Analytics. + */ +function wp_multi_create_analytics_table() { + global $wpdb; + $table_name = WP_MULTI_ANALYTICS_TABLE; + $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), + INDEX idx_timestamp (timestamp), + INDEX idx_action (action) + ) $charset_collate;"; + + require_once ABSPATH . 'wp-admin/includes/upgrade.php'; + dbDelta($sql); +} +register_activation_hook(WP_MULTI_FILE, 'wp_multi_create_analytics_table'); + +/** + * Verfolgt Benutzerinteraktionen (Kommentare und Beitragsaufrufe). + * + * @param int $user_id Benutzer-ID. + * @param string $action Aktion (z. B. 'view', 'comment'). + * @param int $post_id Beitrag-ID (optional). + * @return bool Erfolg der Operation. + */ +function wp_multi_track_user_activity($user_id, $action, $post_id = null) { + global $wpdb; + $table_name = WP_MULTI_ANALYTICS_TABLE; + + $user_id = absint($user_id); + $action = sanitize_text_field($action); + $post_id = $post_id ? absint($post_id) : null; + + if ($action === 'view' && is_single()) { + $post_id = get_the_ID(); + } + + if (!$user_id || !$action) { + return false; + } + + return $wpdb->insert( + $table_name, + array( + 'user_id' => $user_id, + 'action' => $action, + 'post_id' => $post_id, + ), + array('%d', '%s', '%d') + ); +} + +/** + * Verfolgt Kommentar-Aktivitäten. + * + * @param int $comment_id Kommentar-ID. + */ +function wp_multi_comment_activity($comment_id) { + $comment = get_comment($comment_id); + $user_id = absint($comment->user_id); + if ($user_id) { + wp_multi_track_user_activity($user_id, 'comment', $comment->comment_post_ID); + } +} +add_action('comment_post', 'wp_multi_comment_activity'); + +/** + * Verfolgt Beitragsaufrufe. + */ +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'); + +/** + * Ruft rohe Analytics-Daten aus der Datenbank ab. + * + * @param string $date_query Datum für die Abfrage. + * @return array Rohe Analytics-Daten. + */ +function wp_multi_fetch_raw_analytics($start_datetime = null, $end_datetime = null) { + global $wpdb; + + if (!$start_datetime) { + $start_datetime = gmdate('Y-m-d H:i:s', strtotime('-7 days')); + } + + $where = 'WHERE timestamp >= %s'; + $params = [$start_datetime]; + + if ($end_datetime) { + $where .= ' AND timestamp <= %s'; + $params[] = $end_datetime; + } + + $sql = "SELECT DATE(timestamp) AS date, action, post_id, COUNT(*) AS count, user_id, timestamp + FROM " . WP_MULTI_ANALYTICS_TABLE . " + $where + GROUP BY date, action, post_id, user_id, timestamp + ORDER BY date ASC"; + + return $wpdb->get_results($wpdb->prepare($sql, $params)); +} + +/** + * Verarbeitet rohe Analytics-Daten für Diagramm und Tabelle. + * + * @param array $results Rohe Analytics-Daten. + * @return array Verarbeitete Daten. + */ +function wp_multi_process_analytics_data($results) { + $dates = []; + $comment_counts = []; + $view_counts = []; + + foreach ($results as $result) { + $date = $result->date; + if (!in_array($date, $dates)) { + $dates[] = $date; + } + if ($result->action === 'comment') { + $comment_counts[$date] = ($comment_counts[$date] ?? 0) + $result->count; + } elseif ($result->action === 'view') { + $view_counts[$date] = ($view_counts[$date] ?? 0) + $result->count; + } + } + + $all_dates = []; + $datasets = ['comments' => [], 'views' => []]; + + for ($i = 6; $i >= 0; $i--) { + $date = date('Y-m-d', strtotime("-$i day")); + $all_dates[] = $date; + $datasets['comments'][] = $comment_counts[$date] ?? 0; + $datasets['views'][] = $view_counts[$date] ?? 0; + } + + return [ + 'dates' => array_reverse($all_dates), + 'datasets' => [ + [ + 'label' => __('Kommentare', 'wp-multi'), + 'data' => array_reverse($datasets['comments']), + 'borderColor' => 'rgba(75, 192, 192, 1)', + 'borderWidth' => 1, + 'fill' => false, + ], + [ + 'label' => __('Beitragsaufrufe', 'wp-multi'), + 'data' => array_reverse($datasets['views']), + 'borderColor' => 'rgba(153, 102, 255, 1)', + 'borderWidth' => 1, + 'fill' => false, + ] + ], + 'data' => $results + ]; +} + +/** + * Ruft Analytics-Daten mit Caching ab. + * + * @param string $date_query Datum für die Abfrage. + * @return array Analytics-Daten. + */ +function wp_multi_get_analytics_data($start_datetime = null, $end_datetime = null) { + $cache_key = 'wp_multi_analytics_data_' . md5($start_datetime . '|' . $end_datetime); + $cached_data = get_transient($cache_key); + + if ($cached_data !== false) { + return $cached_data; + } + + $results = wp_multi_fetch_raw_analytics($start_datetime, $end_datetime); + $data = wp_multi_process_analytics_data($results); + + set_transient($cache_key, $data, HOUR_IN_SECONDS); + return $data; +} + +/** + * Zeigt die Benutzer-Analytics-Seite im Admin-Bereich an. + */ +function wp_multi_display_user_analytics() { + global $wpdb; + + if (!$wpdb->get_var("SHOW TABLES LIKE '" . WP_MULTI_ANALYTICS_TABLE . "'")) { + echo '

' . esc_html__('Die Analytics-Tabelle existiert nicht. Bitte aktiviere das Plugin erneut.', 'wp-multi') . '

'; + return; + } + + $time_range = isset($_GET['time_range']) ? sanitize_text_field($_GET['time_range']) : '7days'; + $start_datetime = gmdate('Y-m-d H:i:s', strtotime('-7 days')); + $end_datetime = null; + + if ($time_range === '30days') { + $start_datetime = gmdate('Y-m-d H:i:s', strtotime('-30 days')); + } elseif ($time_range === 'custom' && isset($_GET['start_date'], $_GET['end_date'])) { + $custom_start = sanitize_text_field(wp_unslash($_GET['start_date'])); + $custom_end = sanitize_text_field(wp_unslash($_GET['end_date'])); + if (preg_match('/^\d{4}-\d{2}-\d{2}$/', $custom_start) && preg_match('/^\d{4}-\d{2}-\d{2}$/', $custom_end)) { + $start_datetime = $custom_start . ' 00:00:00'; + $end_datetime = $custom_end . ' 23:59:59'; + } + } + + $results = wp_multi_get_analytics_data($start_datetime, $end_datetime); + + wpmt_admin_page_open( + __('Benutzer Analytics', 'wp-multi'), + __('Beitragsaufrufe und Kommentar-Aktivität deiner Besucher', 'wp-multi') + ); + + wpmt_admin_card_open(__('Zeitraum', 'wp-multi')); + ?> +
+ + + + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + +
user_id); ?>action); ?> + post_id) { + $post_title = get_the_title($row->post_id); + echo esc_html($post_title ?: __('Kein Titel verfügbar', 'wp-multi')); + } else { + echo esc_html__('Kein Beitrag', 'wp-multi'); + } + ?> + post_id ?: '-'); ?>timestamp); ?>
+
+ +
+ +
+ + '; + wpmt_admin_stat_card(__('Blockierte Kommentare', 'wp-multi'), number_format_i18n($blocked_comments), 'dashicons-dismiss'); + wpmt_admin_stat_card(__('Honeypot-Treffer', 'wp-multi'), number_format_i18n($honeypot_hits), 'dashicons-shield'); + wpmt_admin_stat_card(__('Spammer-IPs', 'wp-multi'), number_format_i18n(count($spammer_ips)), 'dashicons-admin-site-alt3'); + wpmt_admin_stat_card(__('Spam-Einreichungen', 'wp-multi'), number_format_i18n(count($spam_submissions)), 'dashicons-email-alt'); + echo ''; + + wpmt_admin_card_open(__('Spammer-IP-Adressen', 'wp-multi')); + if (!empty($spammer_ips)) { + ?> +
+ + + + + + + + + +
+
+ +
+ + +
+ 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). + + + + $reason, + 'ip' => $ip, + 'timestamp' => current_time('mysql'), + ]; + // Auf die letzten 200 Einträge begrenzen, damit die Option nicht unbegrenzt wächst + if (count($submissions) > 200) { + $submissions = array_slice($submissions, -200); + } + update_option('wp_multi_spam_submissions', $submissions); +} + +// Honeypot-/Zeitfallen-Prüfung sowie IP-/Keyword-/Link-Filter beim Absenden eines Kommentars +function wp_multi_validate_comment_submission($commentdata) { + $ip = function_exists('get_user_ip') ? get_user_ip() : (isset($_SERVER['REMOTE_ADDR']) ? sanitize_text_field(wp_unslash($_SERVER['REMOTE_ADDR'])) : ''); + + // Honeypot-Feld: darf von einem Menschen nie ausgefüllt werden + $field_name = get_option('wp_multi_honeypot_field', 'iwlxja5187'); + if (!empty($_POST[$field_name])) { + wp_multi_register_spam_hit('honeypot', $ip); + wp_die(esc_html(get_option('wp_multi_honeypot_error', 'Spamming or your Javascript is disabled !!'))); + } + + // Zeit-Falle: Formular darf nicht schneller als 3 Sekunden nach dem Laden abgeschickt werden + if (isset($_POST['wp_multi_form_time'])) { + $elapsed = time() - absint($_POST['wp_multi_form_time']); + if ($elapsed < 3) { + wp_multi_register_spam_hit('honeypot_zeitfalle', $ip); + wp_die(esc_html(get_option('wp_multi_honeypot_error', 'Spamming or your Javascript is disabled !!'))); + } + } + + // Blockierte IP-Adressen + $blocked_ips = array_filter(array_map('trim', explode("\n", (string) get_option('wp_multi_blocked_ips', '')))); + if ($ip && in_array($ip, $blocked_ips, true)) { + wp_multi_register_spam_hit('blocked_ip', $ip); + wp_die(esc_html__('Deine IP-Adresse wurde für Kommentare gesperrt.', 'wp-multi')); + } + + $content = isset($commentdata['comment_content']) ? $commentdata['comment_content'] : ''; + + // Blockierte Schlüsselwörter + $blocked_keywords = array_filter(array_map('trim', explode(',', (string) get_option('wp_multi_blocked_keywords', '')))); + foreach ($blocked_keywords as $keyword) { + if ($keyword !== '' && stripos($content, $keyword) !== false) { + wp_multi_register_spam_hit('keyword', $ip); + wp_die(esc_html__('Dein Kommentar enthält nicht erlaubte Inhalte.', 'wp-multi')); + } + } + + // Maximale Anzahl an Links im Kommentar + $max_links = absint(get_option('wp_multi_max_links', 3)); + if ($max_links > 0 && preg_match_all('#https?://#i', $content) > $max_links) { + wp_multi_register_spam_hit('links', $ip); + wp_die(esc_html__('Dein Kommentar enthält zu viele Links.', 'wp-multi')); + } + + // Kommentarfilter: Telefonnummern, E-Mails, URLs, IPs, Schimpfwörter durch * ersetzen + $commentdata['comment_content'] = wp_multi_apply_comment_content_filter($content); + + return $commentdata; +} +add_filter('preprocess_comment', 'wp_multi_validate_comment_submission'); + + diff --git a/includes/auto-tags.php b/includes/auto-tags.php new file mode 100644 index 0000000..c3e62eb --- /dev/null +++ b/includes/auto-tags.php @@ -0,0 +1,313 @@ + 'names']); + if (!empty($existing_tags)) { + return; + } + + $post = get_post($post_id); + if (!$post) { + error_log("WP Multi Auto Tags: Beitrag $post_id nicht gefunden."); + return; + } + + $content = strip_tags($post->post_content); + $content = mb_strtolower($content, 'UTF-8'); + + // Stopwörter laden + $stopwords = wp_multi_get_stopwords(); + $words = wp_multi_extract_words($content, $stopwords); + + if (empty($words)) { + return; + } + + $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, $top_tags, true); + } +} + +/** + * Extrahiert relevante Wörter aus dem Inhalt. + * + * @param string $content Der Inhalt des Beitrags. + * @param array $stopwords Liste der Stopwörter. + * @return array Liste der extrahierten Wörter. + */ +function wp_multi_extract_words($content, $stopwords) { + preg_match_all('/\b[a-zäöüß]{4,}\b/u', $content, $matches); + return array_unique(array_diff($matches[0], $stopwords)); +} + +/** + * Lädt die kombinierten Stopwörter (Standard + benutzerdefiniert). + * + * @return array Liste der Stopwörter. + */ +function wp_multi_get_stopwords() { + $cache_key = 'wp_multi_stopwords'; + $stopwords = get_transient($cache_key); + + if ($stopwords !== false) { + return $stopwords; + } + + $custom_stopwords = get_option(WP_MULTI_AUTO_TAGS_OPTION, ''); + $custom_stopwords = array_filter(array_map('trim', explode(',', sanitize_text_field($custom_stopwords)))); + + $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' + ]; + + $stopwords = array_merge($default_stopwords, $custom_stopwords); + set_transient($cache_key, $stopwords, DAY_IN_SECONDS); + return $stopwords; +} + +/** + * Fügt das Admin-Menü für automatische Tags hinzu. + */ +// Der Auto-Tags-Menüpunkt wird zentral in wp_multi_register_admin_menus() registriert. + +/** + * Rendert die Admin-Seite für automatische Tags. + */ +function wp_multi_auto_tags_page() { + if (!current_user_can('manage_options')) { + wp_die(__('Zugriff verweigert.', 'wp-multi')); + } + + wpmt_admin_page_open( + __('Automatische Tags', 'wp-multi'), + __('Fügt Beiträgen ohne Tags automatisch passende Schlagwörter hinzu', 'wp-multi') + ); + + wpmt_admin_card_open(__('Einstellungen', 'wp-multi')); + ?> +
+ +
+ + +
+

+
+ +

+ + +

+ + + function($input) { + $input = sanitize_text_field($input); + return implode(',', array_map('trim', explode(',', $input))); + }, + ]); +} +add_action('admin_init', 'wp_multi_auto_tags_settings_init'); + +/** + * Verarbeitet die Initialisierung der Auto-Tag-Verarbeitung via AJAX. + */ +function wp_multi_process_auto_tags() { + check_ajax_referer(WP_MULTI_AUTO_TAGS_NONCE, 'nonce'); + + $args = [ + 'post_type' => 'post', + 'posts_per_page' => 100, + 'fields' => 'ids', + 'no_found_rows' => true, // Optimierung + ]; + + $posts = get_posts($args); + if (empty($posts)) { + wp_send_json_success(['total' => 0]); + } + + set_transient(WP_MULTI_AUTO_TAGS_QUEUE, $posts, 300); + wp_send_json_success(['total' => count($posts)]); +} +add_action('wp_ajax_wp_multi_process_auto_tags', 'wp_multi_process_auto_tags'); + +/** + * Verarbeitet einen Batch von Beiträgen für die Auto-Tag-Verarbeitung. + */ +function wp_multi_process_auto_tags_step() { + check_ajax_referer(WP_MULTI_AUTO_TAGS_NONCE, 'nonce'); + + $queue = get_transient(WP_MULTI_AUTO_TAGS_QUEUE); + $batchSize = isset($_POST['batchSize']) ? absint($_POST['batchSize']) : 10; + $batchSize = max(1, min($batchSize, 50)); + + if (!$queue || empty($queue)) { + wp_send_json_success(['done' => false]); + } + + set_time_limit(30); // Timeout verhindern + $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_success(['done' => true]); +} +add_action('wp_ajax_wp_multi_process_auto_tags_step', 'wp_multi_process_auto_tags_step'); + +/** + * Fügt Tags automatisch bei neuen oder aktualisierten Beiträgen hinzu. + * + * @param int $post_id ID des Beitrags. + */ +function wp_multi_auto_tag_on_save($post_id) { + if (wp_is_post_autosave($post_id) || wp_is_post_revision($post_id)) { + return; + } + + wp_multi_auto_add_tags($post_id); +} +add_action('save_post', 'wp_multi_auto_tag_on_save', 10, 1); + + + diff --git a/includes/bad-words.json b/includes/bad-words.json index 76df7d1..b34ce5d 100644 --- a/includes/bad-words.json +++ b/includes/bad-words.json @@ -1,334 +1,11112 @@ { - "words": [ - "Affe", - "Affenkopf", - "Affenarsch", - "Alkoholiker", - "Alki", - "Amöbe", - "Anal", - "Analphabet", - "Anarchist", - "Aasgeier", - "Abschaum", - "Abzocker", - "Achsellecker", - "Arsch", - "Arschgeige", - "Arschgesicht", - "Arschloch", - "Arschkriecher", - "Armleuchter", - "Asozial", - "Asi", - "Aufschneider", - "Augenwichser", - "Bananenbieger", - "Banause", - "Bastard", - "Bauernlümmel", - "Bauer", - "Bekloppter", - "Berufsjugendlicher", - "Besserwisser", - "Bierdimpfel", - "Biest", - "Bildungsresistent", - "Bitch", - "Blödian", - "Blödmann", - "Blutsauger", - "Bodensatz", - "Bohnenstange", - "Bratze", - "Brillenschlange", - "Brunskuh", - "Bucklige", - "Bulle", - "Bürschchen", - "Canaille", - "Chaot", - "Chauvi", - "Choleriker", - "Clown", - "Crackhead", - "Dackel", - "Dämlack", - "Depp", - "Deppenhaufen", - "Dieb", - "Dillo", - "Dödel", - "Doldi", - "Doof", - "Dorfdepp", - "Drecksack", - "Drecksau", - "Dreckschleuder", - "Dreckspatz", - "Drohne", - "Drückeberger", - "Dummkopf", - "Dummbatz", - "Dumpfbacke", - "Ekel", - "Ekelpaket", - "Egoist", - "Erbsenzähler", - "Flachwichser", - "Flachzange", - "Flegel", - "Fließbandficker", - "Folterknecht", - "Fotze", - "Frettchen", - "Fresskack", - "Fresse", - "Fresssack", - "Freak", - "Frostbeule", - "Früchtchen", - "Fuchs", - "Funzeln", - "Fußabtreter", - "Fußhupe", - "Galgenvogel", - "Gammler", - "Gangster", - "Gartenzwerg", - "Gasfrosch", - "Gauner", - "Gehirnamputierter", - "Geier", - "Geizhals", - "Gesindel", - "Gesocks", - "Gewürm", - "Gierschlund", - "Giftspritze", - "Giftzwerg", - "Glatzkopf", - "Gosse", - "Großmaul", - "Grüner", - "Gruftie", - "Grünschnabel", - "Gsindl", - "Hackfresse", - "Halbaffe", - "Halbwüchsiger", - "Halunke", - "Hanswurst", - "Hasenfuß", - "Heini", - "Henker", - "Hetzer", - "Heuchler", - "Hexe", - "Hinterwäldler", - "Hirnloser", - "Hodenkobold", - "Hohlkopf", - "Hool", - "Hooligan", - "Hosenscheißer", - "Hure", - "Hurensohn", - "Idiot", - "Irrwisch", - "Jammerlappen", - "Jesuslatschenträger", - "Kackbratze", - "Kacke", - "Kackfass", - "Kackfresse", - "Kackvogel", - "Kanake", - "Kanalie", - "Kartoffel", - "Knallkopf", - "Knalltüte", - "Knecht", - "Kotzbrocken", - "Krähe", - "Kratzbürste", - "Krawallschachtel", - "Kretin", - "Kriecherin", - "Kröte", - "Krüppel", - "Ku-Klux-Klan", - "Kukident-Terrorist", - "Kulturbanause", - "Kürbis", - "Kurwa", - "Labertasche", - "Lackaffe", - "Lahmschnecke", - "Landei", - "Landlümmel", - "Landratte", - "Lappen", - "Lauch", - "Lauser", - "Liliputaner", - "Lügner", - "Luder", - "Lusche", - "Lustmolch", - "Mädchenfänger", - "Mafia", - "Memme", - "Menschenverachtend", - "Menschenaffe", - "Mistfink", - "Mistkerl", - "Miststück", - "Mittelmäßigkeit", - "Mongo", - "Mückenficker", - "Murkser", - "Muschi", - "Muttersöhnchen", - "Napfsülze", - "Narr", - "Nase", - "Nazi", - "Neandertaler", - "Neger", - "Nichtsnutz", - "Nichtskönner", - "Niete", - "Null", - "Nulpe", - "Nutte", - "Oberzicke", - "Ökofreak", - "Ölgötze", - "Opfer", - "Panscher", - "Penner", - "Pfeife", - "Pfurz", - "Pickelgesicht", - "Pisser", - "Plage", - "Plebeje", - "Popanz", - "Popel", - "Poperze", - "Popofresser", - "Prollbirne", - "Prolet", - "Puffmutter", - "Ratte", - "Rotzbengel", - "Rotzlöffel", - "Rüpel", - "Sack", - "Sackgesicht", - "Sackratte", - "Saftsack", - "Sandneger", - "Sau", - "Saukerl", - "Schabhals", - "Schabracke", - "Schandfleck", - "Schandmaul", - "Scheißkerl", - "Scheiße", - "Scheißhaufen", - "Schimmelbuckel", - "Schinder", - "Schindluder", - "Schlampe", - "Schleimer", - "Schlitzauge", - "Schmalspurganove", - "Schmock", - "Schnalle", - "Schnösel", - "Schnüffler", - "Schrumpfnazist", - "Schwachkopf", - "Schwanzlutscher", - "Schwanzträger", - "Schwätzer", - "Schweinehund", - "Schweinebacke", - "Schwuchtel", - "Seegurke", - "Sittenstrolch", - "Snob", - "Spacken", - "Spargeltarzan", - "Spasti", - "Spießer", - "Spinatwachtel", - "Spinnerin", - "Spitzel", - "Spritzgebäck", - "Stinker", - "Stinkmorchel", - "Stinkstiefel", - "Sumpfhuhn", - "Tagedieb", - "Tanztee", - "Taugenichts", - "Teufelsbraten", - "Torfkopf", - "Torfnase", - "Trampel", - "Trampeltier", - "Trantüte", - "Trottel", - "Tröte", - "Trulla", - "Tussi", - "Tyrann", - "Unflat", - "Unhold", - "Untermensch", - "Vagabund", - "Vandale", - "Vieh", - "Vielfrass", - "Vogel", - "Volldepp", - "Vollhorst", - "Vollidiot", - "Vollpfosten", - "Vollspack", - "Wachtel", - "Waldschrat", - "Wanze", - "Warmduscher", - "Warze", - "Waschweib", - "Waschlappen", - "Weichei", - "Weibsstück", - "Weinbauer", - "Wichser", - "Wiedergänger", - "Wildsau", - "Witzfigur", - "Wurm", - "Wurstgesicht", - "Xanthippe", - "Yeti", - "Zappelphilipp", - "Zausel", - "Zecke", - "Zicke", - "Ziege", - "Zimtzicke", - "Zipfelklatscher", - "Zirkusclown", - "Zofe", - "Zumsel", - "Zunsel", - "Zwitterwesen" - ] -} + "words": [ + "Aalauge", + "Aalficker", + "Aalfresse", + "Aalschwanz", + "Aalwurstverkäufer", + "Aas", + "Aasaffe", + "Aasfresser", + "Aasgeier", + "Abbumser", + "Abdeckstiftbenutzer", + "Abdeckstiftdauerbenutzer", + "Abdomen", + "Abfall", + "Abfall, biochemischer", + "Abfallecker", + "Abfalleimervagina", + "Abfallficker", + "Abfallproduckt", + "Abfallprodukt", + "Abfallschlucker", + "Abfalltonnenvollscheißer", + "Abficker", + "Abflussrohrgucker", + "Abflussrohrsauger", + "Abflußverstopfer", + "Abgard", + "Abgaskakerlake", + "Abgaslaus", + "Abgasproduzent", + "Abgefickter", + "Abnippeler", + "Abortdeckel", + "Abortschüsseltaucher", + "ABS-Bremser", + "Abschaum", + "Abscheißer", + "Abschiedswinker", + "Abseiler", + "Abseitserklärer", + "Abspritzer", + "Abspritzmuschi", + "Abspritzmuschie", + "Absturztorte", + "Absturzvogel", + "Abszess", + "Abtörner", + "Abwasserschlüfer", + "Abwasserschlürfer", + "Abwasserspucker", + "Abwasserverpester", + "Abwichhure", + "Abwichshure", + "Abzocker", + "Achselbaron", + "Achselfasching", + "Achselficker", + "Achselgrind", + "Achselhaarflechter", + "Achselhaarföner", + "Achselhaarfrisör", + "Achselhaarlutscher", + "Achselhaarratte", + "Achselhaarschneider", + "Achselhaarspalter", + "Achselhöhlenforscher", + "Achsellaus", + "Achsellecker", + "Achselriecher", + "Achselschweißfontaine", + "Achsenhöhlenforscher", + "Achterbahnindermittesitzer", + "Achterbahnkotzer", + "Achtstundenschläfer", + "Ackerarsch", + "Ackerfresse", + "Ackerpilot", + "Admiral Anal", + "Affe, abgeleckter", + "Affe, haarloser", + "Affenafterlecker", + "Affenarsch", + "Affenarschfetischist", + "Affenarschficker", + "Affenarschfurchenfetischist", + "Affenarschgesicht", + "Affenarschkratzer", + "Affenarschlecker", + "Affenarschloch", + "Affenarschpickel", + "Affenarschpopper", + "Affenarschritzenlecker", + "Affenarschwichser", + "Affenbesamer", + "Affenbumser", + "Affeneichellecker", + "Affenfehlfick", + "Affenficker", + "Affenfotze", + "Affenfresse", + "Affenfurchenfetischist", + "Affengesicht", + "Affenhausgucker", + "Affenhirn", + "Affenhirnscheißer", + "Affenhirsch", + "Affenhoden", + "Affenjockel", + "Affenjunge", + "Affenkacke", + "Affenkimme", + "Affenkind", + "Affenklaus", + "Affenkönig", + "Affenkopf", + "Affenkot", + "Affenlecker", + "Affenlutscher", + "Affenmann", + "Affenmaul", + "Affenmensch", + "Affenmuschilecker", + "Affenmutantenschiss", + "Affenpenis", + "Affenpenissauger", + "Affenpimmel", + "Affenpopo", + "Affenprinz", + "Affenpupser", + "Affenreiter", + "Affensack", + "Affenschaukel", + "Affenscheidensekretschlecker", + "Affenscheiße", + "Affenschwanzlutscher", + "Affentitte", + "Affenvergewaltiger", + "Affenvisage", + "Affenwesen", + "Affenwichser", + "Affenwichsgesicht", + "Affenzicke", + "Affgo", + "Affipups", + "Affupeter", + "Afterabschmatzer", + "Afteratmer", + "Afterforscher", + "Aftergeißel", + "Aftergelehrter", + "Afterhöhlenbewohner", + "Afterhöhlenforscher", + "Afterhölenforscher", + "Afterhöleninspektor", + "Afterhöllenfrosch", + "Afterkopf", + "Afterkriecher", + "Afterkritiker", + "Afterlecker", + "Afterloser", + "Afterschleim", + "Afterschleimhautfalte", + "Afterschlemmerer", + "Afterschlürfer", + "Afterschmatzer", + "Afterstöpsel", + "Agrobolzen", + "Airbagnachrüster", + "Akkuschrauber", + "Aktentaschenträger", + "Aktienfrühverkäufer", + "Algengrütze", + "Algenkotzer", + "Algenpillenschlucker", + "Alienmanscher", + "Alki", + "Alkoholiker", + "Alkoholklärwerk", + "Allerweltshure", + "Allerweltsnutte", + "Alles zwei mal frager", + "Allesbegatter", + "Allesbesserwisser", + "Allesgleicherlediger", + "Allesintüteneinpacker", + "Almdudler", + "Alpenfutt", + "Alphornsauger", + "Alptraum", + "Alpträumer", + "Altenheimhure", + "Altenheimnutte", + "Altenheimschlampe", + "Altersheimbesucher", + "Altpapiersammler", + "Altreifensammler", + "Altsalami", + "Altweiberficker", + "Alufolienglattstreicher", + "Alufoliengriller", + "Amaisenbär", + "Amalgamverweigerer", + "Amateur", + "Amatuerversager", + "Ameisenficker", + "Ameisenfotze", + "Ameisenfrisör", + "Amöbe", + "Amöbenbefruchter", + "Amöbenliebhaber", + "Amöbenverführer", + "Ampelanhalter", + "Ampeldrücker", + "Ampelgelbbremser", + "Ampelranroller", + "Ampelüberseher", + "Anabolikafratze", + "Anabolikafresse", + "Analacrobat", + "Analadmiral", + "Analakrobat", + "Analakustiker", + "Analanalytiker", + "Analangler", + "Analansaugstutzen", + "Analapfelficker", + "Analarbeiter", + "Analarsch", + "Analassistent", + "Analatmer", + "Analauflauf", + "Analausfluss", + "Analauslauf", + "Analball", + "Analbanana", + "Analbär", + "Analbaron", + "Analbarthaber", + "Analbefriedigungsgerät", + "Analbefruchter", + "Analbegutachter", + "Analbergsteiger", + "Analbergteiger", + "Analbesamer", + "Analbesen", + "Analbimbo", + "Analbitch", + "Analbohrer", + "Analbrause", + "Analbremse", + "Analbrot", + "Analbruder", + "Analbumser", + "Analbürste", + "Analcharakter", + "Analcowboy", + "Analdackel", + "Analdehner", + "Analdiener", + "Analdildo", + "Analdildolutscher", + "Analdruide", + "Analdrüsenausquetscher", + "Analdrüsenfetish", + "Analdrüsensaftlecker", + "Analdrüsenstinker", + "Analdusche", + "Analduscher", + "Analeber", + "Analeingangsausleuchter", + "Analente", + "Analereignisverachter", + "Analeroberer", + "Analerotiker", + "Analfan", + "Analfee", + "Analfetischist", + "Analfetischistensau", + "Analficker", + "Analfickfehler", + "Analfickung", + "Analfighter", + "Analfisch", + "Analfissur", + "Analfistel", + "Analfister", + "Analfitischist", + "Analflokati", + "Analflötenspieler", + "Analflöter", + "Analflummi", + "Analflunder", + "Analflutscher", + "Analforscher", + "Analförster", + "Analfötus", + "Analfotze", + "Analfotzenficker", + "Analfotzenlecker", + "Analfotzenschlecker", + "Analfotzentieftaucher", + "Analfotzenvergewaltiger", + "Analfraktur", + "Analfratze", + "Analfregatte", + "Analfresse", + "Analfrikadelle", + "Analfriktöse", + "Analfrisöse", + "Analfrosch", + "Analfrucht", + "Analfuchtel", + "Analfummmler", + "Analfurchenfetischist", + "Analfürst", + "Analgalster", + "Analgaukler", + "Analgeburt", + "Analgeier", + "Analgeige", + "Analgeneral", + "Analgeruchbelästiger", + "Analgeschwader", + "Analgesicht", + "Analgewitter", + "Analgezeugter", + "Analgiraffe", + "Analglocke", + "Analgnom", + "Analgoldfisch", + "Analgorn", + "Analgourmet", + "Analgrabscher", + "Analgranate", + "Analgrotte", + "Analgurke", + "Analhaarkämmer", + "Analhackfresse", + "Analheld", + "Analhelfer", + "Analhengst", + "Analhero", + "Analhexe", + "Analhoden", + "Analhodenbeschwörer", + "Analhöhlenforscher", + "Analhölenbefruchter", + "Analhopper", + "Analhorn", + "Analhorst", + "Analhuber", + "Analhund", + "Analhupe", + "Analhüpfer", + "Analhure", + "Analhurengrabscher", + "Analhurrikan", + "Analhusten", + "Analhuster", + "Analhyperbel", + "Anali", + "Analintigrator", + "Analintruder", + "Analist", + "Analjunge", + "Analkäfer", + "Analkaiser", + "Analkaktus", + "Analkanone", + "Analkäse", + "Analkasper", + "Analkatzenficker", + "Analkeks", + "Analkerze", + "Analkeule", + "Analkind", + "Analkingdome", + "Analklabauter", + "Analkleckerburg", + "Analklemme", + "Analklemtner", + "Analkloake", + "Analknecht", + "Analknödel", + "Analkobold", + "Analkonfekt", + "Analkönig", + "Analkopf", + "Analkorken", + "Analkotzer", + "Analkrabbe", + "Analkracher", + "Analkreatur", + "Analkrebs", + "Analkricher", + "Analkriecher", + "Analkrieger", + "Analkrokette", + "Analkröte", + "Analkürbis", + "Anallampe", + "Anallecker", + "Analliebhaber", + "Analligator", + "Anallocke", + "Analloge", + "Analluftpumpe", + "Anallunte", + "Anallutscher", + "Analmade", + "Analmaler", + "Analmassage", + "Analmasturbierer", + "Analmissgeburt", + "Analnasenbär", + "Analnutte", + "Analofant", + "Analonanierer", + "Analorgel", + "Analotter", + "Analpelz", + "Analpenis", + "Analpenner", + "Analperlentaucher", + "Analpfahl", + "Analpfannkuchen", + "Analpfeife", + "Analpfeifenputzer", + "Analpfirsich", + "Analpfosten", + "Analpfropf", + "Analphabet", + "Analpilger", + "Analpilot", + "Analpirat", + "Analpisser", + "Analpizza", + "Analpolierer", + "Analpopulist", + "Analpraktikant", + "Analpriester", + "Analprinz", + "Analprinzessin", + "Analprobe", + "Analprodukt", + "Analprolaps", + "Analprolet", + "Analpropeller", + "Analpumpe", + "Analpupser", + "Analqueen", + "Analquetsche", + "Analrabauke", + "Analrakete", + "Analrasierer", + "Analratte", + "Analräuber", + "Analraupe", + "Analreiniger", + "Analreinigungskraft", + "Analreiter", + "Analritter", + "Analrohrgeburt", + "Analrolle", + "Analrosine", + "Analruine", + "Analrülpser", + "Analrutsche", + "Analrutschfan", + "Analsafttrinker", + "Analsäufer", + "Analsauficker", + "Analschädel", + "Analschakal", + "Analschimmel", + "Analschlecker", + "Analschleimtrinker", + "Analschlemmer", + "Analschleuder", + "Analschlürfer", + "Analschüler", + "Analschuster", + "Analseuche", + "Analseufzer", + "Analsexritter", + "Analsonde", + "Analsondierer", + "Analsoßenschlürfer", + "Analspasti", + "Analspecht", + "Analspekulum", + "Analspender", + "Analspezialist", + "Analspiegelbild", + "Analspreizer", + "Analspritzer", + "Analstange", + "Analstecher", + "Analstopfer", + "Analstöpsel", + "Analstöpsellutscher", + "Analstöpselträger", + "Analstöpsler", + "Analstrecker", + "Analsüchtiger", + "Analtamponfresser", + "Analtankstelle", + "Analtaucher", + "Analtelefonist", + "Analterminator", + "Analterrorist", + "Analtieftaucher", + "Analtittenbumser", + "Analtorpedo", + "Analtorte", + "Analtranse", + "Analtransvestit", + "Analtrichter", + "Analtrompete", + "Analtrompetenflachwichser", + "Analtrumpete", + "Analtütenventilator", + "Analvagina", + "Analventilator", + "Analverfechter", + "Analverkehrsbetreiber", + "Analvernichter", + "Analverteiler", + "Analvertilger", + "Analverwöhner", + "Analvibrator", + "Analvinoline", + "Analvioline", + "Analwanze", + "Analwasserlecker", + "Analweiterrungsgerät", + "Analwichkopf", + "Analwichser", + "Analwind", + "Analwissenschaftler", + "Analwurm", + "Analwurst", + "Analytiker", + "Analzapfen", + "Analzerfetzer", + "Analzerleger", + "Analzwicker", + "Analzyklop", + "Analzylinder", + "Anarchist", + "Anarchopsychopath", + "Anbaggerer", + "Anbläser", + "Andenlama", + "Anfänger", + "Angeber", + "Angelrute", + "Angelrutenknutscher", + "Angelutschter", + "Angorawäscheträger", + "Angsthase", + "Angststinker", + "Anhängerkupplungsabdecker", + "Anmacher", + "Anonymspender", + "Anrufbeantworterspruchwechsler", + "Anstaltsschlampe", + "Anstandsrestelasser", + "Anstandsrestübriglasser", + "Antianthropologe", + "Antibiotikaschlucker", + "Antifaltencremebenutzer", + "Antiheld", + "Antihyperhero", + "Antiindividuum", + "Antilope", + "Antilopenarsch", + "Antimensch", + "Antiperson", + "Antistück", + "Antivirenprogrammupdater", + "Anus Analus", + "Anusauge", + "Anusbärchen", + "Anusbefriediger", + "Anusberater", + "Anusbewunderer", + "Anusbiber", + "Anusdildo", + "Anusdoktor", + "Anusexperte", + "Anusficker", + "Anusforscher", + "Anusfresse", + "Anusfrikadelle", + "Anusgeburt", + "Anusgefisteter", + "Anuskitzelfinger", + "Anuskopf", + "Anuskrapfen", + "Anuslecker", + "Anusloch", + "Anuslöffler", + "Anusmonster", + "Anuspenetrierer", + "Anuspförtner", + "Anusranger", + "Anusriecher", + "Anusverengungsmaschine", + "Anwesender", + "Apfel, fauler", + "Apfelarsch", + "Apfelbacke", + "Apfelbaumbumser", + "Apfelfotze", + "Apfelkernficker", + "Apfelkuchen", + "Apfelkuchenficker", + "Apfellecker", + "Apfelschlampe", + "Apfelschorlenschlucker", + "Apfeltasche", + "Apflussficker", + "Apflussfresser", + "Apflusslecker", + "Apflusssammler", + "Apothekengänger", + "Arbeitsbeschaffungsmaßnahme", + "Arbeitsscheuer", + "Arbeitszeiterfasser", + "Archgewichster", + "Archpickel", + "Armbanduhrträger", + "Armleuchter", + "Armleuchterhalter", + "Armseliger", + "Arnalreiter", + "Arnalritter", + "Arnuskatoffelbauer", + "Arsch", + "Arsch mit Ohren", + "Arsch mit Poposchinken", + "Arsch offen Haber", + "Arschabfall", + "Arschablecker", + "Arschabputzer", + "Arschaffe", + "Arschantilope", + "Arschaufreißer", + "Arschauskratzer", + "Arschbacke", + "Arschbackenjäger", + "Arschbackenkasper", + "Arschbackenkind", + "Arschbackenklatscher", + "Arschbackenspreizer", + "Arschbackentoni", + "Arschbanane", + "Arschbär", + "Arschbefeuchter", + "Arschbegatter", + "Arschbeleuchtung", + "Arschbepisser", + "Arschbesamer", + "Arschbesamungmaschine", + "Arschbimbomassierer", + "Arschbirne", + "Arschbock", + "Arschbohrer", + "Arschbohrmaschine", + "Arschbolzen", + "Arschbombe", + "Arschbratze", + "Arschbremse", + "Arschbumser", + "Arschbürste", + "Arschbuse", + "Arschchamäleon", + "Arschclown", + "Arschdepp", + "Arschdrenage", + "Arscheinficker", + "Arschensafter", + "Arschentjungferer", + "Arscheule", + "Arschfalte", + "Arschfaltenficker", + "Arschfaltenveredler", + "Arschfeigenfresse", + "Arschfetischist", + "Arschfickbombe", + "Arschfickemeister", + "Arschficker", + "ARSCHFICKER:IN", + "Arschfickerhure", + "Arschfickerkönig", + "Arschfickerlehrling", + "Arschfickerleisten", + "Arschfickersau", + "Arschfickfehler", + "Arschfickfehlgeburt", + "Arschfickfotze", + "Arschfickfotzenknecht", + "Arschfickgesicht", + "Arschfickkönig", + "Arschficklecker", + "Arschficklehrling", + "Arschficknarbenlecker", + "Arschficknudel", + "Arschficknutte", + "Arschficksau", + "Arschfickschlampe", + "Arschficksohn", + "Arschfickweltmeister", + "Arschfickwichsnase", + "Arschfickziege", + "Arschfingerstecker", + "Arschflöte", + "Arschflugzeug", + "Arschfonse", + "Arschfotze", + "Arschfotzenbremse", + "Arschfotzenficker", + "Arschfotzengedehnter", + "Arschfotzengesicht", + "Arschfotzenhirn", + "Arschfotzenlecker", + "Arschfotzenlutscher", + "Arschfotzenreiter", + "Arschfotzenzabel", + "Arschfotzte", + "Arschfresse", + "Arschfressenficker", + "Arschfresser", + "Arschfrisur", + "Arschfurchenausschlecker", + "Arschfurchenlecker", + "Arschfurunkel", + "Arschfüßler", + "Arschgaudi", + "Arschgebläse", + "Arschgebumsterhurensohn", + "Arschgeburt", + "Arschgefickter", + "Arschgeier", + "Arschgeige", + "Arschgeige, mit Arschhaaren bespannte", + "Arschgeigenbefruchter", + "Arschgeigenbewunderer", + "Arschgeigenfrontalwichser", + "Arschgeigengesicht", + "Arschgeigenhansel", + "Arschgeigenkuchenwicher", + "Arschgeigenlutscher", + "Arschgeigensau", + "Arschgeigenspieler", + "Arschgeigentrompete", + "Arschgeiger", + "Arschgeleckter", + "Arschgelekterhurensohn", + "Arschgelochter", + "Arschgeneral", + "Arschgepoppter", + "Arschgerüst", + "Arschgesich", + "Arschgesicht", + "Arschgesichtpimmler", + "Arschgesigtesau", + "Arschgeweih", + "Arschgeweihblödmann", + "Arschgeweihverzierer", + "Arschgewichse", + "Arschgitarre", + "Arschgitarrenpfurzer", + "Arschgnom", + "Arschgrampe", + "Arschgranate", + "Arschgranatenlecker", + "Arschgrotte", + "Arschgrube", + "Arschgürkchen", + "Arschgurke", + "Arschgurt", + "Arschhaar", + "Arschhaarbesamer", + "Arschhaarentferner", + "Arschhaarfärber", + "Arschhaarfetischist", + "Arschhaarflechter", + "Arschhaarföhner", + "Arschhaarfriseur", + "Arschhaarglätter", + "Arschhaargnom", + "Arschhaarkämmer", + "Arschhaarkauer", + "Arschhaarkiffer", + "Arschhaarkonsument", + "Arschhaarlockenzähler", + "Arschhaarmäher", + "Arschhaarmütze", + "Arschhaarrasierer", + "Arschhaarraucher", + "Arschhaarsortierer", + "Arschhaarstylelist", + "Arschhaarverehrer", + "Arschhaarwichser", + "Arschhaarzähler", + "Arschhaarzieher", + "Arschhaarzupfer", + "Arschhaken", + "Arschharrraucher", + "Arschhochhalter", + "Arschhoden", + "Arschhornhautabpuler", + "Arschhure", + "Arschhyperhero", + "Arschi", + "Arschibald", + "Arschificki", + "Arschiloge", + "Arschinhalierer", + "Arschiologe", + "Arschkacka", + "Arschkacke", + "Arschkackewurst", + "Arschkanickel", + "Arschkaninchen", + "Arschkanister", + "Arschkanone", + "Arschkante", + "Arschkantenlecker", + "Arschkanüle", + "Arschkarampengesicht", + "Arschkarotte", + "Arschkartoffel", + "Arschkastennascher", + "Arschkeibl", + "Arschkeks", + "Arschkeksler", + "Arschkerbe", + "Arschkind", + "Arschkipf", + "Arschkirsche", + "Arschklavier", + "Arschklotz", + "Arschknaller", + "Arschknecht", + "Arschknilch", + "Arschknispel", + "Arschknödel", + "Arschknolle", + "Arschknoten", + "Arschkoffer", + "Arschkofpablutscher", + "Arschkopf", + "Arschkopfgeier", + "Arschkotzer", + "Arschkrammpe", + "Arschkrampe", + "Arschkrampendrüse", + "Arschkrampf", + "Arschkranate", + "Arschkrapfen", + "Arschkratzen", + "Arschkrätzenfresse", + "Arschkratzer", + "Arschkratzfetischist", + "Arschkrause", + "Arschkrawatte", + "Arschkrebs", + "Arschkricher", + "Arschkriecher", + "Arschkrokette", + "Arschkröte", + "Arschkrümel", + "Arschkrümelficker", + "Arschkrüppel", + "Arschkruste", + "Arschkrustenlecker", + "Arschkuchen", + "Arschkuh", + "Arschlampe", + "Arschlappen", + "Arschleberfleck", + "Arschlecker", + "Arschleckfresse", + "Arschleckschwein", + "Arschling", + "Arschloch", + "Arschlochbeschwörer", + "Arschlochentlüfter", + "Arschlochentzündeter", + "Arschlocher", + "Arschlocheule", + "Arschlochfahrer", + "Arschlochficker", + "Arschlochfickfotze", + "Arschlochfurz", + "Arschlochfuttsau", + "Arschlochgesicht", + "Arschlochkatze", + "Arschlochkind", + "Arschlochkriecher", + "Arschlochlöcher", + "Arschlochmitläufer", + "Arschlochmonster", + "Arschlochnachrenner", + "Arschlochpenner", + "Arschlochpolierer", + "Arschlochpuhler", + "Arschlochsau", + "Arschlochscheiße", + "Arschlochsohn", + "Arschlochspalte", + "Arschlochvogel", + "Arschlochwarmhalter", + "Arschlochwichser", + "Arschlurch", + "Arschlutscher", + "Arschmade", + "Arschmakrele", + "Arschmeister", + "Arschmopser", + "Arschmöse", + "Arschmösenabwischer", + "Arschmösenschaum", + "Arschmuschi", + "Arschnadel", + "Arschnagler", + "Arschnase", + "Arschnutte", + "Arschöffnung", + "Arschologe", + "Arschotter", + "Arschparade", + "Arschpauker", + "Arschpenis", + "Arschpeniskopf", + "Arschpenislutscher", + "Arschpenner", + "Arschpfeife", + "Arschpickel", + "Arschpickelzersitzer", + "Arschpilz", + "Arschpilzsammler", + "Arschpimmel", + "Arschpimmelauge", + "Arschpimml", + "Arschpirat", + "Arschpisser", + "Arschpomp", + "Arschpopel", + "Arschpopeler", + "Arschpopo", + "Arschpopper", + "Arschpoppler", + "Arschprinz", + "Arschprinzessin", + "Arschprolet", + "Arschpropeller", + "Arschpuler", + "Arschpunk", + "Arschpuppenkalamari", + "Arschpupser", + "Arschrakete", + "Arschrambe", + "Arschrammler", + "Arschrasierer", + "Arschratte", + "Arschregelbluter", + "Arschriecher", + "Arschringlutscher", + "Arschritzenfummler", + "Arschritzenkehrmaschine", + "Arschritzenkrauler", + "Arschritzenlecker", + "Arschritzenrasierer", + "Arschritzenricher", + "Arschritzensackkopf", + "Arschritzerputzer", + "Arschrollade", + "Arschrosette", + "Arschsack", + "Arschsaftlutscher", + "Arschsau", + "Arschsauger", + "Arschscheißer", + "Arschschwanz", + "Arschsonde", + "Arschspaltendreck", + "Arschstinker", + "Arschtacker", + "Arschtester", + "Arschtittenständer", + "Arschtorte", + "Arschtrampe", + "Arschtrompete", + "Arschverfickter", + "Arschvibrator", + "Arschvieh", + "Arschvogel", + "Arschvollpumper", + "Arschvotze", + "Arschwackler", + "Arschwanze", + "Arschwanzenwühler", + "Arschwarmer", + "Arschwarze", + "Arschwarzenkauer", + "Arschwarzenliebhaber", + "Arschwasser", + "Arschwasserbader", + "Arschwasserkack", + "Arschwasserkocher", + "Arschwasserliebhaber", + "Arschwasserschlürfer", + "Arschwassertrinker", + "Arschwicher", + "Arschwichser", + "Arschwichskind", + "Arschwiesel", + "Arschwimmerl", + "Arschwischer", + "Arschwombat", + "Arschwurmgesicht", + "Arschwurst", + "Arschzapfen", + "Arschziege", + "Arschzipfel", + "Arschzwiebel", + "Aschenbecherficker", + "Aschenbecherlecker", + "Aschenbecherleerer", + "Aschenbecherpisser", + "Aschenbecherputzer", + "Aschenlecker", + "Aschenplatzblöder", + "Aschensammler", + "Aschgehirn", + "Aschgeige", + "Aschgesicht", + "Aschlutscher", + "Aslak", + "Asozialer", + "Asphaltbumser", + "Asphaltfresse", + "Asphaltfresser", + "Asphaltschnecke", + "Assel", + "Asselarsch", + "Asselkopf", + "Asselpackt", + "Assi", + "Assiklopper", + "Assler", + "Assomoss", + "Assozialer", + "Astaffe", + "Astloch", + "Astlochbumser", + "Astlochficker", + "Athlonübertakter", + "Atomkopf", + "Atommüllfresser", + "Atommüllschlucker", + "Atomschlumpf", + "Atomstirn", + "Atrappe", + "Aufblaßtütensammler", + "Aufreißer", + "Aufschneider", + "Aufwiegler", + "Aufzugfahrer", + "Aufzughinterherlaufer", + "Augapfel", + "Augenbrauenzupfer", + "Augenfrosch", + "Augenhaber", + "Augenschmelzer", + "Augenwasserschlürfer", + "Ausbeuter", + "Ausflussgenießer", + "Ausgeburt", + "Ausgeburt der Hölle", + "Aushilfsamöbe", + "Aushilfsnasenbär", + "Aushilfsräuber", + "Aushilfsterrorist", + "Auskunftanrufer", + "Auslaufmodel", + "Auspuffbefruchter", + "Auspuffbesamer", + "Auspuffflachwichser", + "Auspuffhure", + "Auspuffinnenbeleuchtungsmonteur", + "Auspuffrohrwichser", + "Ausriecher", + "Ausscheidungsverwerter", + "Ausschlauch", + "Aussenseiter", + "Außenspiegelumklapper", + "Außerirdischer", + "Austauschspieler", + "Auswuchs", + "Auswurf", + "Autoantennenabschrauber", + "Autobahnrechtsfahrer", + "Autobahnüberqerer", + "Autodidakt", + "Autofahrer", + "Autoficker", + "Autogrammsammler", + "Automatikfahrer", + "Autonutte", + "Autovergewaltiger", + "Axelhaarfresser", + "Axelsafttrinker", + "Axelschweiß", + "Axelschweißlecker", + "Babbefratz", + "Babybefruchter", + "Babyface", + "Babyficker", + "Babyfortz", + "Babykopf", + "Babyphonebenutzer", + "Backblech", + "Backenfotze", + "Backenspalter", + "Backfisch", + "Backofenvorheizer", + "Backpfeifengesicht", + "Backstreetboyssympathisant", + "Badehure", + "Badewannenbefruchter", + "Badewannenkind", + "Badewannenpirat", + "Badewannenpisser", + "Badewannenstöpselsitzer", + "Badewannentaucher", + "Badezimmerspiegel", + "Badvorheizer", + "BAFöG-Schmarotzer", + "Bagage", + "Bagalut", + "Baguette-Bursche", + "Baguettefresse", + "Bahnhoffotze", + "Bahnhofhure", + "Bahnhofsbücker", + "Bahnhofschlampe", + "Bahnhofspenner", + "Bahnhofsstricher", + "Baka", + "Bakla", + "Bakterienfresser", + "Bakterienschleuder", + "Balch", + "Balkongärtner", + "Balkongriller", + "Balkonkind", + "Balla-Schrunze", + "Ballermann", + "Ballertralle", + "Ballettschuh", + "Ballonarsch", + "Ballonbremser", + "Bambie", + "Bambusaffe", + "Bambusbieger", + "Bambusficker", + "Bambuskröte", + "Bambusratte", + "Bambustratte", + "Bamuskröte", + "Bananenbestäuber", + "Bananenbieger", + "Bananenesser", + "Bananenfetischist", + "Bananenficker", + "Bananenhengst", + "Bananenhure", + "Bananenlutscher", + "Bananenschalenausrutscher", + "Banause", + "Bandit", + "Bandwurm", + "Bandwurmgerippe", + "Bankert", + "Bannanengeradebieger", + "Banta", + "Baraber", + "Barbar", + "Bärenfänger", + "Bärenfotze", + "Bärenfreund", + "Bärenfut", + "Bärenjäger", + "Barracke", + "Barrackler", + "Barschloch", + "Bärtchen", + "Barthaarkolumbus", + "Bassinrandschwimmer", + "Bastard", + "Bastardensau", + "Bastardhure", + "Bastardkröte", + "Bastardvieh", + "Bastkorbflechter", + "Batterie", + "Batzen", + "Batzfinger", + "Bauarbeiterfotze", + "Baucheinzieher", + "Bauchhöhlenforscher", + "Bauchkacker", + "Bauchnabelbumser", + "Bauchnabelfussel", + "Bauchnabelschnüffler", + "Bauchschläfer", + "Bauernfänger", + "Bauernfotze", + "Bauernfraßesser", + "Bauernfünfer", + "Bauerngehilfe", + "Bauern-Gschwerl", + "Bauernjunge", + "Bauernkind", + "Bauernlümmel", + "Bauernsau", + "Bauernschädel", + "Bauernschlampe", + "Bauernschlampen", + "Bauernschlauer", + "Bauernschranze", + "Bauernsohn", + "Bauerntölpel", + "Bauerntrampel", + "Bauernwichser", + "Baumausweicher", + "Baumbefruchter", + "Baumficker", + "Baumgipfellutscher", + "Baumhure", + "Baumjunge", + "Baumkuschler", + "Baumpisser", + "Baumschmuser", + "Baumschulenangestellter", + "Baumschüler", + "Bausparer", + "Baustellenrechtsfahrer", + "Bazi", + "Bazille", + "Bazillenschleuder", + "Bazillus", + "Beckenpisser", + "Beckenrandschwimmer", + "Bedinungsanleitungsdurchleser", + "Befeuchter", + "Befruchter", + "Befruchterfurtz", + "Befruchtungsdampfer", + "Behördenbriefleser", + "Beiboot", + "Beidel", + "Beidhandfahrradfahrer", + "Beidl", + "Beidlfeidl", + "Beidlklotscha", + "Beidllutscher", + "Beidlmassur", + "Beifahrer", + "Beilagenesser", + "Beinficker", + "Beinrasierer", + "Beinschenkel", + "Beipackzettelleser", + "Beischlafbettler", + "Beivollmondvotzenschleimlecker", + "Bekiffter", + "Bekloppter", + "Belästigung", + "Belästigungspanda, sexueller", + "Belegesammler", + "Beleidiger", + "Beleidigung", + "Beluschie", + "Bematschter", + "Benachteiligter, gehirnmassemäßig", + "Bengel", + "Benhure", + "Benor", + "Benzinpreisvergleicher", + "Bergaufbremser", + "Bergauffotze", + "Bergaufwärtsbremser", + "Bergbremser", + "Bergente", + "Berghochbremser", + "Bergschoof", + "Bergseesurfer", + "Bergziege", + "Bergzige", + "Berserker", + "Berufsarsch", + "Berufsopfer", + "Besamungstechnicker", + "Bescheißer", + "Beschimpfung", + "Besenkammerkind", + "Besenkammernutte", + "Besenschrankunfall", + "Besoffener", + "Besserwisser", + "Bestie", + "Betriebsanleitungsleser", + "Betriebsunfall", + "Betrüger", + "Betscheck", + "Bettbrunzer", + "Bettdeckenausschüttler", + "Bettenmacher", + "Bettkantenhure", + "Bettlakenbespritzer", + "Bettler", + "Bettnässer", + "Bettpfanne", + "Bettpisser", + "Bettseicher", + "Bettsockenträger", + "Bettspaltenficker", + "Bettwichser", + "Bettwurst", + "Beuhoden", + "Beutel", + "Beutelratte", + "Beutelschneider", + "Bezirksbefruchter", + "Bezirksnutte", + "Biatch", + "Biberbrust", + "Biberbutzemann", + "Bibergesicht", + "Biberschwanz", + "Bieberkacke", + "Biedermann", + "Bierauskotzer", + "Bierbaucherklimmer", + "Bierbauer", + "Bierbruder", + "Bierdeckelbenutzer", + "Bierdimpfe", + "Bierdimpfel", + "Bierflaschenficker", + "Bierflaschenfister", + "Bierhalter", + "Bierlöffel", + "Biermischer", + "Biernichtleertrinker", + "Biernippler", + "Bierschlampe", + "Biertrinker", + "Bierwärmer", + "Biesamratte", + "Biest", + "Bildabkacker", + "Billighopper", + "Billigtariftelefonierer", + "Bimpel", + "Bimssteinfresser", + "Bindenablecker", + "Bindenträger", + "Binnensegler", + "Biogartenanleger", + "Biogasproduzent", + "Biokomposter", + "Bioquadratkäse", + "Biotonne", + "Biotopenfresse", + "Biowurst", + "Birkenstockträger", + "Birnenbumser", + "Birnenpflücker", + "Birnschädl", + "Bisamratte", + "Bisko", + "Bissgurke", + "Bitch", + "Bitchfresse", + "Blähungenzurückhalter", + "Blamagekind", + "Blammagenutte", + "Blammierkönig", + "Blammiernutte", + "Blasarsch", + "Blasebalg", + "Blasebalgbenutzer", + "Blasehase", + "Blasenpuster", + "Blasjunge", + "Blassschnabel", + "Blätterabhefter", + "Blattlaus", + "Blaubart", + "Blaupistenfahrer", + "Blaze", + "Blechbläser", + "Blechfotze", + "Blechgesicht", + "Blechreder", + "Blechscheißbarbie", + "Blechtrottel", + "Bleistiftabnager", + "Bleistiftanspitzer", + "Bleistiftschreiber", + "Bleistiftstemmer", + "Blemm", + "Blender", + "Bleppo", + "Bletschbirne", + "Blex", + "Blimse", + "Blincky", + "Blindflansch", + "Blindgänger", + "Blindpopper", + "Blindriehme", + "Blinse", + "Blitzfotze", + "Blobfisch", + "Blockflötengesicht", + "Blockwart", + "Blödarsch", + "Blödbär", + "Blödel", + "Blöder", + "Blödfurz", + "Blödi", + "Blödian", + "Blödianisch", + "Blödkopf", + "Blödkröte", + "Blödmann", + "Blödmannsgehilfe", + "Blödmannsgehilfenanwärter", + "Blödo", + "Blödpups", + "Blödsack", + "Blödschädel", + "Blödsocke", + "Blödvogel", + "Blöhu", + "Blombe", + "Blondchen", + "Blondie", + "Blondieficker", + "Blondienestecher", + "Blootz", + "Blötschkopf", + "Blowjobgeber", + "Blowjobgenießer", + "Blowjobvermittler", + "Blubber", + "Blubberbacke", + "Blubberblasenzerstörer", + "Blubbergesicht", + "Bluesbirne", + "Blümchen", + "Blümchenficker", + "Blümchenhippie", + "Blümchenpflücker", + "Blumenficker", + "Blumengießer", + "Blumengutzureder", + "Blumenkind", + "Blumenkohlpimmel", + "Blumenriecher", + "Blumentopfschwimmer", + "Blumenvielfaltsgenießer", + "Blutegel", + "Blutfotzenstecher", + "Bluthund", + "Blutjochen", + "Blutkrätsche", + "Blutpenis", + "Blutpisser", + "Blutsauger", + "Blutschlange", + "Blutspendekollabierer", + "Blutwurst", + "Bobbel", + "Bobbelkopf", + "Bobbelkopfbastard", + "Böbel", + "Bobycarpilot", + "Bock, geiler", + "Bockfotzengesicht", + "Böckloch", + "Bocksau", + "Bockwurstlutscher", + "Bockwurstwasserduscher", + "Bockwurstwassersäufer", + "Bodenabschlecker", + "Bodenauflecker", + "Bodenloch", + "Bodenschläfer", + "Bodenturner", + "Bohnenhirte", + "Bohnenpupser", + "Bohnenstange", + "Bohrinselfötus", + "Bohrloch", + "Bohrmannbumser", + "Bolzen", + "Bombenkacker", + "Bömm", + "Bommelgesicht", + "Bommelmützenträger", + "Bonbonlutscher", + "Bonbonrundlutscher", + "Bongwassertrinker", + "Bonsaigärtner", + "Bonse", + "Bonsenkind", + "Bonzo", + "Bordsteinlangsamhochfahrer", + "Bordsteinschwalbe", + "Borstenschwein", + "Bortsteinfresse", + "Böser", + "Bösewicht", + "Botoxbarbie", + "Bottich", + "Bowlingkugelficker", + "Boxenluder", + "Boytoybenutzer", + "Brackwasserschnorchler", + "Braddelfresse", + "Braddler", + "Bradl", + "Brandkanne", + "Brandstifter", + "Brasskopf", + "Bratarsch", + "Bratfisch", + "Bratkartoffel", + "Brattucke", + "Bratwurst", + "Bratwurstfriedhof", + "Bratwurstkönig", + "Bratzbacke", + "Bratzbirne", + "Bratze", + "Brauchwasserduscher", + "Brauereipferd", + "Brautstraußfänger", + "Brechbombenauslöser", + "Brechkübel", + "Brechmittel", + "Brechwurst", + "Bregenschmalz", + "Breitarschantilope", + "Breitarschgazelle", + "Breitarschpavian", + "Breitfotzenschlucker", + "Breitmaulfrosch", + "Bremsbelägewechsler", + "Bremse", + "Bremsklotzleger", + "Bremsspur", + "Bremsspurenkacker", + "Bremsspurenriecher", + "Brettfrisur", + "Brettgesicht", + "Brezel", + "Brezelsalzabpopler", + "Brezensalzer", + "Bridschn", + "Briefbeschwerer", + "Briefkastenleerer", + "Briefmarkenablecker", + "Briefmarkenfeuchtlecker", + "Brillenbär", + "Brillenentspiegler", + "Brillenputzer", + "Brillenschlange", + "Brillentaucher", + "Britschelecker", + "Britschen", + "Britschn", + "Brontosaurus", + "Brötchenaufbacker", + "Brötchendesigner", + "Brötchenvorbacker", + "Brotfahrer", + "Brotgehirn", + "Brothaufen", + "Brotkopf", + "Brotkrustenabschneider", + "Brotmaschinenschneider", + "Brotrindenabschneider", + "Brotspinne", + "Brotzeitgeier", + "Browserchatter", + "Broz", + "Bruchbudenvermieter", + "Bruchpilot", + "Brückenbruder", + "Bruder, lauwarmer", + "Bruder, warmer", + "Bruderanal", + "Brühpimmel", + "Brüllaffe", + "Brüller", + "Brummbär", + "Brummer", + "Brunftsaucentrinker", + "Brunnenvergifter", + "Brunskopf", + "Brunsnuckel", + "Brunzarmatur", + "Brunzblöde", + "Brunzbüchse", + "Brunzbuschen", + "Brunzdip", + "Brunzer", + "Brunzfetischist", + "Brunzkachel", + "Brunzkarre", + "Brunzwiese", + "Brunzwimmerl", + "Brustbeutelträger", + "Brusthaarfärber", + "Brusthaarrasierer", + "Brusthaartoupetträger", + "Brusthaarzupfer", + "Brustnippler", + "Brustnuckler", + "Brustschwimmer", + "Brusttaschenträger", + "Brustwartzenvergewaltiger", + "Brustwarzenlecker", + "Brustwarzennibbler", + "Bsekuh", + "Bubbel", + "Bubenficker", + "Bubi", + "Bubilutscher", + "Bubischeißer", + "Bücherwurm", + "Buchleser", + "Büchsenfleischdepp", + "Büchsenöffner", + "Büchsensuppefresser", + "Buchstabenjongleur", + "Buchtel", + "Buchzumfilmleser", + "Buck", + "Bückbursche", + "Buckel", + "Buckelfips", + "Buckelfrau", + "Buckelkopf", + "Bückhuhn", + "Bückling", + "Bücklurch", + "Bückpage", + "Bückstück", + "Büffel", + "Büffelfotze", + "Büffelhüfte", + "Büffeljäger", + "Büffelkrieger", + "Büffelpenisvorhaut", + "Büffetansteller", + "Bügelhilfebenutzer", + "Buhlteufel", + "Buhmann", + "Bukelwaal", + "Bullenbeißer", + "Bullenklöte", + "Bullmops", + "Bumelsack", + "Bumerl", + "Bumler", + "Bummsbomber", + "Bummsfrikadelle", + "Bummspille", + "Bumsbanane", + "Bumsbär", + "Bumsbatzen", + "Bumsbeule", + "Bumsbiber", + "Bumsbirne", + "Bumsbolzen", + "Bumsbremse", + "Bumsbrötchen", + "Bumsburg", + "Bumschlumpf", + "Bumsclown", + "Bumsdose", + "Bumsebiene", + "Bumsebübchen", + "Bumsebube", + "Bumser", + "Bumseratte", + "Bumsfehler", + "Bumsficker", + "Bumsfickmaschiene", + "Bumsfotze", + "Bumsfrickadelle", + "Bumsfrikadelle", + "Bumsgerumsch", + "Bumsgesicht", + "Bumsglocke", + "Bumsgrotte", + "Bumshaserl", + "Bumshure", + "Bumshurenmöse", + "Bumsi", + "Bumskabine", + "Bumskanickel", + "Bumskarnickel", + "Bumsklumpen", + "Bumsknecht", + "Bumsknochen", + "Bumsknödel", + "Bumskolbenstengel", + "Bumskopf", + "Bumskuh", + "Bumslochwichser", + "Bumsluder", + "Bumslusche", + "Bumsmaschine", + "Bumsnudel", + "Bumspropeller", + "Bumsratte", + "Bumsschädel", + "Bumsschlumpf", + "Bumsschnalle", + "Bumsspiritus", + "Bundfaltenträger", + "Bunke", + "Bunkerjunge", + "Bürgerbefruchter", + "Burgruinenpinkler", + "Büroklammernsammler", + "Büroklammerverbieger", + "Bürokrat", + "Büropfeife", + "Bürstenkopf", + "Buschfurzer", + "Buschkuckuk", + "Buschnutte", + "Busengrabscher", + "Busenschmuser", + "Busenwärmer", + "Bushaltestellenficker", + "Bussard", + "Busvornesitzer", + "Buswinker", + "Büttel", + "Butterberg", + "Butterbirne", + "Butterloch", + "Cabriogeschlossenfahrer", + "Calgonreiber", + "Calibrabastler", + "Callboy", + "Callgirl", + "Camper", + "Canaille", + "Caramellutscher", + "Casanova", + "Cassettenbeschrifter", + "CD-Hüllenbenutzer", + "CD-Labelzentrierhilfenverwender", + "Chamäleon", + "Chameur", + "Chaot", + "Charakterschwein", + "Charminbär", + "Charterfluglandungsklatscher", + "Chartshörer", + "Cheater", + "Checklistenbearbeiter", + "Cheeseburgergurkenesser", + "Chefgrüßer", + "Chefzäpfchen", + "Chilliverweigerer", + "Chilyschnupfer", + "Chitinpenis", + "Chlorbrille", + "Chlorbrillenträger", + "Chlorfresse", + "Chromosomenabwurfstelle", + "Chromosomenfasching", + "Chromosomengepansche", + "Citybumser", + "Citypenner", + "Citypupser", + "Clearasilversuchsgelände", + "Clerasieltestgelände", + "Clerasilmodell", + "Clerasiltestgelände", + "Clerasilversuchsgelände", + "Cloake", + "Clochar", + "Clonebaby", + "Closhar", + "Clownficker", + "Cocktailkirschenesser", + "Colabüchsenrandablecker", + "Colatrinker", + "Computerrubbler", + "Computerrunterfahrer", + "Condomauszuzler", + "Condomficker", + "Cornflakesfresser", + "Corpusschänder", + "Coutstule", + "Coverbandmusiker", + "Cowboy", + "Coyote", + "Crackbaby", + "Crackhure", + "Cracknutte", + "Crackschlampe", + "Cretin", + "Cromosomenfasching", + "Cuntwurst", + "Currywurst", + "Cyberschlampe", + "Cyberspack", + "Dachbodenfrosch", + "Dachplatte", + "Dachrinnenreiniger", + "Dackel", + "Dackelarsch", + "Dackelficker", + "Dackelkotwurst", + "Dackelpreuß", + "Dackelschlächter", + "Dackeltrainer", + "Dackelzecke", + "Dackelzüchter", + "DAL Druckspüler", + "Damenradfahrer", + "Damensattelreiter", + "Dämlack", + "Dammschnittler", + "Dampfader", + "Dampfbügeleisenbenutzer", + "Dampfnudel", + "Dampfplauderer", + "Dampfwalzenschieber", + "Danebenficker", + "Danebenpinkler", + "Danebenpisser", + "Dankesager", + "Dapp", + "Dardabahntester", + "Darmablecker", + "Darmamöbe", + "Darmausschlürfer", + "Darmausspülfetischist", + "Darmdübel", + "Darmficker", + "Darmflorist", + "Darmfresse", + "Darminhalt", + "Darmkopf", + "Darmkrause", + "Darmlutscher", + "Darmquastenzorro", + "Darmriecher", + "Darmschlürfer", + "Darmwanddurchfetzer", + "Darmwandgucker", + "Darmzottenkrößler", + "Darmzottenmassierer", + "Datensicherer", + "Dattelkönig", + "Dauerausscheider", + "Dauercamper", + "Dauererrektion", + "Dauerflenner", + "Dauerhaftnörgler", + "Dauerlutscher", + "Dauerschass", + "Dauerverletzter", + "Dauerwellenträger", + "Dauerwichser", + "Daumenlutscher", + "Daunenschläfer", + "Deckbock", + "Deckenblickpinkler", + "Deckenficker", + "Deckenrausfurzer", + "Deckschrubber", + "Defensivfahrer", + "Definitionslücke", + "Deibla", + "Deichkind", + "Deichschwein", + "Delphinficker", + "Demagoge", + "Demmet", + "Dennis", + "Deodorierer", + "Deotrottel", + "Depiod", + "Depp", + "Depp vom Dienst", + "Deppala", + "Deppat", + "Deppkopf", + "Deppl", + "Deppsau", + "Desperado", + "Diaphragmaablutscher", + "Diätmacher", + "Diätschlampe", + "Dickarsch", + "Dickbauch", + "Dickdarmakrobat", + "Dickdarmaustrinker", + "Dickdarmbesattler", + "Dickdarmschmuser", + "Dickdarmversilberer", + "Dickkopf", + "Dickmilchtrinker", + "Dicknase", + "Dickschädel", + "Dickschwein", + "Diddelhopser", + "Diddelhuber", + "Diddlfan", + "Dieball", + "Diebsgesindel", + "Diener", + "Dieselhandschuhtanker", + "Dieselhandschuhträger", + "Digitaluhrableser", + "Dildo", + "Dildoarschficker", + "Dildobenutzer", + "Dildodan", + "Dildodiener", + "Dildoeinhorn", + "Dildofee", + "Dildofisch", + "Dildofresser", + "Dildokönig", + "Dildokopf", + "Dildolecker", + "Dildolutscher", + "Dildomechaniker", + "Dildomonster", + "Dildoschlampe", + "Dillo", + "Dinoarsch", + "Dinosaurier", + "Dinosaurierbein", + "Dinosaurierfötzchen", + "Dinosaurierfresse", + "Dinovisage", + "Diphteritisträgerzelle", + "Diplomverkehrsinselbepflanzer", + "Diplomwichser", + "Dippabspritzer", + "Dirne", + "Disconebelmaschine", + "Disconutte", + "Discounterpreisvergleicher", + "Discozulautfinder", + "Diskettenbenutzer", + "Diskettenbeschrifter", + "Diskettenformatierer", + "Diskettenlaufwerksbefruchter", + "Dissopfer", + "Dixiklosurfer", + "Döbel", + "Dödel", + "Dödelarsch", + "Dödelgesicht", + "Dödelkopf", + "Dödelmeyer", + "Dödelsammler", + "Dödeltomate", + "Dodl", + "Dokuleser", + "Doldie", + "Doldificker", + "Dollbohrer", + "Dölli", + "Dollo", + "Dolm", + "Dolorie", + "Dölzer", + "Domina", + "Dominapeitsche", + "Dönerfotze", + "Dönerfurzer", + "Dönerkopf", + "Dönermuschi", + "Dönerpenis", + "Dönertier", + "Donneerfotze", + "Donnerfotze", + "Donutfresse", + "Doofbommel", + "Doofdödel", + "Doofer", + "Doofi", + "Doofian", + "Doofie", + "Doofkopf", + "Doofmann", + "Doofmannsgehilfe", + "Doofmannsgehilfengehilfe", + "Doofmors", + "Doofnase", + "Doofnudel", + "Doofnuss", + "Doofpups", + "Doofsack", + "Dooftüte", + "Doppelbettuntenschläfer", + "Doppeldepp", + "Doppelhuper", + "Doppelluftmatratzenschläfer", + "Doppelmäppchenbesitzer", + "Doppelschleifenbinder", + "Doppeltrottel", + "Doppelwhopper", + "Dorfdepp", + "Dorfdosierer", + "Dorffahrrad", + "Dorfgarnele", + "Dorfjunge", + "Dorfkind", + "Dorfkopf", + "Dorfkuh", + "Dorflatschen", + "Dorfloch", + "Dorfmatratze", + "Dorfmoped", + "Dorfnutte", + "Dorfratschen", + "Dorfschlampe", + "Dorftrampel", + "Dorftrottel", + "Dork", + "Dörpel", + "Dörrdattel", + "Dorsch", + "Dorschkopp", + "Dösbattl", + "Doschi", + "Dosenbefruchter", + "Dosenfutterfresser", + "Dosenkoch", + "Dosenkot", + "Dosenscheißer", + "Dosenwurst", + "Döser", + "Döskopf", + "Dotter", + "Dotterkopf", + "Downloadmanager", + "Drache", + "Dracula", + "Drahtkopf", + "Drahtmuschi", + "Drakula", + "Drallala", + "Dramaficker", + "Drangtonnenbefruchter", + "Dreck", + "Dreck am Stecken", + "Dreckamsel", + "Dreckarsch", + "Dreckbär", + "Dreckbein", + "Dreckfink", + "Dreckfotze", + "Dreckfred", + "Dreckfresse", + "Dreckfresser", + "Dreckfurz", + "Dreckhaufen", + "Dreckhecke", + "Dreckhund", + "Dreckhure", + "Dreckkind", + "Dreckloch", + "Dreckluder", + "Drecksack", + "Drecksarsch", + "Drecksarschhure", + "Drecksau", + "Drecksaubastard", + "Drecksaufotze", + "Drecksaugesicht", + "Drecksauhure", + "Drecksaupillemannarsch", + "Drecksbalg", + "Drecksbangert", + "Drecksbankert", + "Drecksbäre", + "Drecksbaum", + "Drecksbäurin", + "Dreckschippengesicht", + "Dreckschlampe", + "Dreckschleuder", + "Dreckschlitz", + "Dreckschlüpper", + "Dreckschwein", + "Dreckseule", + "Dreckseumel", + "Drecksficker", + "Drecksfilet", + "Drecksfotze", + "Drecksfrigatte", + "Drecksgeburt", + "Drecksgesicht", + "Drecksgöre", + "Dreckshenne", + "Dreckshure", + "Drecksjöre", + "Dreckskerl", + "Dreckskind", + "Dreckskitzler", + "Drecksküter", + "Dreckslump", + "Drecksmuli", + "Drecksmuschi", + "Drecksnutte", + "Dreckspatz", + "Dreckspuscher", + "Drecksschippengesicht", + "Drecksschlampe", + "Drecksschleuder", + "Drecksschlipper", + "Dreckstück", + "Drecksverhurter", + "Drecksviech", + "Dreckswichser", + "Drehpimmel", + "Drehstuhlbesamer", + "Dreibein", + "Dreibeiner", + "Dreibuchstabensfahrer", + "Dreidl", + "Dreieckkopf", + "Dreiecksdackel", + "Dreieckskacker", + "Dreihandwichser", + "Dreikäsehoch", + "Dreilochfotzensau", + "Dreilochschlampe", + "Dreilochstute", + "Dreipimmelgesicht", + "Dreiviertelschlauer", + "Dreizahnhure", + "Dreklecker", + "Dreksgesicht", + "Dreusel", + "Drewes", + "Drittlock", + "Drittsack", + "Drogendealer", + "Drogenhändler", + "Drogenjunkie", + "Drogenkurier", + "Drogenopferkörper", + "Drogenticker", + "Drogenverhau", + "Drohne", + "Drosselrollerfahrer", + "Drüberrutscher", + "Druchgenudelter", + "Druckerpapiersparer", + "Druckersteckerfestschrauber", + "Druckfehlergucker", + "Druckfurzer", + "Druckspüler", + "Druffi", + "Drykant", + "Dschaggvuollaa", + "Dschungelkind", + "Dubba", + "Dubbel", + "Dudelsack", + "Dudelsackaufbläser", + "Dudenauswendiglernen", + "Dudennachschlager", + "Duftbaumaufhänger", + "Duftkerzenbenutzer", + "Dullhans", + "Dulli", + "Dumbatz", + "Dumbo", + "Dumitru", + "Dummarsch", + "Dummbatz", + "Dummbeutel", + "Dummbold", + "Dummbolzen", + "Dummbrot", + "Dummbrotbäcker", + "Dummdepp", + "Dummdödel", + "Dummei", + "Dummer", + "Dummerchen", + "Dummerle", + "Dummfick", + "Dummfotze", + "Dummfresse", + "Dummfutt", + "Dummfuttlecker", + "Dummhirn", + "Dummi", + "Dummkopf", + "Dummlaller", + "Dummsau", + "Dummscheißer", + "Dummschlumpf", + "Dummschulschwänzer", + "Dummschwätzer", + "Dummschwein", + "Dummtröte", + "Dümpel", + "Dümpelschwimmer", + "Dumpfbacke", + "Dumpfdödel", + "Dumpfhuhn", + "Dumpfmuffe", + "Dumpfsack", + "Dumpfwebler", + "Duncke", + "Dunkelbumser", + "Dunkelknutscher", + "Dunkelmann", + "Dunkeltapp", + "Dünnblechschweißer", + "Dünnbrettbohrer", + "Dünnmatz", + "Dünnschiss", + "Dünnschissgurgler", + "Dünnschißkopf", + "Dünnschisslecker", + "Dünnschissmaschine", + "Dünnschißsäufer", + "Dünnschisstrinker", + "Dünnschissverhärter", + "Dünnschisswilli", + "Dünnstrahlpinkler", + "Dünsbatterie", + "Dünschissman", + "Dunsen", + "Durchfall", + "Durchfallarschficker", + "Durchfallfresse", + "Durchfallfresser", + "Durchfallgesicht", + "Durchfallgulasch", + "Durchfallgurgler", + "Durchfallidol", + "Durchfallkind", + "Durchfalllecker", + "Durchfallpisse", + "Durchfallsuppe", + "Durchfalltrinker", + "Durchgepeitschter", + "Dürrling", + "Duschenbrunzer", + "Duschgeleinschmierer", + "Duschhaubenträger", + "Duschkabinenabtrockner", + "Duschwasservorwärmer", + "Dussel", + "Dusselgurr", + "Dust", + "Dutz", + "Ebayklauer", + "Eberhart", + "Echit", + "Echofurzer", + "Eckelarsch", + "Eckenbums", + "Eckenkind", + "Eckenpinkler", + "Eckenpisser", + "Eckenscheißer", + "Eckenwetzer", + "Edelhure", + "Edelsau", + "Edelweißgießer", + "Eflmetergesicht", + "Egoist", + "Egoschwein", + "Egozentriker", + "Ehrabschneider", + "Eibefruchter", + "Eibesammer", + "Eibläser", + "Eichel", + "Eichelbär", + "Eichelbeißer", + "Eichelbirne", + "Eichelfotze", + "Eichelfresse", + "Eichelfresser", + "Eichelfurz", + "Eichelgesicht", + "Eichelgestreichel", + "Eichelgoudaesser", + "Eichelgulasch", + "Eichelhaube", + "Eichelherr", + "Eichelhörnchen", + "Eichelkaas", + "Eichelkäse", + "Eichelkäseesser", + "Eichelkäsefresser", + "Eichelkäsegourmet", + "Eichelkäselutscher", + "Eichelkäsemensch", + "Eichelkäseschlecker", + "Eichelkäsevorkoster", + "Eichelkäseweglutscher", + "Eichelkäsezüchter", + "Eichelkäslecker", + "Eichelkönig", + "Eichelkopf", + "Eichelkopftuch", + "Eichelkranskäse", + "Eichelmann", + "Eichelmasseur", + "Eichelnutte", + "Eichelpräsident", + "Eichelprinz", + "Eichelreiber", + "Eichelsack", + "Eichelsalat", + "Eichelsammler", + "Eichelschaftauskratzer", + "Eichelzecke", + "Eichelzyste", + "Eichhorn", + "Eichhörnchen", + "Eichhörnchenficker", + "Eidechse", + "Eierbär", + "Eierbaumler", + "Eierbecher", + "Eierbefruchter", + "Eierbeißer", + "Eierdieb", + "Eieresser", + "Eierfeile", + "Eierfeilengesicht", + "Eierficker", + "Eierfotze", + "Eierfotzenkopf", + "Eierfurz", + "Eiergesicht", + "Eierhals", + "Eierhändler", + "Eierknoten", + "Eierkopf", + "Eierkrauler", + "Eierkuh", + "Eierlecker", + "Eierliköralkoholiker", + "Eierlikörschlürfer", + "Eierloch", + "Eierlutscher", + "Eiermörder", + "Eiernacken", + "Eierpappenaufbewahrer", + "Eierratte", + "Eiersackwärmer", + "Eiersammler", + "Eierschaas", + "Eierschaukler", + "Eierspieler", + "Eierstocksonde", + "Eiertitte", + "Eieruhrumdreher", + "Eierverrigeler", + "Eierzuzler", + "Eigenmann", + "Eigenurintrinker", + "Eimerficker", + "Einbahnstraße", + "Einfaltspinsel", + "Einfingertastaturendrücker", + "Eingangsteppich", + "Eingriffunterhosenträger", + "Einkaufstaschenmitnehmer", + "Einkaufswagenscheißer", + "Einkaufswagenschieber", + "Einkaufswagenzurückschieber", + "Einlauf", + "Einlegesohlenträger", + "Einmalkommer", + "Einmeterbrettspringer", + "Einserschreiber", + "Einspurhirn", + "Einsteinverschnitt", + "Eintagsklöte", + "Einwegschlampe", + "Einzeller", + "Einzelverbindungsnachweisanforderer", + "Eipeller", + "Eisbärenvertilger", + "Eisberg", + "Eisenarsch", + "Eisenpenis", + "Eiskratzer", + "Eiskunstlaufgucker", + "Eislatte", + "Eisweihergrot", + "Eiterbein", + "Eiterbeule", + "Eiterbeuleninspekteur", + "Eiterbirne", + "Eitereinschmierer", + "Eiterfotze", + "Eiterfotzenficker", + "Eitergeschwür", + "Eiterlecker", + "Eiterlochficker", + "Eiterlutscher", + "Eitermöse", + "Eiterpickel", + "Eiterpickelaufbeißer", + "Eiterpimmel", + "Eiterpustel", + "Eitersack", + "Eiterschädel", + "Eiterschaumschlürfer", + "Eiterschlecker", + "Eiterschlürfer", + "Eiterschwanz", + "Eiterwichser", + "Eitlupenscheißer", + "Eiweißbrocken", + "Eiweißbunker", + "Eiweißgurgler", + "Ejakulationsmöhre", + "Ekelfotze", + "Ekelkotzpaket", + "Ekelkröte", + "Ekelmann", + "Ekelpaket", + "Ekelschwein", + "Ekelschwuchtel", + "Ekelzwerg", + "Elchhoden", + "Elchkotze", + "Elchpenis", + "Elefant im Porzelanladen", + "Elefantenarschlecker", + "Elefantenbaby", + "Elefantendarmauslecker", + "Elefantenficker", + "Elefantenfotze", + "Elefantenfut", + "Elefantenkacke", + "Elefantennasenmann", + "Elefantennippelsauger", + "Elefantenpenis", + "Elefantenpickel", + "Elefantenrüssellanzieher", + "Elefantenschwanz", + "Elefantenvergewaltiger", + "Elektrogokartfahrer", + "Elektrogokartfanatiker", + "Elektrogriller", + "Elektromesserbenutzer", + "Elektrozaunbepisser", + "Elender", + "Elfmeter", + "Elfmetergesicht", + "Elfmeterverschießer", + "Ellenbogenkuh", + "Ellenbogenlecker", + "Elster", + "Eluschaf", + "E-Mail-Ausdrucker", + "Emanze", + "Embriofresse", + "Embryokind", + "Embryonalfäustling", + "Embryozehennagel", + "Emporkömmling", + "Enddarmmasseur", + "Endpfosten", + "Energiesparhure", + "Engelsmacher", + "Engholm", + "Enteiserspraybenutzer", + "Entenarsch", + "Entenbrust", + "Entenficker", + "Entenfütterer", + "Entenschädel", + "Enthusiast", + "Entjungferungszuhälter", + "Entsafter", + "Entschuldiger", + "Entschuldigungszettelschreiber", + "Erbschleicher", + "Erbsenhirn", + "Erbseninnenwandpolierer", + "Erbsenpürrierer", + "Erbsenzähler", + "Erdbeerenentkerner", + "Erdbeersau", + "Erdbeerschwanz", + "Erdbeerzuckerer", + "Erdferkel", + "Erdlochvergewaltiger", + "Erdnuckel", + "Erdnuss", + "Erdnußschäler", + "Erektionsopfer", + "Erektionspumpe", + "Erpresser", + "Erpsenzähler", + "Errektionsstörung", + "Ersatzbanksitzer", + "Ersatzspieler", + "Ersatzteillager", + "Erschlagen", + "Erstklässler", + "Erzdackel", + "Erzgauner", + "Escapetastenlutscher", + "Eselficker", + "Eselgeburt", + "Eselkackhaufen", + "Eselohr", + "Eselohrscheiße", + "Eselpopo", + "Eselpopper", + "Eselschniedel", + "Eselschwanzsauger", + "Eselskind", + "Eselspermavorkoster", + "Eselständer", + "Eselsvergewaltiger", + "Eselvergewaltiger", + "Eselzahnbulle", + "ESP-Fahrer", + "Eukalyptuspisser", + "Eulenficker", + "Eulenfroschkopf", + "Eulenkind", + "Eulenpimmel", + "Eumel", + "Eumelkind", + "Eunuch", + "Eunuche", + "Eunuchenziege", + "Euterfresse", + "Euterfummler", + "Euterlecker", + "Euterlutscher", + "Euterspritzer", + "Evolutionsbremse", + "Evolutionsbremser", + "Exfreundeeinlader", + "Exhibitionist", + "Exkrementefresser", + "Exkrementenfresser", + "Exkrementenlutscher", + "Experiment", + "Explosionsscheißer", + "Extremscheißer", + "Fächerfotze", + "Fachidiot", + "Fäckalfresser", + "Fackosau", + "Fädder", + "Fahrradbergaufschieber", + "Fahrradhelmträger", + "Fahrradöler", + "Fahrradreifenflicker", + "Fahrradspangenträger", + "Fahrradständerbenutzer", + "Fahrstuhlfahrer", + "Fäkalartist", + "Fäkalbomber", + "Fäkalboulette", + "Fäkalcowboy", + "Fäkalfanatiker", + "Fäkalfetischist", + "Fäkalfreak", + "Fäkalfresse", + "Fäkalgesicht", + "Fäkalienesser", + "Fäkalienfresser", + "Fäkalienmahlzeit", + "Fäkalienmeister", + "Fäkalientaucher", + "Fäkalienzubereiter", + "Fäkalkraut", + "Fäkalschleimnascher", + "Fäkalstriezel", + "Fäkalwurm", + "Fäkelimitat", + "Falaffel", + "Falkenarsch", + "Falkplanfalschfalter", + "Fallobstsammler", + "Falschatmer", + "Falschheit", + "Falschmünzer", + "Falschspieler", + "Faltenarsch", + "Faltenglied", + "Faltenhoden", + "Faltensack", + "Faltenspritzer", + "Faltenvogel", + "Famielienschlampe", + "Familiencomputerbenutzer", + "Familienficker", + "Familienfotosscanner", + "Familienhure", + "Familiennutte", + "Fangofunz", + "Faschingsbirne", + "Fatzke", + "Faulfußfetischist", + "Faulgesicht", + "Faullenzer", + "Faulpelz", + "Faultier", + "Faunabetrachter", + "Faustficker", + "Faustfüßer", + "Fazke", + "Fechtgefuchtler", + "Fehleinschätzung", + "Fehler", + "Fehlermeldung", + "Fehlfick", + "Fehlgeburt", + "Feigling", + "Feigloch", + "Feinrippträger", + "Feinstaubdiskutierer", + "Feinstaubjunkie", + "Feinstaubmarkenkleber", + "Feinstaubminderer", + "Feinwaschmittelbenutzer", + "Feistkotzer", + "Fekalienfürst", + "Feldhure", + "Felgenlutscher", + "Fellfresse", + "Fellgesicht", + "Fellpanzer", + "Femke", + "Fennes", + "Fensterbube", + "Fensterfresse", + "Fensterkipper", + "Fensterplatzsitzer", + "Fensterwichser", + "Ferkel", + "Ferkelficker", + "Ferkelhodenesser", + "Ferkelschneider", + "Ferkelwemser", + "Ferngesteuerter", + "Fernlichtabsteller", + "Fernlichtfahrer", + "Fernseher", + "Fernsehgucker", + "Fernsehkamerawinker", + "Fertiggerichteesser", + "Festnetztelefonierer", + "Fetischist", + "Fettabsaugerkiller", + "Fettarsch", + "Fettarschantilope", + "Fettarschqualle", + "Fettberg", + "Fettfaltenficker", + "Fettfleck", + "Fettfotze", + "Fettfresse", + "Fettgesicht", + "Fettgondel", + "Fetti", + "Fettklops", + "Fettklopstitte", + "Fettkloß", + "Fettkopf", + "Fettlappen", + "Fettmops", + "Fettnäpfchentreter", + "Fettpickel", + "Fettranzen", + "Fettrosette", + "Fettsack", + "Fettsackmonster", + "Fettsau", + "Fettschwein", + "Fettspacken", + "Fettsuchtsalat", + "Fettviehhändler", + "Fettwalze", + "Fettwanst", + "Fettwanze", + "Fettwelle", + "Fettwiesel", + "Fetznschädl", + "Feuchtfister", + "Feuchtfurzanalytiker", + "Feuchtfurzer", + "Feuchtgebiet", + "Feuchti", + "Feuchtnießer", + "Feuchtraumbesitzer", + "Feuchtträumer", + "Feuchtwichser", + "Feuerlöschpisser", + "Feuerzeuggasschnüffler", + "Fichtnficker", + "Fichviech", + "Fickaffe", + "Fickarsch", + "Fickauge", + "Fickbacke", + "Fickbanane", + "Fickbärchen", + "Fickbimbo", + "Fickbirne", + "Fickbolzen", + "Fickbratze", + "Fickbumms", + "Fickbumsgebläse", + "Fickdackel", + "Fickdose", + "Fickdraht", + "Ficke", + "Fickel", + "Fickelfick", + "Ficken", + "Fickender", + "Fickenfotzer", + "Ficker", + "Fickerbse", + "Fickerfalte", + "Fickerlein", + "Fickerspast", + "Fickface", + "Fickfehler", + "Fickfetzen", + "Fickfetzerl", + "Fickfinger", + "Fickfisch", + "Fickfischverkäufer", + "Fickfleisch", + "Fickflittchen", + "Fickforelle", + "Fickfotze", + "Fickfotzengeruch", + "Fickfotzenlecker", + "Fickfotzenscheiß", + "Fickfotzenschleimgesicht", + "Fickfred", + "Fickfresse", + "Fickfrikadelle", + "Fickfrosch", + "Fickfröscherl", + "Fickfrosh", + "Fickfurz", + "Fickfussel", + "Fickgazelle", + "Fickgeburt", + "Fickgelegenheit", + "Fickgeschreie", + "Fickgesicht", + "Fickheftchengesicht", + "Fickhenne", + "Fickhörnchen", + "Fickhuhn", + "Fickhund", + "Fickhure", + "Ficki", + "Fickinger", + "Fickisau", + "Fickkasten", + "Fickkind", + "Fickkopf", + "Fickkröte", + "Fickkrüppel", + "Fickmaschine", + "Fickmatratze", + "Fickmaul", + "Fickmöbel", + "Fickmops", + "Fickmöse", + "Fickmuschi", + "Ficknase", + "Ficknasenbär", + "Ficknatter", + "Ficknessel", + "Ficknickel", + "Ficknudel", + "Ficknudellutscher", + "Ficknutella", + "Ficknutte", + "Ficknuttenarsch", + "Fickotter", + "Fickpeidl", + "Fickpflaume", + "Fickpfosten", + "Fickpfotzenabspritzer", + "Fickpfotzenlecker", + "Fickpimmel", + "Fickpisse", + "Fickritze", + "Fickrohr", + "Fickrotze", + "Ficksack", + "Ficksahnenauflecker", + "Ficksau", + "Ficksauer", + "Fickschädel", + "Fickscheiße", + "Fickschinken", + "Fickschlampe", + "Fickschleuder", + "Fickschlitte", + "Fickschlitten", + "Fickschlitz", + "Fickschlumpf", + "Fickschnitte", + "Fickschnitzel", + "Fickschüssel", + "Fickschwanz", + "Ficksi", + "Ficksohn", + "Fickspatz", + "Fickspecht", + "Fickstelze", + "Fickstempel", + "Fickstotzen", + "Fickstück", + "Fickstute", + "Ficksüchtiger", + "Ficktittenarschsau", + "Ficktörtchen", + "Fickunfall", + "Fickvieh", + "Fickvogel", + "Fickvotzensau", + "Fickweiler", + "Fickwichser", + "Fickwiesel", + "Fickwurm", + "Fickwurst", + "Fickwurstlecker", + "Fiesling", + "Figurant", + "Filmheuler", + "Filmrissvortäuscher", + "Filzlaus", + "Filzlausinstallateur", + "Finger, schlimmer", + "Fingerablecker", + "Fingerer", + "Fingerfresse", + "Fingerhutbenutzer", + "Fingerkacker", + "Fingernagelkauer", + "Fingernagelknipser", + "Fingernägelsaubermacher", + "Finsterling", + "Firewalleinschalter", + "Fischarsch", + "Fischarschbetaster", + "Fischauge", + "Fischbauer", + "Fischbirne", + "Fischbrötchen", + "Fischertränker", + "Fischface", + "Fischfetischist", + "Fischficker", + "Fischfotze", + "Fischfotzengourmet", + "Fischfratze", + "Fischfresse", + "Fischfut", + "Fischgeicht", + "Fischgesicht", + "Fischgräte", + "Fischgrätenentferner", + "Fischi", + "Fischkopf", + "Fischkutter", + "Fischlfut", + "Fischmac", + "Fischmaul", + "Fischmösenfetischist", + "Fischmuschi", + "Fischritze", + "Fischschnitzel", + "Fischspaten", + "Fischstäbchen", + "Fishface", + "Fister", + "Fisting Opfer", + "Fixer", + "Fixpunkt", + "Flachbildficker", + "Flachbrettwichser", + "Flachficker", + "Flachgewichster", + "Flachland", + "Flachlandgorilla", + "Flachnase", + "Flachpfeife", + "Flachschädel", + "Flachschippe", + "Flachschiss", + "Flachschwimmer", + "Flachstruller", + "Flachtitte", + "Flachverblender", + "Flachwasserpaddler", + "Flachwasserpirat", + "Flachwasserschwimmer", + "Flachwicher", + "Flachwichser", + "Flachwichsturbine", + "Flachzange", + "Fladderfotze", + "Flaggenwichser", + "Flamo", + "Flanellhemdträger", + "Flange", + "Flanschgesicht", + "Flaschenficker", + "Flaschenfurzer", + "Flaschengeist", + "Flaschenhalbleertrinker", + "Flaschenöffner", + "Flaschenöffnerbenutzer", + "Flaschenpisser", + "Flaschenrammler", + "Flatschehoden", + "Flatter", + "Flatterfotze", + "Flattervotze", + "Flatus", + "Flegel", + "Flegelliebhaber", + "Fleischflöte", + "Fleischfresser", + "Fleischkaputze", + "Fleischkatapult", + "Fleischklops", + "Fleischmade", + "Fleischpeitsche", + "Fleischpenis", + "Fleischtier", + "Fleischwolfficker", + "Fleißigtuer", + "Fliegendreck", + "Fliegenficker", + "Fliegenfurz", + "Fliegenhirn", + "Fliegenklatscher", + "Fliegenpilzfresse", + "Fliegenschiss", + "Fließbandaffe", + "Flipperfresse", + "Flitchen", + "Flittchen", + "Flitzenkackerscheißer", + "Flitzkacke", + "Floggie", + "Flohficker", + "Flötenkäse", + "Flötenlutscher", + "Flötenschlumpf", + "Flötenspieler", + "Flötenwilly", + "Flöze", + "Flummigesicht", + "Flunder", + "Flusensiebbenutzer", + "Flussabwärtspaddler", + "Flussfotze", + "Flüssigkacke", + "Flüssigkotfresser", + "Flüssigseifenbenutzer", + "Flutschauge", + "Flutschfinger", + "Flutschmuschi", + "Fohlen", + "Fohlenficker", + "Föhnfrisurträger", + "Foliengriller", + "Follpfosten", + "Folterknecht", + "Fopi", + "Forelle", + "Formelsammlungbenutzer", + "Fortzpisser", + "Forunkelfresse", + "Forunkelknabberer", + "Forz", + "Forzer", + "Forzkanone", + "Forzkarnikel", + "Forzknochen", + "Fötenhälftenficker", + "Fötenvergewaltiger", + "Fötenverlöter", + "Fotoküsser", + "Fottwompa", + "Fötusficker", + "Fötusfresser", + "Fötusfummler", + "Fötzchen", + "Fotze", + "Fotze, ausgeleierte", + "Fotzedübel", + "Fotzeknecht", + "Fotzelappen", + "Fotzenabsonderung", + "Fotzenarsch", + "Fotzenarschgebärenstein", + "Fotzenaushöhler", + "Fotzenbaby", + "Fotzenbademeister", + "Fotzenbär", + "Fotzenbepisser", + "Fotzenberster", + "Fotzenbesamer", + "Fotzenblutlecker", + "Fotzenbock", + "Fotzenbumser", + "Fotzenbürste", + "Fotzenclown", + "Fotzendildolecker", + "Fotzendrecklutscher", + "Fotzendunstglocke", + "Fotzeneichhörnchen", + "Fotzenentsafter", + "Fotzeneumel", + "Fotzenface", + "Fotzenfalter", + "Fotzenfetischist", + "Fotzenficker", + "Fotzenfister", + "Fotzenflasche", + "Fotzenfleischwurstesser", + "Fotzenforscher", + "Fotzenfresse", + "Fotzenfreund", + "Fotzenfriseur", + "Fotzenfrosch", + "Fotzenfruchtalarm", + "Fotzenfurz", + "Fotzenfurzer", + "Fotzengammel", + "Fotzengaul", + "Fotzengeburt", + "Fotzengeficke", + "Fotzengefieder", + "Fotzengeflecht", + "Fotzengelantine", + "Fotzengenerator", + "Fotzengerümpel", + "Fotzengeschwür", + "Fotzengesicht", + "Fotzengestell", + "Fotzengewächs", + "Fotzenglibber", + "Fotzenglibbermaul", + "Fotzenglotzer", + "Fotzengnu", + "Fotzengockel", + "Fotzengonzo", + "Fotzengreifer", + "Fotzengrizzly", + "Fotzengulasch", + "Fotzenhebel", + "Fotzenhirn", + "Fotzenhobel", + "Fotzenhobler", + "Fotzenhölentapezierer", + "Fotzenhuber", + "Fotzenhure", + "Fotzenhurenwichser", + "Fotzenjäger", + "Fotzenjockey", + "Fotzenkanal", + "Fotzenkäse", + "Fotzenkind", + "Fotzenklatscher", + "Fotzenklemtner", + "Fotzenklump", + "Fotzenknaller", + "Fotzenknecht", + "Fotzenknechtficker", + "Fotzenknilch", + "Fotzenknödel", + "Fotzenknorpel", + "Fotzenkontrolleur", + "Fotzenkopf", + "Fotzenköter", + "Fotzenkotze", + "Fotzenkrampf", + "Fotzenkrauler", + "Fotzenkricher", + "Fotzenkriecher", + "Fotzenkriechtier", + "Fotzenkrümel", + "Fotzenkrüppel", + "Fotzenkruste", + "Fotzenkruster", + "Fotzenlappen", + "Fotzenlecker", + "Fotzenlöckchen", + "Fotzenluschi", + "Fotzenlutscher", + "Fotzenmülleimer", + "Fotzennudel", + "Fotzenöffner", + "Fotzenpenis", + "Fotzenpickel", + "Fotzenpisser", + "Fotzenpudding", + "Fotzenpuppe", + "Fotzenradierer", + "Fotzenragout", + "Fotzenrammler", + "Fotzenranz", + "Fotzenreißer", + "Fotzenriecher", + "Fotzenritter", + "Fotzenrocker", + "Fotzenrotz", + "Fotzenrotzkotzer", + "Fotzensafttrinker", + "Fotzensau", + "Fotzensauger", + "Fotzenschädel", + "Fotzenscheiße", + "Fotzenscheißer", + "Fotzenschlampe", + "Fotzenschlecker", + "Fotzenschleim", + "Fotzenschleimesser", + "Fotzenschleimi", + "Fotzenschleimkopf", + "Fotzenschleimlecker", + "Fotzenschleimlutscher", + "Fotzenschleimschlucker", + "Fotzenschleimschlürfer", + "Fotzenschleimspecht", + "Fotzenschleimtrinker", + "Fotzenschleimvernichter", + "Fotzenschlotzer", + "Fotzenschlund", + "Fotzenschrubber", + "Fotzenschwein", + "Fotzenseich", + "Fotzensohn", + "Fotzensorbet", + "Fotzensoße", + "Fotzenspangler", + "Fotzenspanler", + "Fotzenspecht", + "Fotzenspeck", + "Fotzenspreizer", + "Fotzenstart", + "Fotzenstiel", + "Fotzenstopfer", + "Fotzenstute", + "Fotzensucher", + "Fotzensuppe", + "Fotzentieftaucher", + "Fotzentrockner", + "Fotzentroll", + "Fotzenuntersucher", + "Fotzenverächter", + "Fotzenvergewaltiger", + "Fotzenverschließer", + "Fotzenverstopfer", + "Fotzenvieh", + "Fotzenvogel", + "Fotzenvollkotzer", + "Fotzenwegwerfprodukt", + "Fotzenweißbrot", + "Fotzenwichse", + "Fotzenwichser", + "Fotzenzyklop", + "Fotzer", + "Fotzerich", + "Fotzgör", + "Fotzi", + "Fotzka", + "Fotzkopf", + "Fotzl", + "Fotzlappen", + "Fotzlappengeschwür", + "Fotzleiche", + "Fotzlöffel", + "Fotzmutter", + "Fotznacken", + "Fotzpocke", + "Fotzreibe", + "Fotzschleimlecker", + "Fotzschnüffler", + "Fotztrommler", + "Frankensteins Monster", + "Fratze", + "Fratzegulasch", + "Fratzengeballer", + "Fratzengulasch", + "Fratzenmacher", + "Fratzkotzer", + "Frauenarzt", + "Frauenpenis", + "Frauenrechtgeber", + "Frauenversteher", + "Freakfresse", + "Frechdachs", + "Freddy", + "Frederik", + "Freestyler", + "Fregatte", + "Freiarschaffe", + "Freibiergesicht", + "Freibierlätschn", + "Freier", + "Freifickfotze", + "Freilichtbumser", + "Freizeitalkoholiker", + "Freizeitmasturbist", + "Freizeitonanist", + "Fremdgänger", + "Fremdkörper", + "Fresse", + "Fressender", + "Fresser", + "Fressferkel", + "Fressgeiler", + "Fresskopf", + "Fresssack", + "Frettchen", + "Frettchengesicht", + "Frettchenschnauze", + "Freudenmädchen", + "Freundenmutterficker", + "Freundinenanfurzer", + "Freundschaftsopfer", + "Frevler", + "Friedhofsdesserteur", + "Friedhofsjodler", + "Friedhofsleichenausgraber", + "Friedhofsleichenbefruchter", + "Frikadelle", + "Frikadellenfresse", + "Frikadellenpeter", + "Frikadellenstreichler", + "Frischfleischfresser", + "Frischfocker", + "Frischling", + "Frischluftatmer", + "Frischmilchtrinker", + "Frisösenficker", + "Fristeneinhalter", + "Fritöse", + "Fritösenkopf", + "Frittenbäcker", + "Frittengesicht", + "Fritteusenschrubber", + "Frontalbalzer", + "Frontanelle", + "Frontanellenkopf", + "Frontschwein", + "Frosch", + "Froscharsch", + "Froschbieber", + "Froschficker", + "Froschfotze", + "Froschfotzenficker", + "Froschfotzengesicht", + "Froschfotzenhauptmann", + "Froschfotzenkadaver", + "Froschfotzenlecker", + "Froschfotzenleder", + "Froschfotzenschlecker", + "Froschfresse", + "Froschfressenkind", + "Froschgeburt", + "Froschkopf", + "Froschlaich", + "Froschlecker", + "Froschlocke", + "Froschpenis", + "Froschpickel", + "Frösie", + "Frostbeule", + "Frotteebettwäschebezieher", + "Frotteesockenträger", + "Frucht, hohle", + "Fruchtblasenentkeimer", + "Fruchtblasenriss", + "Früchtchen", + "Früchtequark", + "Früchteteetrinker", + "Fruchtwassergesicht", + "Fruchtwasserpirat", + "Fruchtwassertrinker", + "Fruchtzwerg", + "Frühblinker", + "Frühbucher", + "Früheinfädler", + "Frühficker", + "Frühkommer", + "Frühspritzer", + "Frühstarter", + "Frühstücksfernsehgucker", + "Frühstücksfurz", + "Frühstücksopfer", + "Frühzubettgeher", + "Frustscheißer", + "Fuchsgiraffe", + "Fuchspickel", + "Fuchsschwanzverbieger", + "Fuchziger, falscher", + "Fuckasaurus Rex", + "Fucker", + "Fuckhure", + "Fuddel", + "Fuddler", + "Fudiloch", + "Fudlappal", + "Füdu", + "Fufu", + "Fundamentalkot", + "Fünferschüler", + "Funz", + "Funzenforscher", + "Funzfummler", + "Furbyficker", + "Furchendackel", + "Furchenfratze", + "Furchenschleifer", + "Furchensoße", + "Fürst der Finsternis", + "Furtzkopf", + "Furunkel", + "Furunkelabschneider", + "Furunkelauslecker", + "Furunkelsauger", + "Furz", + "Furzantillope", + "Furzatmiger", + "Furzbacke", + "Furzbaron", + "Furzbirne", + "Furzblasenfabrik", + "Furzeimer", + "Furzer", + "Furzeschnüffler", + "Furzfresse", + "Furzfressender", + "Furzgeburt", + "Furzgeige", + "Furzgesicht", + "Furzgitarre", + "Furzgranate", + "Furzhaarklemmer", + "Furzkanone", + "Furzkanonenverkäufer", + "Furzkarnickel", + "Furzkartoffel", + "Furzkiffer", + "Furzkissen", + "Furzknecht", + "Furzknoten", + "Furzkopf", + "Furzköpfiger", + "Furzloch", + "Furzlöffel", + "Furzmulde", + "Furznase", + "Furznickel", + "Furzparfumnote", + "Furzpastete", + "Furzpiepe", + "Furzrübe", + "Furzsau", + "Furzschlucker", + "Furzschnüffler", + "Furztüte", + "Furzunterdrücker", + "Furzveredler", + "Fußabstreifer", + "Fußabtreter", + "Fussballaufklebersammler", + "Fußballbauch", + "Fußballfotze", + "Fußballhoden", + "Fußballschuhficker", + "Füßekitzler", + "Fussel", + "Fusselbirne", + "Fusselfiesling", + "Fusselfotze", + "Fusselfresser", + "Fusselfuß", + "Fusselgesicht", + "Fusselhirn", + "Fusselmußgesicht", + "Fusselpimmel", + "Fusselwurst", + "Fußfetischist", + "Fußföhner", + "Fusskind", + "Fußnagelfeiler", + "Fußnägelverspeiser", + "Fußpilz", + "Fußpilzfermentierer", + "Fußpilzkocher", + "Fut", + "Futarschbrunzer", + "Futauge", + "Futbraxn", + "Futbunker", + "Futbussler", + "Futfisch", + "Futfischer", + "Futhirn", + "Futjucken", + "Futjuler", + "Futkanister", + "Futkarunkel", + "Futkäse", + "Futkeks", + "Futkind", + "Futknecht", + "Futkopf", + "Futlapp", + "Futlappen", + "Futlappendöner", + "Futlappengespenst", + "Futlapperl", + "Futlecker", + "Futmost", + "Futnag", + "Futnudel", + "Futsaftsauger", + "Futsau", + "Futsaulecker", + "Futschädel", + "Futschädl", + "Futschleimtaucher", + "Futschnüffler", + "Fütterer", + "Futtes", + "Futtlapperl", + "Futtloch", + "Futtweib", + "Futz", + "Futz im Schlafrock", + "Futze", + "Futzkriecher", + "Fuznase", + "Fuzzi", + "Gabelbock", + "Gackpflaume", + "Gaffer", + "Gagafock", + "Gagapenis", + "Gaggilutscher", + "Galgenficker", + "Galgengesicht", + "Galgenvogel", + "Gameshowzuschauer", + "Gammel", + "Gammelarschficker", + "Gammelface", + "Gammelfleisch", + "Gammelfleischdöner", + "Gammelfleischfresse", + "Gammelfleischtitte", + "Gammelfresse", + "Gammelfurz", + "Gammelgesicht", + "Gammelkind", + "Gammelkopf", + "Gammelwurst", + "Gammler", + "Gammlomat", + "Gangbangfanatiker", + "Gangbangopfer", + "Gangbangstute", + "Gangster", + "Ganove", + "Ganovenfresse", + "Ganzkörpergretsche", + "Ganzkörpergulasch", + "Ganzkörperkondom", + "Ganzkörpermöse", + "Ganzkörpertanga", + "Garagenbesitzer", + "Garagenparker", + "Garagentapezierer", + "Garagentorfernbediener", + "Gardinenstange", + "Gartengerät", + "Gartengnom", + "Gartenhausmakler", + "Gartenkrallenbenutzer", + "Gartenkräuterpflanzer", + "Gartenschlauch", + "Gartenzaunstreicher", + "Gartenzwerg", + "Gartenzwergaufsteller", + "Gartenzwergsammler", + "Gartenzwergschubkarrenbepflanzer", + "Gartenzwergvergewaltiger", + "Gaskopf", + "Gasnarr", + "Gaukler", + "Gauner", + "Gebärmutterabfall", + "Gebärmutterabfallprodukt", + "Gebärmutterbesucher", + "Gebärmutterdurchfallhaber", + "Gebärmutterfrikase", + "Gebärmuttergeschwür", + "Gebärmutterschlachtschiff", + "Gebirgstrottel", + "Gebrauchsanweisungsleser", + "Geburtsfehler", + "Geburtstagsblumenpflücker", + "Geburtstagständchensinger", + "Gedichtauswendiglerner", + "Gedichteauswendiglerner", + "Geek", + "Gefängnisfriseur", + "Gefängnissmauergesicht", + "Gefisteter", + "Gefrierbrandfürchter", + "Gefühlsdusler", + "Gefühlskrüppel", + "Gegenverkehrsabblender", + "Gegenwindpisser", + "Gehängesammler", + "Geheimnummernvergesser", + "Gehirn", + "Gehirnakrobat", + "Gehirnamöbe", + "Gehirnamputierter", + "Gehirnfotze", + "Gehirnkaries", + "Gehirnklopfer", + "Gehirnloser", + "Gehirnpygmäe", + "Gehirnsturm", + "Gehirntumor", + "Gehirnvakuum", + "Gehirnverwarzter", + "Gehirnwindungsschleifer", + "Gehopse", + "Gehorcher", + "Gehörschutzträger", + "Gehsteiggeher", + "Gehsteigpanzer", + "Gehwegpanzer", + "Gehwegradler", + "Geiferer", + "Geilarsch", + "Geilspecht", + "Geißbock", + "Geißel der Menschheit", + "Geisterbahnschaffner", + "Geisterfahrerausweicher", + "Geisterfahrerüberholer", + "Geisterfahrerverfolger", + "Geisteskrüppel", + "Geizer", + "Geizhals", + "Geizkragen", + "Geländelegasteniker", + "Gelbbremser", + "Gelbphasenbremser", + "Gelbzahnlackaffe", + "Geldfälscher", + "Geldscheffler", + "Geldscheinlecker", + "Geldscheißer", + "Geleeklumpen", + "Gelgeier", + "Gelsattelradler", + "Gemeini", + "Gemüseputzer", + "Gemüsesheriff", + "General Anal", + "Genexperiment", + "Genitalartist", + "Genitalbrot", + "Genitalficker", + "Genitalgesicht", + "Genitalherpes", + "Genitalienzyklop", + "Genitalkasper", + "Genitalkrüppel", + "Genitalminimalist", + "Genitalschnüffler", + "Genitalverstauchung", + "Genkind", + "Genkreatur", + "Geodreickmesser", + "Geofotze", + "Gerippe", + "Gernegroß", + "Geröllgürtel", + "Geruchsverbreiter", + "Gesäßbehinderung", + "Gesäßvioline", + "Geschenkeeinpacker", + "Geschenkpapierbügler", + "Geschirrabtrockner", + "Geschirreinweicher", + "Geschirrtuchbügler", + "Geschissener", + "Geschlächtsorgan", + "Geschlechtsbaracke", + "Geschlechtsdepp", + "Geschlechtsfrikadelle", + "Geschlechtsofen", + "Geschlechtsteilreiniger", + "Geschmeiß", + "Geschubster", + "Geschwollendaherredner", + "Geschwulstkopf", + "Geschwür", + "Geschwürlutscher", + "Gesetzesbrecher", + "Gesetzesfürchter", + "Gesichsmissbildung", + "Gesichstbarometer", + "Gesicht", + "Gesichtfasching", + "Gesichtfutt", + "Gesichtlutscher", + "Gesichtsakrobat", + "Gesichtsalarm", + "Gesichtsamputation", + "Gesichtsanus", + "Gesichtsärger", + "Gesichtsarsch", + "Gesichtsbänderriss", + "Gesichtsbaracke", + "Gesichtsbarake", + "Gesichtsbaustelle", + "Gesichtsbesamung", + "Gesichtsbesen", + "Gesichtsbremse", + "Gesichtsbrokkoli", + "Gesichtsbunker", + "Gesichtscontainer", + "Gesichtsdruide", + "Gesichtseintopf", + "Gesichtselfemter", + "Gesichtselfmeter", + "Gesichtsexperiment", + "Gesichtsfasching", + "Gesichtsfinsternis", + "Gesichtsfotze", + "Gesichtsfotzenvieh", + "Gesichtsfoul", + "Gesichtsfriedhof", + "Gesichtsfünf", + "Gesichtsgenital", + "Gesichtsgrätsche", + "Gesichtsgrill", + "Gesichtsgulasch", + "Gesichtsgullasch", + "Gesichtsgully", + "Gesichtsgulsch", + "Gesichtskadaver", + "Gesichtskaktus", + "Gesichtskarambulage", + "Gesichtskarpfen", + "Gesichtskatheter", + "Gesichtskerker", + "Gesichtskirmes", + "Gesichtskoffer", + "Gesichtsköter", + "Gesichtskranker", + "Gesichtskrapfen", + "Gesichtskrokette", + "Gesichtskrüppel", + "Gesichtslähmung", + "Gesichtslegasteniker", + "Gesichtsmakrele", + "Gesichtsmanege", + "Gesichtsmaske", + "Gesichtsmassaker", + "Gesichtsmatraze", + "Gesichtsmofa", + "Gesichtsmönch", + "Gesichtsmoped", + "Gesichtsmortadella", + "Gesichtsmöse", + "Gesichtsmülleimer", + "Gesichtsmungungel", + "Gesichtsmuräne", + "Gesichtsmutant", + "Gesichtsnull", + "Gesichtsopfer", + "Gesichtspanzerwendeplatz", + "Gesichtspause", + "Gesichtspenis", + "Gesichtspimmel", + "Gesichtspizza", + "Gesichtsprinz", + "Gesichtspritsche", + "Gesichtspuller", + "Gesichtsrollstuhl", + "Gesichtsruine", + "Gesichtsschande", + "Gesichtsscheißer", + "Gesichtsschnitzel", + "Gesichtssechs", + "Gesichtstampon", + "Gesichtstoilette", + "Gesichtstrompete", + "Gesichtsüberraschung", + "Gesichtsumweltverschmutzer", + "Gesichtsunfall", + "Gesichtsvagina", + "Gesichtsverbrechen", + "Gesichtsversuch", + "Gesindel", + "Gesischtsfraktur", + "Gesocksjäger", + "Gesox", + "Gespenst", + "Gespött", + "Gesteigpanzer", + "Gestörter", + "Gestromter", + "Gestrüpp", + "Gestücht", + "Getränkefotze", + "Getränkumrührer", + "Getriebesandmischer", + "Gewächs", + "Geweihhaufen", + "Gewinnspielteilnehmer", + "Gewitterfürchter", + "Gewitterfurz", + "Gewitterhexe", + "Gewitterziege", + "Gewohnheitsficker", + "Gewürm", + "Gewürzhändler", + "Gezücht", + "Gezuppel", + "Ghettogangster", + "Ghettokind", + "Ghettoschlampe", + "Gibbisonpenner", + "Gibsnacken", + "Gichtfresse", + "Gichtgesicht", + "Gichtgondel", + "Gichtgriffel", + "Gichthaxen", + "Gichtkopf", + "Gichtpimmel", + "Giebelmolch", + "Gierhals", + "Gierschlund", + "Giftmischer", + "Giftpilzfresser", + "Giftschlange", + "Giftzwerg", + "Giftzwergbumser", + "Giggikopf", + "Gigi", + "Gimp", + "Gimpel", + "Gipskopf", + "Gipsnacken", + "Giraffe", + "Giraffenhoden", + "Gischti", + "Gismondi", + "Gitarrenfurzer", + "Gittarrenausweider", + "Gitterfresse", + "Glabusterbärchen", + "Glabusterperle", + "Glaskugel", + "Glatzenföhner", + "Glatzhaariger", + "Glatzkopf", + "Gleitcremebenutzer", + "Gleitcremebumser", + "Glibberbrot", + "Glibberfotze", + "Glied, Darwins fehlendes", + "Gliedmusik", + "Gliedvorzeiger", + "Gloifi", + "Glotzer", + "Glotzkopf", + "Glotzkrebs", + "Glubschauge", + "Glubscher", + "Glubschi", + "Glücksmensch", + "Glückspfennigaufheber", + "Glückspillengesicht", + "Glücksradmitrater", + "Glücksritter", + "Glücksspieler", + "Gluggl", + "Glumpe", + "Glupschi", + "Glutscher", + "Gnom", + "Gnomjunge", + "Gnomkind", + "Gnomwichser", + "Gnufotzenficker", + "Gogobefruchter", + "Gogobesammer", + "Gogoficker", + "Gogogirlbegrabscher", + "Goldfisch", + "Goldfischzüchter", + "Golfkrafpen", + "Golfplatzfresse", + "Golfwichser", + "Gondelabfahrer", + "Gonokockenjodler", + "Googlesucher", + "Gordon", + "Göre", + "Goretexjackenträger", + "Gorilla", + "Gorillablauarsch", + "Gorn", + "Gorrilakot", + "Gosselgöre", + "Gossenhure", + "Gossenpenner", + "Gossenschlampe", + "Götterfurzpalme", + "Gourmet", + "Grabräuber", + "Grabschänder", + "Grabscher", + "Grabschi", + "Grabsteinpisser", + "Graf Koks", + "Graf Koks vom Gaswerk", + "Graf Koks von der Gasanstalt", + "Graf Koks von der Kohlengrube", + "Graf Pimmel von der Wichsanstalt", + "Graf Rotz von der Popelsburg", + "Granatennutte", + "Grantler", + "Grasaffe", + "Grasdackel", + "Grasfresser", + "Grashalmbegrabscher", + "Grashalmentwurzler", + "Grasnarbenficker", + "Grätchenmodermöse", + "Grätenpuler", + "Gratisprobenbenutzer", + "Grätsche", + "Grattler", + "Grauhaarüberfärber", + "Graupe", + "Grazl", + "Greenhorn", + "Greisenficker", + "Greizdeifi", + "Gremlin", + "Grenzsteinversetzer", + "Grenzwertbeachter", + "Griesgram", + "Grießbrei", + "Grindarschgesicht", + "Grindhurenviech", + "Grindnischl", + "Grindpenis", + "Grindsocke", + "Grinsblech", + "Grinsendeklohbürste", + "Grinsepimmel", + "Grinsewitsch", + "Grinsmaschine", + "Grinwichser", + "Grischperl", + "Grisselfresse", + "Grobmotoriker", + "Groschenhure", + "Großkotz", + "Großmaul", + "Großstdtjuppi", + "Großvieheinheit", + "Grote", + "Grottenmolch", + "Grottenolm", + "Grottensohn", + "Grottenwichser", + "Grufti", + "Gruftie", + "Gruftigirl", + "Gruftkönig", + "Grundgebührsparer", + "Grundkurswiederholer", + "Grundschulnutte", + "Grünkohlkotzer", + "Grünschnabel", + "Grünspanansetzer", + "Grunzelsau", + "Grunzschwein", + "Gruschelmonster", + "Grützkopf", + "Grützwurst", + "Gscheidhaferl", + "Gschwerl", + "Gsichtserna", + "Gsichtsgrapfen", + "Gsichtshans", + "Gsichtszylinder", + "Gubbelfisch", + "Gucklochspanner", + "Guffel", + "Gugelhupf", + "Gulaschfresse", + "Gulaschgesicht", + "Gulaschgülle", + "Gulaschsuppe", + "Güllegurgler", + "Gülleprinz", + "Gülleschlürfer", + "Gülletaucher", + "Gülletrinker", + "Güllewurm", + "Gullibewohner", + "Gullifotze", + "Gullifresse", + "Gullilochfurzer", + "Gullyfresse", + "Gullykröte", + "Gullylilie", + "Gumbo", + "Gummibärchenlutscher", + "Gummibärchenvergewaltiger", + "Gummibaumzüchter", + "Gummibenutzer", + "Gummiente", + "Gummifotze", + "Gummifotzenficker", + "Gummihandschuhspühler", + "Gummihexe", + "Gummihosenbenutzer", + "Gummihosenpisser", + "Gummihosenstruller", + "Gummihosenträger", + "Gummihund", + "Gummijäger", + "Gummikopf", + "Gummimöse", + "Gummimösenliebhaber", + "Gummimuschi", + "Gummipuppe", + "Gummipuppenbefruchter", + "Gummipuppenbesamer", + "Gummipuppenbesitzer", + "Gummipuppenfreak", + "Gummipuppenhengst", + "Gummipuppenvergewaltiger", + "Gummiritter", + "Gummisau", + "Gummischlüpferträger", + "Gummiseilspringer", + "Gummistiefelbauer", + "Gummistiefelträger", + "Gummitarzan", + "Gummivotze", + "Gümpel", + "Günstling", + "Gunzlinga", + "Gurkenbauer", + "Gurkenfresse", + "Gurkenfurz", + "Gurkenhals", + "Gurkenhans", + "Gurkenhobel", + "Gurkenidiologist", + "Gurkenkönig", + "Gurkenkopp", + "Gurkenlutscher", + "Gurkenmaschinenbestauner", + "Gurkennase", + "Gurkenquast", + "Gurkenschäler", + "Gurkenschrulli", + "Gurkenspasti", + "Gurkentopf", + "Gurtanschnaller", + "Gürtelrosenzüchter", + "Gürusfresse", + "Güsselsack", + "Gussradwichser", + "Gutenachtgeschichtenleser", + "Gutschwätzer", + "Gutwetterfahrer", + "Gwandwanzn", + "Gymnastikballhocker", + "Haararschzupfer", + "Haarefreiwilligabschneider", + "Haarlaus", + "Haarnetzträger", + "Haarspalter", + "Haartrockenföhner", + "Habbo", + "Habenichts", + "Hackenspack", + "Hackfleischficker", + "Hackfleischfresse", + "Hackfleischkopf", + "Hackfleischsadist", + "Hackfressarsch", + "Hackfresse", + "Hackfressengrübel", + "Hackmack", + "Hackspiel", + "Hackzahnfresse", + "Haderlump", + "Hafendirne", + "Hafenhuhre", + "Hafenhure", + "Hafenhurensohn", + "Hafenjockel", + "Hafennetz", + "Hafennute", + "Hafennutte", + "Hafensänger", + "Hafenschlampe", + "Hafenstricher", + "Haferaffe", + "Haftcremebenutzer", + "Hafterladi", + "Häftling", + "Hagebuttenschwein", + "Hahnenschiss", + "Halbaffe", + "Halbdackel", + "Halbdepp", + "Halbficker", + "Halbfuffi", + "Halbgasfahrer", + "Halbhirn", + "Halbhoden", + "Halbi", + "Halbidiot", + "Halbmaßtrinker", + "Halbrenner", + "Halbschuh", + "Halbseidener", + "Halbseitenspastiker", + "Halbspacko", + "Hallenhalmaspieler", + "Hallensportler", + "Hallodri", + "Halsabschneider", + "Halskacker", + "Haltbarkeitsdatumbeachter", + "Halunke", + "Hämatom", + "Hammel", + "Hammelarsch", + "Hammelficker", + "Hammelhoden", + "Hammelsack", + "Hammerschwinger", + "Hammerwerfer", + "Hämohorroidenlecker", + "Hämohorroidenlutscher", + "Hämohorroidenschleuder", + "Hämorrhoide", + "Hämorrhoidenbeißer", + "Hämorrhoidenbritsche", + "Hämorrhoidenfresse", + "Hämorrhoidengesicht", + "Hämorrhoidenlutscher", + "Hämorrhoidenmasseur", + "Hämorrhoidenpritsche", + "Hämorrhoidenschleuder", + "Hämorrhoidenschlürfer", + "Hampelmann", + "Hamperer", + "Hamsterbäckchen", + "Hamsterbacke", + "Hamsterbefreier", + "Hamsterbesitzer", + "Hamsterficker", + "Hamsterfreund", + "Hamsterhöhle", + "Hamstermaulwurf", + "Hamsterscheiße", + "Handbremse", + "Handbremsenanzieher", + "Handbuchleser", + "Handbügler", + "Handeincremer", + "Händewaschervergesser", + "Handfeger", + "Handficker", + "Handfickfotze", + "Handfresser", + "Handlampe", + "Handrückenepilierer", + "Handschmeichler", + "Handschuhautofahrer", + "Handschuhschneeballer", + "Handschuhschneeballwerfer", + "Handschuhschweißer", + "Handschuhwarmföhner", + "Handstandpisser", + "Handstaubsaugerbenutzer", + "Handtuchbügler", + "Handtuchkopf", + "Handtuchunterleger", + "Handtuchwichser", + "Handyhure", + "Handylutscher", + "Handyprolo", + "Handystemmer", + "Handytaschenträger", + "Handyverweigerer", + "Hänfling", + "Hangabwärtsrutscher", + "Hängebauchfettschwein", + "Hängebauchschwein", + "Hängesackschwein", + "Hängetittenficker", + "Hängetittengesicht", + "Hängetittenhirsch", + "Hanjab", + "Hansdampf", + "Hansderkanns", + "Hänsel", + "Hans-Guck-in-die-Luft", + "Hanswurst", + "Hantelgesicht", + "Harfenspieler", + "Harmoniebedürftiger", + "Harnhans", + "Harnlasser", + "Harnröhrenfister", + "Harry Popper", + "Hartei", + "Hartgeldfreier", + "Hartgeldhure", + "Hartgeldnutte", + "Hartgeldstricher", + "Hartschalenkofferbesitzer", + "Hartzer", + "Harzurlauber", + "Haschdepp", + "Haschtablettenraucher", + "Hasenfurz", + "Hasenfuß", + "Hasenfut", + "Hasenhirn", + "Hasenknödel", + "Hasenkopfschwein", + "Hasenvergewaltiger", + "Hasenzuchtvereinsvorsitzender", + "Hassempfänger", + "Hässliche Fischwalsau", + "Hässlicher", + "Häßlichkeit", + "Haubenfahrer", + "Haubentaucher", + "Haudegen", + "Haufen", + "Haufen Scheiße", + "Haumdaucha", + "Hauptsau", + "Haupttribünengänger", + "Hausaufgabenmacher", + "Hausdrache", + "Hausflurfeger", + "Haushaltskassenführer", + "Hausschuhträger", + "Hauz", + "Havenhure", + "Havensänger", + "Hawack", + "Hax", + "HB Männchen", + "Heckeinsteiger", + "Heckenbankert", + "Heckenbefruchter", + "Heckenbrunzer", + "Heckenpenner", + "Heckenpisser", + "Heckenschneider", + "Heckenschwein", + "Heckerfotze", + "Heckwischer", + "Heegtochter", + "Hefefotze", + "Hehler", + "Heilwassertrinker", + "Heimatloser", + "Heimchenfänger", + "Heimlichheuler", + "Heimscheißer", + "Heimwehhaber", + "Heiratsschwindler", + "Heißdüse", + "Heizdeckenlieger", + "Heizungansteller", + "Hektiker", + "Held der Arbeit", + "Helmradler", + "Hemd, halbes", + "Hemdenklenker", + "Hengst", + "Henker", + "Henkersknecht", + "Hennenficker", + "Henner", + "Herbergsvater", + "Hermaphrodit", + "Herpesfotzenlecker", + "Herpesmonster", + "Herrenschwanz", + "Herumtreiber", + "Herzchenmaler", + "Herzensbrecher", + "Hetzer", + "Heubodenspinne", + "Heuchelfresse", + "Heuchler", + "Heulboje", + "Heulhure", + "Heulsuse", + "Heultunte", + "Hexennase", + "Hexentitte", + "Higischel", + "Hilfsdorsch", + "Hilz", + "Himbeerpflücker", + "Himbeerstruller", + "Himbeertoni", + "Hinak", + "Hinni", + "Hintenansteller", + "Hinteneinsteiger", + "Hinterfotze", + "Hinterfotzig", + "Hinterhofhure", + "Hinterhofnutte", + "Hinterlader", + "Hinternabwischer", + "Hinternfeuchttuchabwischer", + "Hinterwäldler", + "Hinzbob", + "Hippie", + "Hirandolyptus", + "Hirbelkind", + "Hirnamöbe", + "Hirnampotierter", + "Hirnamputierter", + "Hirnanhang", + "Hirnbeiß", + "Hirnbolzen", + "Hirncordonbleu", + "Hirndruide", + "Hirnederl", + "Hirneintopf", + "Hirnfasching", + "Hirnfotze", + "Hirnfötzken", + "Hirnfratze", + "Hirngefickter", + "Hirngeige", + "Hirngespinst", + "Hirnhupe", + "Hirni", + "Hirnidiot", + "Hirnkastrat", + "Hirnloser", + "Hirnöderl", + "Hirnpenis", + "Hirnpisser", + "Hirnprothesenträger", + "Hirnscheißer", + "Hirnschraubenzieher", + "Hirnskasten", + "Hirnspender", + "Hirntripper", + "Hirnverbrannter", + "Hirnwichser", + "Hirsch", + "Hirschfotze", + "Hirschgulasch", + "Hirschkäfer", + "Hirschkäferfotze", + "Hirschkopf", + "Hirschkot", + "Hirschpimmel", + "Hirschpimmellutscher", + "Hirsel", + "Hitparadenhöhrer", + "Hobbit", + "Hobbyficker", + "Hobbygangster", + "Hobbyhure", + "Hobbynutte", + "Hobbyonnanist", + "Hobbyproktologe", + "Hobbytranse", + "Hobelgeier", + "Hobelhälfte", + "Hobelschlunse", + "Hobelschnulze", + "Hoblschlunze", + "Hochbettuntenschläfer", + "Hochbumser", + "Hochstapler", + "Hochtöner", + "Hochwasserhosenträger", + "Hodenballspieler", + "Hodenbär", + "Hodenbauer", + "Hodenbefeuchter", + "Hodenbeißer", + "Hodenbrot", + "Hodendreher", + "Hodeneiter", + "Hodenfäulefernheiler", + "Hodenficker", + "Hodenfresse", + "Hodenfrikadelle", + "Hodenfuchs", + "Hodengeburt", + "Hodengesicht", + "Hodengnom", + "Hodengrabscher", + "Hodenhaarfetischist", + "Hodenhengst", + "Hodenhobel", + "Hodenhugo", + "Hodenhund", + "Hodenkitzler", + "Hodenklemme", + "Hodenkneifer", + "Hodenkobold", + "Hodenkoch", + "Hodenkopf", + "Hodenkrampf", + "Hodenkrauler", + "Hodenkrebs", + "Hodenkrebsfresser", + "Hodenlecker", + "Hodenloser", + "Hodenlutscher", + "Hodenmixgetränk", + "Hodenmuschi", + "Hodenmüsli", + "Hodennuckler", + "Hodenotter", + "Hodenpetzi", + "Hodenpflücker", + "Hodenpickel", + "Hodenpils", + "Hodenpilzverbreiter", + "Hodenpimmler", + "Hodenpirat", + "Hodenprotesenträger", + "Hodenrassler", + "Hodenricher", + "Hodenroller", + "Hodensack", + "Hodensackfresser", + "Hodensacklecker", + "Hodensackträger", + "Hodensafttrinker", + "Hodensauger", + "Hodenschaukler", + "Hodenscheißer", + "Hodenscheißetrockner", + "Hodenschmuser", + "Hodenschwinger", + "Hodensohn", + "Hodenspalter", + "Hodenspasst", + "Hodenspecht", + "Hodensschweißlecker", + "Hodenstängel", + "Hodentitte", + "Hodentoastmuschisafttrinker", + "Hodenverknoter", + "Hodenvermitter", + "Hodenwaage", + "Hodenwichser", + "Hodenzecke", + "Hodenzwicker", + "Hodenzyklop", + "Hofnarr", + "Hofschranze", + "Höhepunktrauszögerer", + "Hohlbirne", + "Hohlblock", + "Hohlbratze", + "Hohlbrot", + "Höhlenbewohner", + "Höhlenforscher", + "Höhlenmensch", + "Hohlfrucht", + "Hohlkopf", + "Hohlkörper", + "Hohlraum", + "Hohltier", + "Hoink", + "Höllenarsch", + "Höllenficker", + "Höllenhund", + "Höllenhure", + "Höllenvisage", + "Holzabschneider", + "Holzauge", + "Holzhelmträger", + "Holzkoffer", + "Holzkopf", + "Holzkrüppel", + "Holzkuh", + "Holzmusschnitzer", + "Holzstoß", + "Homo erektus", + "Homoarsch", + "Homoarschloch", + "Homobär", + "Homoficker", + "Homofürst", + "Homohocker", + "Homohoden", + "Homohure", + "Homokeks", + "Homolümell", + "Homomösenbefruchter", + "Homopimmelpirat", + "Homoschlampe", + "Homotier", + "Hömsel", + "Honigkuchenmammler", + "Honigkuchenpferdegesicht", + "Honigsüßer", + "Honk", + "Honkonaut", + "Honkytonkmann", + "Hoochie", + "Hooligan", + "Hooliganschubser", + "Hoolligan", + "Hopper", + "Hopsgestell", + "Hormonarschloch", + "Hörnchentunker", + "Hörnerschlitten", + "Hornfresser", + "Hornhautabraspler", + "Hornhautabrubbler", + "Hornhautzehe", + "Hornochse", + "Horoskopglauber", + "Hortkid", + "Hortkind", + "Hoschie", + "Hose, halbe", + "Hose, tote", + "Hosenbeinpinkler", + "Hosenbeinumkrempler", + "Hosenfrosch", + "Hosenjodler", + "Hosenknopf", + "Hosenlatzfummler", + "Hosenpiesler", + "Hosenpinkler", + "Hosenpisser", + "Hosensack", + "Hosenscheißer", + "Hosentaschennapoleon", + "Hosentrompeter", + "Hosenvollpisser", + "Hostienschänder", + "Huckelgesicht", + "Hüdelmax", + "Hüdelmeier", + "Hufeisennase", + "Hüftkompressor", + "Hügelhexe", + "Hühnchenficker", + "Hühnerarschgewinde", + "Hühnerbrust", + "Hühnerdieb", + "Hühnerficker", + "Hühnerhabicht", + "Hühnerhoden", + "Hühnerkacke", + "Hühnermuskel", + "Hühnerpimperer", + "Hühnervergewaltiger", + "Hühnervieh", + "Hühnervögler", + "Hühnerzüchter", + "Huhnpenis", + "Hülsenfrüchtchen", + "Hummer", + "Humonudel", + "Humorschlampenficker", + "Humpen", + "Hünchen", + "Hund, schwuler", + "Hundeabrichter", + "Hundeängstiger", + "Hundearsch", + "Hundearschfresse", + "Hundearschgesicht", + "Hundearschlecker", + "Hundearschloch", + "Hundeblaser", + "Hundebumser", + "Hundedieb", + "Hundefetischist", + "Hundeficker", + "Hundefotze", + "Hundefotzenbesamer", + "Hundefrisör", + "Hundefurz", + "Hundegeburt", + "Hundehasser", + "Hundehaufen", + "Hundehaufenausweicher", + "Hundehodenlecker", + "Hundejunge", + "Hundekacke", + "Hundekot", + "Hundekuchen", + "Hundekuchenkacker", + "Hundelecker", + "Hundepimmel", + "Hundepissetrinker", + "Hundescheißefresser", + "Hundescheißeriecher", + "Hundescheißesammler", + "Hundeschwanzlutscher", + "Hundesklave", + "Hundesohn", + "Hundetochter", + "Hundewurst", + "Hundling", + "Hundsfott", + "Hundsfotze", + "Hundsgeburt", + "Hundsgesicht", + "Hundshoden", + "Hundsknochen", + "Hundskrüppel", + "Hungerhaken", + "Hupentoni", + "Hüpfburg", + "Hupfdohle", + "Hupfduhle", + "Hürdenducker", + "Hure", + "Hurenaffe", + "Hurenarsch", + "Hurenarschbewichser", + "Hurenarschficker", + "Hurenarschlecker", + "Hurenarschloch", + "Hurenarschspatzler", + "Hurenarschwichser", + "Hurenauge", + "Hurenbaby", + "Hurenbastard", + "Hurenbastardficker", + "Hurenbefruchter", + "Hurenbegrabscher", + "Hurenbengel", + "Hurenbeutel", + "Hurenbitchficker", + "Hurenbitchfressensau", + "Hurenbock", + "Hurenbocktochter", + "Hurenbockverein", + "Hurenbumser", + "Hurending", + "Hureneimer", + "Hurenfahrrad", + "Hurenfick", + "Hurenficker", + "Hurenfickerkind", + "Hurenfötus", + "Hurenfotze", + "Hurenfotzenbock", + "Hurenfotzenficker", + "Hurenfotzenlecker", + "Hurenfoze", + "Hurenfut", + "Hurengeburt", + "Hurengefickter", + "Hurengesicht", + "Hurengrüßer", + "Hurenhannes", + "Hurenhengstkopf", + "Hurenhund", + "Hurenimpfer", + "Hurenjäger", + "Hurenjunge", + "Hurenkarnülle", + "Hurenkind", + "Hurenklitoris", + "Hurenklotzer", + "Hurenkobold", + "Hurenkröte", + "Hurenliebhaber", + "Hurenlochlutscher", + "Hurenlutscher", + "Hurenmatratzenmilbe", + "Hurenmissgeburt", + "Hurenmissgeburtkind", + "Hurenmist", + "Hurenmistkind", + "Hurenmörder", + "Hurenmöse", + "Hurennutte", + "Hurenpaket", + "Hurenpfleger", + "Hurenpreller", + "Hurenpsychater", + "Hurenrotz", + "Hurensack", + "Hurensammler", + "Hurensau", + "Hurenscheißer", + "Hurenschlampe", + "Hurenschwanzficker", + "Hurenset", + "Hurensohn", + "Hurensohndreckskind", + "Hurensohnficker", + "Hurensohngesicht", + "Hurensohnpimmel", + "Hurensohnverkäufer", + "Hurenstecher", + "Hurenstöpsel", + "Hurentocher", + "Hurentochter", + "Hurentochtersohn", + "Hurentuntenficker", + "Hurenvergewaltiger", + "Hurenvetter", + "Hurenvogel", + "Hurenwicher", + "Hurenwichsbock", + "Hurenwichser", + "Hurenzüchter", + "Hurer", + "Hurnsohn", + "Hurologe", + "Husel", + "Hustensaftschmuggler", + "Hütchenspieler", + "Hutsimpel", + "Hutständer", + "Hüttengaudi", + "Hutwegwerfer", + "Hutziferkel", + "Huxthund", + "Huzibutz", + "Hyänenexkrement", + "Hydrantenpöbel", + "Hydrantenputzer", + "Hydrokulturpflanzer", + "Hyperheroimitator", + "Hyperspastie", + "Hypochonder", + "Idi", + "Idiot", + "Idiotenaal", + "Idiotenarsch", + "Idiotenfresse", + "Idiotengehilfe", + "Idiotenhäuptling", + "Idiotenkind", + "Idiotenscheiße", + "Igelschlitz", + "Ignorant", + "Ikonoklast", + "Iltismöse", + "Imbissbudenkoch", + "Imbusonanierer", + "Imbusschädel", + "Impotenter", + "Impotentling", + "Innentaschenbügler", + "Innereienkotzer", + "Insektenhirn", + "Inselaffe", + "Inselkind", + "Insgeheimrülpser", + "Insiderdenker", + "Inspektionstermineinhalter", + "Instantteetrinker", + "Integralhelmfahrer", + "Integrationsbremse", + "Intellektuellenimitator", + "Intelliegenzallergiker", + "Intelligenzallergiker", + "Internetausdrucker", + "Internetseminarbesucher", + "Intlligenzbolzen", + "Intrigant", + "Inventar", + "Inzestgeburt", + "Inzestvorzeigeopfer", + "Inzüchtler", + "Inzuchtmeister", + "IQloser", + "Irrer", + "Ische", + "Jaft", + "Jammerer", + "Jammergestalt", + "Jammerlappen", + "Jammersack", + "Jammerspacken", + "Jammersuse", + "Jasager", + "Jaucheaustrinker", + "Jauchegrubentaucher", + "Jauchemaul", + "Jauchenfotze", + "Jaucher", + "Jaucheschwimmer", + "Jauchetrinker", + "Jazzschädel", + "Jeanput", + "Jeansbügler", + "Jetflutscher", + "Jodelarsch", + "Jodelidiot", + "Jodelpenner", + "Jodsalzer", + "Joghurtauslöffler", + "Joghurtbecherspüler", + "Juckreiz", + "Juggler", + "Jungenficker", + "Jungfer, alte", + "Jungfernhäutchenfresser", + "Jungfernhäutchenvernascher", + "Junggesellenfestefeierer", + "Jungspund", + "Junkie", + "Jutebeuteleinkäufer", + "Kaashaxen", + "Kaaskopf", + "Kaasloabe", + "Kabelklemme", + "Kabelverknoter", + "Kachel", + "Kachelfresse", + "Kackapfel", + "Kackarsch", + "Kackarschpenis", + "Kackauge", + "Kackbacke", + "Kackbärchen", + "Kackbatzen", + "Kackbirne", + "Kackbraten", + "Kackbratze", + "Kackbretzel", + "Kackbroken", + "Kackdübel", + "Kacke", + "Kackebeutel", + "Kackefesser", + "Kackefresser", + "Kackekauer", + "Kackenascher", + "Kacker", + "Kackeschieber", + "Kackeschubser", + "Kackestampfer", + "Kackfass", + "Kackfick", + "Kackfotze", + "Kackfotzenhurengesicht", + "Kackfratze", + "Kackfreak", + "Kackfresse", + "Kackfresser", + "Kackfrosch", + "Kackfunzel", + "Kackhaufen", + "Kackischwitzer", + "Kackkäfer", + "Kackklümpchen", + "Kackkopf", + "Kacklappen", + "Kacklappenlutscher", + "Kacklatte", + "Kackmaus", + "Kackmensch", + "Kacknase", + "Kacknoob", + "Kacknudel", + "Kacknutte", + "Kackpenis", + "Kackpflaume", + "Kackratte", + "Kackritze", + "Kacksack", + "Kacksahneschlürfer", + "Kacksau", + "Kackschrätze", + "Kackschwamm", + "Kackspalte", + "Kackspaltenlecker", + "Kackspaltentechnicker", + "Kackspaßt", + "Kackspecht", + "Kackspratto", + "Kackstampfer", + "Kackstange", + "Kackstelze", + "Kackstengelficker", + "Kackstift", + "Kackstiftnascher", + "Kackstrahlschleuderer", + "Kackstreifenlecker", + "Kackstreifenschnüffler", + "Kackstuhl", + "Kackstuhlfahrer", + "Kackstulle", + "Kacktaube", + "Kacktrommel", + "Kacktusse", + "Kackvisage", + "Kackvogel", + "Kackwurst", + "Kackwurstarschablecker", + "Kackwürstchen", + "Kackwurstjunge", + "Kackwurstlutscher", + "Kadavarbeseitiger", + "Kadaver", + "Kaffeekannenscheißer", + "Kaffeemilcher", + "Kaffeetassenwärmer", + "Kaffeewarmtrinker", + "Kaffeezuckerer", + "Kahlbratze", + "Kahnschaukelbremser", + "Kaiserschmarn", + "Kakadu", + "Kakalackengriller", + "Kakaotrinker", + "Kakefresser", + "Kakerlackenkotzer", + "Kakerlake", + "Kakerlakenficker", + "Kakerlakenfratze", + "Kakerlakenfresse", + "Kakerlakenlecker", + "Kakerlakenmuschi", + "Kakerlakenschwein", + "Kakerlakenzüchter", + "Kaktus", + "Kaktusrasierer", + "Kalamarisstecher", + "Kälberficker", + "Kalbskopf", + "Kalendereintrager", + "Kalkfresse", + "Kalkleiste", + "Kalorienzähler", + "Kaltblüter", + "Kaltduscher", + "Kaltschaummatratze", + "Kamasutrabuchleser", + "Kamelficker", + "Kamelhaarmöse", + "Kamelpfotenlecker", + "Kamelscheiße", + "Kamelzehe", + "Kameradenschwein", + "Kameradenverpfeifer", + "Kamikazefahrer", + "Kamillenteetrinker", + "Kampfdackel", + "Kampfgnom", + "Kampfhamster", + "Kampflesbe", + "Kampfmurmel", + "Kampfschwein", + "Kampfstachel", + "Kampftitte", + "Kampftrinker", + "Kampfzwerg", + "Kanabisschlundfresse", + "Kanaldeckel", + "Kanaldeckelbefruchter", + "Kanaldeckelbumser", + "Kanaldeckelficker", + "Kanaldeckelnassmacher", + "Kanaldeckelwichser", + "Kanalfurz", + "Kanalgesicht", + "Kanalimplantat", + "Kanalisationsdeckelmechaniker", + "Kanalisationsratte", + "Kanalkind", + "Kanalkotzer", + "Kanalmuschilecker", + "Kanalpisser", + "Kanalputzer", + "Kanalratte", + "Kanalrattenbumser", + "Kanalrattenficker", + "Kanalrattenschwanzlutscher", + "Kanalrattenschwuchtel", + "Kanalreiniger", + "Kanalsurfer", + "Kanalwarmduscher", + "Kanaster", + "Kanehl", + "Känguruhoden", + "Kanickelficker", + "Kanister", + "Kanisterficker", + "Kanisterhure", + "Kanisterkopf", + "Kannibale", + "Kanonenfutter", + "Kanonenstöpsel", + "Kanoptikum", + "Kantenschoner", + "Kantenschwanz", + "Kantinentablettzurücksteller", + "Kappenkäse", + "Kaputnik", + "Kaputter", + "Kaputtkopf", + "Kaputzenträger", + "Kapuzenzuzieher", + "Kariesgeburt", + "Karieswichser", + "Karnickel", + "Karnickelfotze", + "Karnickelkopf", + "Karottenbumser", + "Karottenhosenträger", + "Karpfenmaul", + "Karpfenteichangler", + "Karrer", + "Kartoffelarschloch", + "Kartoffelbreiali", + "Kartoffelficker", + "Kartoffelfresse", + "Kartoffelhengst", + "Kartoffelkäfer", + "Kartoffelkocher", + "Kartoffelkopf", + "Kartoffelnase", + "Kartoffelsack", + "Karussellbremser", + "Karussellkotzer", + "Käseentschimmler", + "Käsefresser", + "Käsefußliebhaber", + "Käsefußsoldat", + "Käsegesicht", + "Käsehautwegschneider", + "Käsehobeltitte", + "Käsekiffer", + "Käsekrokette", + "Käselochficker", + "Käsemöse", + "Käsemuschi", + "Käsenase", + "Käsepimmel", + "Käseschwanz", + "Käsewurstauge", + "Kasloabe", + "Kasper", + "Kasperl", + "Kasperlkopf", + "Kassenpatient", + "Kastaniensammler", + "Kastengesicht", + "Kastenteufel", + "Kastrat", + "Katastrophenelektriker", + "Katerkastrierer", + "Katheteronanierer", + "Katheterpisser", + "Kattl", + "Katzbuckler", + "Katzenficker", + "Katzenfotze", + "Katzenfutterficker", + "Katzenhals", + "Katzenhirn", + "Katzenjammer", + "Katzenklient", + "Katzenkopf", + "Katzenkotnascher", + "Katzenkrauler", + "Katzenlover", + "Katzenmösenlecker", + "Katzenmuschinenner", + "Katzenpederer", + "Katzenpisse", + "Katzenspermasammler", + "Katzentöter", + "Katzenwichser", + "Kaugummi, geschmackloser", + "Kaugummigorilla", + "Kaugummikapitän", + "Kaugummikönig", + "Kaulquappe", + "Kaulquappengesicht", + "Kautz, komischer", + "Kaviarkühlschrank", + "Kecks", + "Kehlkopfakrobat", + "Keimarsch", + "Keimbratze", + "Keimfotze", + "Keksbefruchter", + "Keksbesamer", + "Keksficker", + "Kekslecker", + "Kekslutscher", + "Kekswichser", + "Kellerassel", + "Kellerkind", + "Kerftenlecker", + "Kerkerleiche", + "Kerkermeister", + "Kerkerputzer", + "Kernobstwichser", + "Kerzenpisser", + "Kerzenschlecker", + "Kessel", + "Kettchenknutscher", + "Kettenbriefweiterschicker", + "Kettenfresse", + "Keulenknecht", + "Kichererbse", + "Kickermatte", + "Kiffbirne", + "Kiffender", + "Kiffer", + "Kifferkind", + "Kiffkopf", + "KiKA Gucker", + "Killer", + "Killerinsekt", + "Killerkanickel", + "Killermantou", + "Killerpickel", + "Killerscheiße", + "Killertitte", + "Killertomate", + "Kimmencowboy", + "Kimmenkratzer", + "Kimmenschnösel", + "Kimpel", + "Kinderbeckenplantscher", + "Kinderbeckenstruller", + "Kinderbeckentaucher", + "Kinderbelästiger", + "Kinderclownfetischist", + "Kinderfickeer", + "Kinderficker", + "Kindergangster", + "Kindergartenclown", + "Kindergartencop", + "Kindergartenhure", + "Kindergeburtstagstörer", + "Kinderlecker", + "Kinderleichenficker", + "Kinderlieder DJ", + "Kindermuschifresser", + "Kinderpimmel", + "Kinderpoppoküsser", + "Kinderradzusammenschrauber", + "Kinderschänder", + "Kinderschlecker", + "Kinderschokoladeesser", + "Kinderschreck", + "Kindertagesstättenaussucher", + "Kindertelleresser", + "Kindervergewaltiger", + "Kindervögler", + "Kinderwagenschieber", + "Kinderwichsgesicht", + "Kindskopf", + "Kinnmuskelspanner", + "Kinoweiner", + "Kipferl", + "Kirchenmaus", + "Kirschenentkerner", + "Kirschkernkissenschläfer", + "Kirschkernweitspucker", + "Kissenbefruchter", + "Kissenbrunzer", + "Kissenlurch", + "Kissenlutscher", + "Kissenvergewaltiger", + "Kissenwicher", + "Kistenbumser", + "Kistenkind", + "Kitakind", + "Kittelbrunzer", + "Kitzler", + "Kitzlerficker", + "Klabauter", + "Klabautermann", + "Klabuschterbärle", + "Klabusterbeere", + "Klabusterbeerenabzupfer", + "Klabusterbeerenaufheber", + "Klabusterbeerenesser", + "Klabusterbeerenkauer", + "Klabusterbeerenlecker", + "Klabusterbeerenpflücker", + "Klabusterbeerenstecher", + "Klabusterbeeresammler", + "Klabusterperle", + "Klackergrütze", + "Klambes", + "Klammeraffe", + "Klamottenzurechtleger", + "Klappenstecher", + "Klapperkopf", + "Klappidiot", + "Klappspaten", + "Klappstuhl", + "Klapser", + "Klapskalli", + "Klapspaten", + "Kläranlagenabschmecker", + "Klärgrubenaustrinker", + "Klärgrubenbademeister", + "Klärgrubenfeinabschmecker", + "Klarsichthüllenverwender", + "Klassenkasper", + "Klassenmatratze", + "Klatscher", + "Klausurenpaniker", + "Klebefolienbucheinbinder", + "Kleberschnüffler", + "Klebesamenentfruchter", + "Klebnotizenschreiber", + "Klebstoffschnüffler", + "Kleckerhure", + "Kleindildoersatz", + "Kleinenfingerabspreizer", + "Kleingärtner", + "Kleingedrucktesleser", + "Kleingeldabzähler", + "Kleingeldbezahler", + "Kleingeldsammler", + "Kleingeldstricher", + "Kleinglied", + "Kleinhirn", + "Kleinkindvergewaltiger", + "Kleinschwanzpilot", + "Kleinstadtdiscobesucher", + "Kleintierficker", + "Kleintierfotze", + "Kleintiervergewaltiger", + "Kletschkopf", + "Kletterseilbenutzer", + "Kletzenbeni", + "Klimaanlagenfahrer", + "Klingelquatscher", + "Klingeltonkomponist", + "Klingentupfer", + "Klippenpisser", + "Klistierficker", + "Klitorisfleischfresser", + "Klitorschmandabkratzer", + "Klitpimmel", + "Kloaka maxima", + "Kloakenbader", + "Kloakenficker", + "Kloakenkackwurst", + "Kloakenkind", + "Kloakensammler", + "Kloakenwassertrinker", + "Kloblitzgeburt", + "Klobrillendesinfizierer", + "Klobrillenhochklapper", + "Klobrillenrandablecker", + "Klobrillenrunterklapper", + "Klobrillenwarmföhner", + "Klobürste", + "Klobürstenbenutzer", + "Klobürstenkopf", + "Klobürstenkratzer", + "Klobürstenlecksau", + "Klobürstenlutscher", + "Klobürstenputzer", + "Klobürstenzähneputzer", + "Klodeckel", + "Klodeckelabwischer", + "Klodeckelbumser", + "Klodeckelpolsterer", + "Klodeckelrandbepisser", + "Klodeckelrunterklapper", + "Klodeckelschnitzer", + "Klofrau", + "Klofrauenbezahler", + "Klogesicht", + "Klohbürstenlecker", + "Kloklopfer", + "Klokopf", + "Klolappen", + "Klolilier", + "Klomuscheltaucher", + "Klonten", + "Klopapapierselbermitbringer", + "Klopapieraufwickler", + "Klopapierbefruchter", + "Klopapierdoppeltleger", + "Klopapierficker", + "Klopapiernichtbenutzer", + "Klopapierrollenbesticker", + "Klopapierschlecker", + "Klopfholz", + "Klopper", + "Klopphengst", + "Kloppie", + "Kloppikind", + "Klopsi", + "Klopskauer", + "Klopskind", + "Klopumpe", + "Kloputzer", + "Kloputzschwanz", + "Kloreiniger", + "Klorinette", + "Klorollenautofahrer", + "Klorollenumhäkler", + "Kloschüsselauslecker", + "Kloschüsselrandablecker", + "Klosetttieftaucher", + "Klospühler", + "Klosteinficker", + "Klosteingenießer", + "Klosteinlutscher", + "Klostopfer", + "Klöte", + "Klötenbeißer", + "Klötenfresse", + "Klötenfresser", + "Klötengesicht", + "Klötenholm", + "Klötenkasper", + "Klötenklabauter", + "Klötenkopf", + "Klötenkotzer", + "Klötenkrauler", + "Klötenlecker", + "Klötenlutscher", + "Klötenonkel", + "Klötenponny", + "Klötenquetscher", + "Klötenrasierer", + "Klotzkopf", + "Klowasserschlucker", + "Klowischer", + "Klowurm", + "Klozicke", + "Klugscheißer", + "Klugschwätzer", + "Klumepenlutscher", + "Klumpennase", + "Klumpfresse", + "Knabendeflorierer", + "Knabenficker", + "Knabenlecker", + "Knackarsch", + "Knackbraten", + "Knäckebrot", + "Knackfuß", + "Knacki", + "Knackschleife", + "Knallbirne", + "Knallbohne", + "Knallcharge", + "Knalldepp", + "Knaller", + "Knallerbse", + "Knallerbsenstrauchpflanzer", + "Knallhirte", + "Knallidiot", + "Knallkäfte", + "Knallkasper", + "Knallkopf", + "Knallkopfhorn", + "Knallprinz", + "Knallpussy", + "Knallrattenbumser", + "Knalltüte", + "Knappe", + "Knastbruder", + "Knasthure", + "Knauser", + "Knauserich", + "Knecht", + "Knechtbruder", + "Knechtgesicht", + "Knetwurst", + "Knicker", + "Knickohr", + "Knickpimmel", + "Kniebeißer", + "Knieficker", + "Kniegsicht", + "Kniepisser", + "Knieschonerträger", + "Kniewichser", + "Knilch", + "Knirps", + "Knitte", + "Knittermöse", + "Knoblauchpopel", + "Knoblauchriecher", + "Knochenkalle", + "Knochenpaul", + "Knödel", + "Knödelficker", + "Knödelpopel", + "Knöllchenbezahler", + "Knolle", + "Knorkator", + "Knorpel", + "Knorpelfick", + "Knorpelwegschneider", + "Knorpelwichs", + "Knotenfurz", + "Knotenkind", + "Knubbelfurtz", + "Knubbelzeh", + "Knuddler", + "Knülch", + "Knüppel", + "Knüppelbock", + "Knüppelbruder", + "Knüppelbumser", + "Knüppelschwinger", + "Knutschfleckverdecker", + "Kobold", + "Kochrezeptbenutzer", + "Kochtopfkannibale", + "Kochtopfscheißer", + "Ködelkacker", + "Ködelmöse", + "Kodenswasserschlucker", + "Kodikäufer", + "Koffer", + "Kofferraumbefruchter", + "Kofferroller", + "Kohlensäurerausschüttler", + "Kohlkopf", + "Kohlkopfknödel", + "Kohlrabifräse", + "Kokettenscheißer", + "Koksnutte", + "Kolbenfresser", + "Kolbenfressficker", + "Kollaborateur", + "Kölschpisser", + "Komapatientenficker", + "Komasocke", + "Komdomfresser", + "Komplettlösungsspieler", + "Komplettrechnerkäufer", + "Komplexesammler", + "Komplimentemacher", + "Kompostlukenstecher", + "Kompromissmacher", + "Kondenswassertrinker", + "Kondomauslecker", + "Kondomhai", + "Kondomlutscher", + "Kondomomat", + "Kondomonanierer", + "Kondomplatzkind", + "Kondomprodukt", + "Kondomschlürfer", + "Kondomwiederbenutzer", + "Kondomzweimalbenutzer", + "Königsberger Klops", + "Kontaktlinsenreiniger", + "Kontoauszugsüberprüfer", + "Köperschlund", + "Kopfarschgeburt", + "Kopfdraufscheißer", + "Kopfgelddeler", + "Kopfgesicht", + "Köpfhörer", + "Kopfkissenschläfer", + "Kopfkissenschmuser", + "Kopfkissenvergewaltiger", + "Kopfkissenzerwühler", + "Kopfkissenzipfellutscher", + "Kopfschlächter", + "Kopfschnitzel", + "Kopfschwuchtel", + "Kopfwehjammerer", + "Kopierfotze", + "Kopierschlampe", + "Koppenkäse", + "Kopphauer", + "Koprophage", + "Kordeldepp", + "Korinthenkacker", + "Korken", + "Körnerfresser", + "Kornkäfer", + "Körperbasisbruch", + "Körperfrikasse", + "Körperkasper", + "Körperklaus", + "Körperklops", + "Korsettenhengst", + "Kotbär", + "Kotbatzen", + "Kotbratze", + "Kotbrocken", + "Kotbürstenabschlepper", + "Kotbus", + "Koteimer", + "Kötelpenis", + "Kotentsorger", + "Koter", + "Köter", + "Köterarsch", + "Kotficker", + "Kotfotze", + "Kotfresser", + "Kotfuchs", + "Kotgeburt", + "Kotgesicht", + "Kotgulasch", + "Kothoden", + "Kothund", + "Kothure", + "Kotkanal", + "Kotkäppchen", + "Kotkiste", + "Kotkoch", + "Kotkoffer", + "Kotkolben", + "Kotkopf", + "Kotkotzer", + "Kotkrampe", + "Kotlettfotze", + "Kotlochmisshändler", + "Kotlochstopfer", + "Kotlutscher", + "Kotnascher", + "Kotnaschie", + "Kotraupe", + "Kotsau", + "Kotscheide", + "Kotschlecker", + "Kotschmierer", + "Kotstampfer", + "Kotstreicher", + "Köttel", + "Köttelkneter", + "Köttelkopf", + "Köttelnascher", + "Kotwange", + "Kotwurst", + "Kotzbär", + "Kotzbauer", + "Kotzbraze", + "Kotzbremse", + "Kotzbrocken", + "Kotze", + "Kotzefresser", + "Kotzenficker", + "Kotzer", + "Kotzficker", + "Kotzfresse", + "Kotzgesicht", + "Kotzgurke", + "Kotzklumpen", + "Kotzknolle", + "Kotzkopf", + "Kotzköter", + "Kotzkrücke", + "Kotzloch", + "Kotznase", + "Kotzophiler", + "Kotzpfosten", + "Kotzschlampe", + "Kotztrottl", + "Kotztussi", + "Kotztüte", + "Kotztütenbenutzer", + "Kotztütenveredler", + "Kotztütenverschönerer", + "Krabbenlutscher", + "Kraftausdrückevermeider", + "Krämerseele", + "Krampe", + "Krampf", + "Krampfhenne", + "Krampus", + "Krankenschwesternficker", + "Krankheit", + "Krankheitsüberträger", + "Krankschädel", + "Kranmpfadernzieher", + "Kraterfresse", + "Kratzbürste", + "Kratzfotze", + "Kratzwurst", + "Kräutermuschi", + "Krawattennadelträger", + "Kreatur", + "Krebsmonster", + "Kredithai", + "Kreditkartenbetrüger", + "Kreidefresser", + "Kreidepisser", + "Kreischmöse", + "Kreiselficker", + "Kreiskante", + "Krepel", + "Krespala", + "Kretenfutterer", + "Kretenlutscher", + "Kretin", + "Kreuzworträtsellöser", + "Kriecher", + "Kriechstromelektriker", + "Kriegsverbrecher", + "Kriepsch", + "Krintenfisch", + "Krisperl", + "Krokettenbefeuchter", + "Kronko", + "Krötenficker", + "Krötenkotze", + "Krötenlecker", + "Krötenpups", + "Krötentitte", + "Krötenwanderungshelfer", + "Kröttel", + "Krücke, lahme", + "Krumbeerzüchter", + "Krümeldieb", + "Krümelkussverweigerer", + "Krümelpopler", + "Krümelwichse", + "Krumschwanz", + "Krüppel", + "Krüppelficker", + "Krüppelgesicht", + "Krüppelschwanz", + "Krustenarsch", + "Krustenfotze", + "Krustenlecker", + "Krustenmuschi", + "Krustenmuschie", + "Krustenpenis", + "Krustentier", + "Kruziwuzi", + "Kübelkacker", + "Kübelkind", + "Kübelwichser", + "Kubikwichser", + "Kuchenbefruchter", + "Kuchendieb", + "Kuchenficker", + "Küchenmaschinenbenutzer", + "Kuchenwichser", + "Kudungficker", + "Kugelblitz", + "Kugelsau", + "Kugelschreiber", + "Kugelschwanz", + "Kugelstoßer", + "Kuhdarmbohrung", + "Kuhdarmficker", + "Kuhdarmgummi", + "Kuhficker", + "Kuhfladen", + "Kuhfladenficker", + "Kuhfotze", + "Kuhfresse", + "Kuhfurtzgeschleuder", + "Kuhglotzer", + "Kühlerfrostschutzbenutzer", + "Kühlkettenglied", + "Kühlschrankabtauer", + "Kühlschrankauslecker", + "Kühltaschenpicknicker", + "Kühltruhenangler", + "Kuhmagen", + "Kuhmistpresse", + "Kuhmösenlecker", + "Kuhnippel", + "Kuhrudelbumser", + "Kuhsack", + "Kuhschädel", + "Kuhschwanzmelker", + "Kuhwurst", + "Kullerkeks", + "Kulliknipser", + "Kulturbanause", + "Kulturbeutelbesitzer", + "Kummerkasten", + "Kummerkastenpöbler", + "Kumpfi", + "Kundendienstmachenlasser", + "Kunstbanause", + "Kunstlederträger", + "Künstlerhure", + "Kunzkopf", + "Kupferstecher", + "Kuppenkäse", + "Kuppenlutscher", + "Kuppenspecht", + "Kupplungschleifer", + "Kürbis", + "Kurpfuscher", + "Kurvenblinker", + "Kurvenbremser", + "Kurzbeinfahrer", + "Kurzhaarföhner", + "Kurzpisser", + "Kurzschlussspast", + "Kurzstreckenstraßenbahnfahrer", + "Kurzwahlspeicherbenutzer", + "Kurzwichser", + "Kuschelrocker", + "Kuscher", + "Kuttenbrunzer", + "Labberlappen", + "Labbersack", + "Laberbacke", + "Laborexperiment", + "Laborkind", + "Laborunfall", + "Lacharsch", + "Lachnummer", + "Lachsack", + "Lachsnacken", + "Lackaffe", + "Lackel", + "Ladakalendermodell", + "Ladendieb", + "Laffe", + "Lagerfeuergittarist", + "Lahmarsch", + "Lahmer", + "Lakai", + "Lakeiengrüßer", + "Lakritzschneckenabroller", + "Laller", + "Lallkopf", + "Lamer", + "Lamettabügler", + "Laminatnager", + "Lammerzeugunsorgan", + "Lammfellsohlengeher", + "Lampeneinschalter", + "Lampensau", + "Lampenschirmbauer", + "Landei", + "Landfahrer", + "Landhure", + "Landlümmel", + "Landplage", + "Landpomeranze", + "Landsknecht", + "Landsteppensau", + "Landstreicher", + "Landungsklatscher", + "Landvermesser", + "Langfinger", + "Langhaarfotzenfetischist", + "Langhaarmöse", + "Langsamesser", + "Langscheißer", + "Langschläfer", + "Langschwanzpavian", + "Langstreckenfurzer", + "Langstreckenläufer", + "Langweiler", + "Lappenspalte", + "Laserschwertverkäufer", + "Lateinkönner", + "Laternenbumser", + "Laternenficker", + "Laternenparker", + "Laternenschlampe", + "Latexallergievortäuscher", + "Latexfotze", + "Latexlecker", + "Latrienenlecker", + "Latsche", + "Lattebrost", + "Lattendieb", + "Lattenficker", + "Lattenheber", + "Lattenjäger", + "Lattenrostkaputtmacher", + "Lattenrostrammler", + "Latzgurtbenutzer", + "Laubharker", + "Lauchhammer", + "Lauchkopf", + "Laune der Natur", + "Lausbub", + "Lausejunge", + "Lauser", + "Läusevorkoster", + "Läusezucht", + "Lautstärkerunterdreher", + "Lauwarmduscher", + "Lavendelpflücker", + "Lebensplaner", + "Lebensversicherungskäufer", + "Lebenversauer", + "Lebertranschlürfer", + "Leberwurst, beleidigte", + "Leberwurstdieb", + "Leberwurstgesicht", + "Lebkuchenfresser", + "Leckarscher", + "Leckkopf", + "Lecklippe", + "Leckschablone", + "Ledervotze", + "Leepisser", + "Leergutficker", + "Leergutspüler", + "Leerkörper", + "Leffdutti", + "Lefti", + "Lehmfotze", + "Lehrerfetischist", + "Lehrerficker", + "Lehrerschleimer", + "Lehrertaschenträger", + "Leibeigener", + "Leiche", + "Leichenbesudler", + "Leichenbrenner", + "Leichenficker", + "Leichenfister", + "Leichenfledderer", + "Leichenlecker", + "Leichenlutscher", + "Leichenschänder", + "Leichenwagenbremser", + "Leichtkugelbowler", + "Leierfotze", + "Leihbootfahrer", + "Leihskiversicherer", + "Leisbock", + "Leisekommer", + "Leisepupser", + "Leiserülpser", + "Leiseschneutzer", + "Leisetreter", + "Leistengesicht", + "Leitbündel", + "Lellerbebbel", + "Lendenlutscher", + "Lenkradsperrer", + "Lentschgacki", + "Lentschificker", + "Lesbenficker", + "Leseratte", + "Letzter", + "Leuchtturmspargel", + "Lexfiedle", + "Libidoredakteur", + "Lichtausficker", + "Lichthupe, geistige", + "Lichthupenbremser", + "Lichtschwertakku", + "Liebesbriefschreiber", + "Liebesfilmflenner", + "Liebeskasper", + "Liebeskummersendunganrufer", + "Lieblingsliedersortierer", + "Likörtrinker", + "Lindenblütenteetrinker", + "Lindwurm", + "Linksfahrer", + "Linkshandpisser", + "Linkspoper", + "Linksrechtsverwechsler", + "Linksträger", + "Linkswichser", + "Lipidrosettenhaar", + "Lippenbalsambenutzer", + "Lippenstiftfetischist", + "Litfaßsäulenschlampe", + "Lobotomierter", + "Locharsch", + "Löcherbohrer", + "Löcherbumser", + "Lochficker", + "Lochgesicht", + "Lochkäseficker", + "Lochlebewesen", + "Lochmaschine", + "Lochschnüffler", + "Lochstopfer", + "Lochverstärkungsringbenutzer", + "Lockefortz", + "Lockenlama", + "Loddi", + "Loddl", + "Lödi", + "Löffel", + "Lohnsteuerkartenvergesser", + "Lolkeks", + "Lollilutscher", + "Loser", + "Lötkolben", + "Lotterbube", + "Lous", + "Luckschas", + "Lüdenscheid", + "Luder", + "Ludertunte", + "Lüdu", + "Luftgittarist", + "Luftikus", + "Luftkotlett", + "Luftmatratze", + "Luftmatratzenschwimmer", + "Luftpumpe", + "Luftröhrenorgasmus", + "Luftschmuser", + "Luftverpester", + "Luftwegatmer", + "Lügenbold", + "Lügensau", + "Lügenschwein", + "Lügner", + "Luligagg", + "Lullerlecker", + "Lulu", + "Lululutscher", + "Lümmel", + "Lümmelknacker", + "Lümmeltüte", + "Lümmeltütenlutscher", + "Lump", + "Lumpenhund", + "Lumpenpack", + "Lumpensack", + "Lumpensammler", + "Lümpfknotenfresse", + "Lumpi", + "Lumpilutscher", + "Lumpy", + "Lungenmade", + "Luntenhund", + "Lurchfresse", + "Lurchi", + "Lurchkopf", + "Lusche", + "Luschenkopf", + "Luschenmuschi", + "Luschi", + "Luschimuschi", + "Lustgreis", + "Lustgrottentaucher", + "Lustiger", + "Lustknabe", + "Lustmagnet", + "Lustmolch", + "Lustmörder", + "Lustwurzellutscher", + "Lutschauge", + "Lutscher", + "Lutschertyp", + "Lutschfettkonsument", + "Lutschfinger", + "Lutschnudel", + "Lutschpatille", + "Lutschpumpe", + "Lutschpupe", + "Lutschzigarre", + "Lutzpadin", + "Luzifer", + "Macker", + "Macrohure", + "Mädchenzeuger", + "Madenfratze", + "Madenkacker", + "Madenzüchter", + "Mafioso", + "Mageninhaltfresser", + "Magermilchjoghurtesser", + "Magerquark", + "Maggifabrik", + "Maggifotze", + "Maggischeißer", + "Maierfutzi", + "Maikäfervergewaltiger", + "Makacke", + "Makrele", + "Malefiz Bub", + "Malzbiertrinker", + "Mamabär", + "Mamaficker", + "Mamakind", + "Mamalutscher", + "Mamasöhnchen", + "Mamischieber", + "Mamischmuser", + "Mammutsau", + "Mampfkopf", + "Mandeloperationangsthaber", + "Männerbefruchter", + "Männerhortgänger", + "Männerhure", + "Mannschaftsmatratze", + "Mannsweib", + "Mantafahrer", + "Marathonficker", + "Märchenwaldflittchen", + "Margarinengesicht", + "Marillenlecker", + "Marktmurmler", + "Marktschreier", + "Marsmännchenmuschi", + "Marzipanschweinarschlecker", + "Masagenutte", + "Maschendrahtaufsteller", + "Maschendrahtzaunflechter", + "Maschinenkopf", + "Massenhurensohn", + "Massenmörder", + "Massenwichser", + "Mastdarmakrobat", + "Mastdarmgeburt", + "Mastdarmtieftaucher", + "Mastdarmtourist", + "Mastdarmwurstesser", + "Mastsau", + "Mastschwein", + "Mastubationsinvalide", + "Masturbationsakrobat", + "Masturbationselch", + "Masturbationsgebäck", + "Masturbator", + "Masturbiergriffel", + "Matratze", + "Matratzenbumser", + "Matratzenficker", + "Matratzenschläfer", + "Mätresse", + "Matschbirne", + "Matschbirnenlulatsch", + "Matschfresse", + "Matschgesicht", + "Matschmösenmeißel", + "Mattenluder", + "Mattscheibe", + "Matz", + "Mauerblümchen", + "Mauerhüpfer", + "Mauersegler", + "Maulaffe", + "Maulesel", + "Maulficker", + "Maulfotzenficker", + "Maulheld", + "Maulhure", + "Maultier", + "Maulwurfhamster", + "Mäusedreck", + "Mäusefallentandler", + "Mausehoden", + "Mäusemelker", + "Mausficker", + "Mausschrubber", + "Mausschubser", + "Mautpreller", + "Mayonaisenausspritzer", + "Meckerliese", + "Meerschweinchenfotze", + "Meerschweinchenkotfresser", + "Meerschweinchenzüchter", + "Meerschweinficker", + "Megafotze", + "Mehlauge", + "Mehlsemmel", + "Mehrfachhierrufer", + "Meisterhure", + "Melkbüffel", + "Melkmaschienenentfremder", + "Melonenficker", + "Melonenfickerfresse", + "Melonenhirse", + "Melonenkernausspucker", + "Melonenkernrauspuhler", + "Melonomgesicht", + "Membranstapel", + "Memme", + "Mensch", + "Menschenaffe", + "Menschenhändler", + "Menschenhaut", + "Menschenhülle", + "Menschenschinder", + "Menstruationsbeischlafverweigerer", + "Menstruationsblutverkoster", + "Menstruationstrinker", + "Mentalkrüppel", + "Mephisto", + "Merkzettelschreiber", + "Messerstecher", + "Metastase", + "Methanschleuder", + "Metldepp", + "Mettwurstsenker", + "Metze", + "Metzgereiabfall", + "Meuchelmörder", + "Meuchler", + "Mickerling", + "Mickerzwerg", + "MickyMaus-Detektiv", + "Mickymausglotzer", + "Microschwanz", + "Miefschläfer", + "Miesepeter", + "Miesmacher", + "Miesmuschel", + "Mikrobenspermoid", + "Mikropenis", + "Mikropimmel", + "Mikrowellenaufwärmer", + "Mikrowellenkoch", + "Milbengesicht", + "Milbenjäger", + "Milchbreikauer", + "Milchbrötchenesser", + "Milchbubi", + "Milchfee", + "Milchkaffeetrinker", + "Milchkind", + "Milchmädchen", + "Milchpulverbrocken", + "Milchreisbubi", + "Milchreisfresse", + "Milchschaumschlürfer", + "Milchschnittenfresser", + "Milchschnitten-IQ", + "Milchshaker", + "Milchtrinker", + "Milchverschütter", + "Milchzahnaufheber", + "Militarist", + "Mimöschen", + "Mimose", + "Minderbemittelter", + "Minderwertiger", + "Mineralienbegatter", + "Minifotze", + "Minigolfspieler", + "Miniklöte", + "Miniklötenjunge", + "Minikonzert", + "Minimalinstallierer", + "Minimalkonfiguration", + "Miniment", + "Minimuschi", + "Minirocklutscher", + "Minischwanz", + "Minusbrain", + "Minusglied", + "Minuskreatur", + "Minusmensch", + "Misantrop", + "Mischbatterie", + "Missbildung", + "Missel", + "Missgeburt", + "Missgeburtenficker", + "Missgefick", + "Missgeschiss", + "Missgestalt", + "Missi", + "Misskind", + "Misskörper", + "Misstgestallt", + "Misszucht", + "Mistbiene", + "Mistbreitfotze", + "Mistdackel", + "Mistfink", + "Mistfliege", + "Mistforke", + "Mistgabelmöse", + "Mistgurke", + "Misthaken", + "Misthaufen", + "Misthaufen auf zwei Füßen", + "Misthurenschlampe", + "Mistkäfer", + "Mistkerl", + "Mistkind", + "Mistkörper", + "Mistköter", + "Mistköterkind", + "Mistkrepel", + "Mistkröte", + "Mistmade", + "Mistmaz", + "Mistmöse", + "Mistpenner", + "Mistpfützengebilde", + "Mistpfützenkrebs", + "Mistpritsche", + "Mistratte", + "Mistsau", + "Mistscharbe", + "Mistschlampe", + "Mistschwein", + "Miststück", + "Mistsück", + "Mistvieh", + "Mistwurf", + "Mitesserausdrücker", + "Mitgiftjäger", + "Mitläufer", + "Mittagsschläfer", + "Mittelfinger", + "Mittelgänger", + "Mittelspurfahrer", + "Mittelstationaussteiger", + "Mittelstrahltrinker", + "Mitternachtsfick", + "Mitternachtsficker", + "Mittesserausdrücker", + "Mobbelkotzer", + "Mobbingopfer", + "Mobbingsau", + "Möbelschwanzler", + "Möchte", + "Möchtegern", + "Möchtegernhacker", + "Möchtegernmacho", + "Möchtegernmöchtegern", + "Möchtegernprolet", + "Möchtegernpunk", + "Möchtegernschürzenjäger", + "Möchtegernverführer", + "Möchtgernhyperhero", + "Mockastecher", + "Mofafahrer", + "Mofafresse", + "Moffe", + "Moffgirl", + "Mohnnudelspitzer", + "Möhrenmöse", + "Mokkahöhlendipper", + "Mokkaspaltenlecker", + "Mokkastecher", + "Monatskartenbesitzer", + "Mondfresse", + "Mondgesicht", + "Mondkalb", + "Mondphasenbachter", + "Mongo", + "Mongobär", + "Mongoteddy", + "Monohörer", + "Monozelle", + "Monster", + "Monsterbacke", + "Monsterfurz", + "Monsterkuhpisse", + "Monstertitte", + "Moorhuhn", + "Moorhuhndanebenschießer", + "Moorhuhnjäger", + "Moorleiche", + "Moosbüffel", + "Möpsefresser", + "Mopsklops", + "Moralapostel", + "Morastmöse", + "Mörder", + "Mördermöse", + "Mördermuschi", + "Möse", + "Mösemann", + "Mösenarsch", + "Mösenausschaufler", + "Mösenbär", + "Mösenbaron", + "Mösenbrottoaster", + "Mösenbürster", + "Mösendübel", + "Möseneingangsdurchstoßer", + "Mösenficker", + "Mösenflüssigkeitstaucher", + "Mösenfrisöse", + "Mösenfröhlich", + "Mösenfunghi", + "Mösenfurtz", + "Mösenfurtzer", + "Mösenfurz", + "Mösengrind", + "Mösengulasch", + "Mösenhaarkonsument", + "Mösenhai", + "Mösenheini", + "Mösenhirn", + "Mösenhobel", + "Mösenknecht", + "Mösenkobolt", + "Mösenkotzer", + "Mösenlecker", + "Mösenmühle", + "Mösenmutant", + "Mösenpfurz", + "Mösenpopel", + "Mösenpropeller", + "Mösenpupser", + "Mösenputzer", + "Mösenritter", + "Mösenrubbler", + "Mösenrübe", + "Mösensaftsauger", + "Mösensaftwinzer", + "Mösenschaaf", + "Mösenschaumschlürfer", + "Mösenscherge", + "Mösenschleimabsauger", + "Mösenschleimling", + "Mösenseifenautomat", + "Mösenspecht", + "Mösensprenger", + "Mösensuchadler", + "Mösenverweigerer", + "Mösenvollscheißgerät", + "Mösenwandausschaber", + "Mösenzwieback", + "Mostvieh", + "Motherfucker", + "Motivsockenträger", + "Motorbremser", + "Motorfetischist", + "Motorradputzer", + "Mottenfotze", + "Mottenkopf", + "Möwenscheiße", + "Muchtbirne", + "Muchte", + "Mückenmörder", + "Mückenschiss", + "Mückenstich", + "Mückenstichtitte", + "Muddi", + "Muff", + "Muffbeutel", + "Muffe", + "Muffelfresse", + "Muffelkopf", + "Müffelschweinchen", + "Muffeltante", + "Muffengänger", + "Mugel", + "Muhkuh", + "Mulchmade", + "Mülleimerdurchsucher", + "Müllficker", + "Müllfresser", + "Müllhaldenbewohner", + "Müllhaufen", + "Müllkind", + "Müllkippencamper", + "Müllkopf", + "Müllkotzer", + "Müllkuh", + "Müllmann", + "Müllrausträger", + "Müllsack", + "Müllsammler", + "Müllschlucker", + "Müllsortierer", + "Mülltonenficker", + "Mülltonensucher", + "Mülltonne", + "Mülltonnenbesucher", + "Mülltonnencamper", + "Mülltonnenficker", + "Mülltonnenfresser", + "Mülltonnengangster", + "Mülltonnenschlucker", + "Mülltonnentänzer", + "Mülltrenner", + "Multifunktionsbumser", + "Mültonnenficker", + "Mumienficker", + "Mumu", + "Mumuverfehler", + "Mundblaser", + "Mundduscher", + "Mundfotze", + "Mundfotzenpisser", + "Mundgeburt", + "Mundgully", + "Mundhobel", + "Mundkeule", + "Mundl", + "Mundlarsch", + "Mundstuhlriecher", + "Münzgeldzahler", + "Mupfeljäger", + "Murgel", + "Murkser", + "Murksmacher", + "Murmeleinführer", + "Murmelschnüffler", + "Murmeltierficker", + "Murz", + "Muschelpizzabesteller", + "Muschelschubser", + "Muscheltaucher", + "Muschi", + "Muschiauslecker", + "Muschibacke", + "Muschibär", + "Muschibefäuchtungsanlage", + "Muschibrummer", + "Muschibumser", + "Muschidreck", + "Muschidübel", + "Muschie", + "Muschiekopf", + "Muschieverdichtungsmaschine", + "Muschificker", + "Muschifloo", + "Muschiforscher", + "Muschifotze", + "Muschifrau", + "Muschifrisör", + "Muschifummler", + "Muschifurtzer", + "Muschifurz", + "Muschifurzer", + "Muschigaumen", + "Muschigesicht", + "Muschigrindabschaber", + "Muschihaarentferner", + "Muschihaarflechter", + "Muschihaarraucher", + "Muschihaarstylist", + "Muschikimme", + "Muschikopf", + "Muschikopfficker", + "Muschikotlettenträger", + "Muschikrampf", + "Muschikratzbürste", + "Muschikratzer", + "Muschikriecher", + "Muschikröte", + "Muschiküsser", + "Muschilappen", + "Muschilecker", + "Muschileckerbrot", + "Muschiloch", + "Muschilochverfehler", + "Muschilutscher", + "Muschimann", + "Muschimat", + "Muschimaus", + "Muschipatscher", + "Muschipilz", + "Muschipilzgesicht", + "Muschipimmelkuchen", + "Muschipups", + "Muschipupser", + "Muschisafttrinker", + "Muschischleim", + "Muschischleimfotzensauger", + "Muschischleimfresse", + "Muschisuppe", + "Muschisuppenschlürfer", + "Muschitrompeter", + "Muschitumor", + "Muschiwurm", + "Muschiyeti", + "Muschkote", + "Muschkratzer", + "Muschschleimauslecker", + "Muskatensammler", + "Muskatnusskiffer", + "Müsliesser", + "Müslifotze", + "Müslifotzenficker", + "Muslöffel", + "Mutant", + "Mutantenknochen", + "Mutantenpenis", + "Mutt. bfrut", + "Mutterbefruchter", + "Mutterbesamer", + "Mutterbrustkuschler", + "Mutterbumser", + "Mutterficker", + "Mutterfickerkind", + "Mutterfotze", + "Mutterkeibi", + "Mutterkuchen", + "Mutterkuchenesser", + "Mutterkuchenkonditor", + "Mutterküsser", + "Mutterlecker", + "Mutterlutscher", + "Muttermilchschlürfer", + "Muttersack", + "Muttersniffie", + "Muttersöhnchen", + "Muttersönchen", + "Muttertittenlutscher", + "Muttervergewaltiger", + "Muttervonhintenbestäuber", + "Muttibefriediger", + "Muttiklauer", + "Muttiküsser", + "Muttilecker", + "Muttisager", + "Mützennap", + "Mützenschläfer", + "Naagnase", + "Nabelo", + "Nabeltrockner", + "Nachäffer", + "Nachgeburt", + "Nachgeburtennascher", + "Nachgeburtsesser", + "Nachgeburtsnager", + "Nachhilfeunterrichtnehmer", + "Nachinnenpisser", + "Nachmacher", + "Nächsterkundeschildbenutzer", + "Nachtjacke", + "Nachtschattengewächs", + "Nachttopfausschlürfer", + "Nachttopfsklave", + "Nachtwächter", + "Nackedei", + "Nackefitz", + "Nacken", + "Nackenarschficker", + "Nackenficker", + "Nackenkügelchendreher", + "Nacktarsch", + "Nacktbader", + "Nacktfrosch", + "Nacktmull", + "Nacktmulleuter", + "Nacktmullfotze", + "Nacktmullgesicht", + "Nacktschnecke", + "Nacktschneckenpornograph", + "Nacktschneckenstreichler", + "Nacktschneckenvergewaltiger", + "Nägelabkauer", + "Nagelbeißer", + "Nagelfeiler", + "Nagelkauer", + "Nagellackfresse", + "Nagelsuzler", + "Nagetier", + "Nahkampfstachel", + "Naivling", + "Namensschildträger", + "Nanogehirnbesitzer", + "Napfkuchen", + "Napfsülze", + "Napfsülzenfresser", + "Nappel", + "Narrischer", + "Nasebpopelzerquetscher", + "Nasenbär", + "Nasenbohrer", + "Nasendipsel", + "Nasendralla", + "Nasenficker", + "Nasenfurz", + "Nasengebirge", + "Nasengeburt", + "Nasenhaarbinder", + "Nasenhaarepilierer", + "Nasenhaarmediziner", + "Nasenhaarrasierer", + "Nasenhaarreiniger", + "Nasenhaarschneider", + "Nasenhaarzupfer", + "Nasenhans", + "Nasenhochzieher", + "Nasenhöhle", + "Nasenklammernschwimmer", + "Nasenkottlet", + "Nasenlochficker", + "Nasenlochpopellecker", + "Nasenpflastersportler", + "Nasenpisser", + "Nasenpopelfresser", + "Nasenpups", + "Nasenrammel", + "Nasenschnäuzer", + "Nasepopler", + "Nashorn", + "Nashornficker", + "Nassbirne", + "Nassfötzchen", + "Nassfurzer", + "Nasshirse", + "Nasshöschen", + "Nasskämmer", + "Natter", + "Naturkaviarliebhaber", + "Naturmensch", + "Naturscheißer", + "Natursektschlürfer", + "Navigationssystembenutzer", + "Neandertaler", + "Nebenarsch", + "Nebenhodenvergiftung", + "Neidfutt", + "Neidhammel", + "Neinsager", + "Nekrofungus", + "Nekromant", + "Nekrophiler", + "Nenner, kleinster gemeinsamer", + "Neoprentaucher", + "Nepper", + "Nervbolzen", + "Nervensäge", + "Nesseltier", + "Nestbeschmutzer", + "Nesthäckchen", + "Netzhautpeitsche", + "Neun Live-Anrufer", + "Neunmalkluger", + "Newbie", + "Nichtschwimmer", + "Nichtskönner", + "Nichtsmehrmerker", + "Nichtsnutz", + "Nichtspüler", + "Nichtsseier", + "Nichtstöhner", + "Nichtstuer", + "Niderwuchs", + "Niederdrehzahlfahrer", + "Niederträchtiger", + "Niedriglattenaufsteller", + "Niedrigster", + "Nielpferd", + "Niemand", + "Nierensteingurgler", + "Nihilist", + "NIL Druckspüler", + "Nilferdgesicht", + "Nille", + "Nillebimbo", + "Nillebisquit", + "Nillekaas", + "Nillekässchnüffler", + "Nillekes", + "Nillekopp", + "Nillengrind", + "Nillenkäse", + "Nillenkäsefresser", + "Nillenkäsegourmet", + "Nillenkäsehort", + "Nillenkäselecker", + "Nillenkäsezüchter", + "Nillenkopf", + "Nillenlecker", + "Nillenschmand", + "Niller", + "Nilllenflicker", + "Nilpferd", + "Nilpferdfotze", + "Nippel", + "Nippelbeißer", + "Nippelbumser", + "Nippelficker", + "Nippelhirn", + "Nippelkind", + "Nippellecker", + "Nippelmassierer", + "Nippelsauger", + "Nippelschwein", + "Nippelverwuchs", + "Nippelwichser", + "Nippelwurm", + "Nippelzieher", + "Nippler", + "Nipplette", + "Nockenwellenhobel", + "Nockerbatscherl", + "Nöff", + "Nöffgesicht", + "Nölle", + "Nonnenfoz", + "Noob", + "Notarztrufer", + "Notfall", + "Notfalldiskettenersteller", + "Notfötzchen", + "Notgeiler", + "Notmöse", + "Nougatfalte", + "Nougatfurche", + "Nougatrinnennascher", + "Nougatscheißer", + "Nougatschleuse", + "Nougatschnitte", + "Nougatstampfer", + "Nudelarschgesicht", + "Nudelauge", + "Nudeldrucker", + "Nudeler", + "Nudeleuter", + "Nudelfurz", + "Nudelholz", + "Nudelholzbumser", + "Nudellecker", + "Nudellutscher", + "Nudelpudel", + "Nudelsackgabläse", + "Nudelschwinger", + "Nudelsieb", + "Nudelwichser", + "Nudistenfotograf", + "Nudlhund", + "Nugatspalte", + "Nugget", + "Nukleargesicht", + "Nullachtfuchzehnpisser", + "Nüllenkäsenesser", + "Nüllenkopf", + "Nullnummer", + "Nullsingularität", + "Nulpe", + "Nuss, dumme", + "Nuss, taube", + "Nussbrot", + "Nussbuckel", + "Nüsschen", + "Nussgipfel", + "Nusskasten", + "Nussknacker", + "Nussknackerface", + "Nusskopf", + "Nussprinz", + "Nutellabein", + "Nutellaglas", + "Nutellamonster", + "Nutte", + "Nuttenarsch", + "Nuttenarschbumser", + "Nuttenbefruchter", + "Nuttenbegrabscher", + "Nuttenbengel", + "Nuttenbumser", + "Nuttenbumsgesicht", + "Nuttendiesel", + "Nuttenficker", + "Nuttenfresse", + "Nuttenfummler", + "Nuttenhintern", + "Nuttenjäger", + "Nuttenjunge", + "Nuttenkerl", + "Nuttenkind", + "Nuttenkopf", + "Nuttenkotzeschlucker", + "Nuttenkunde", + "Nuttenlecker", + "Nuttenlutscher", + "Nuttenmösenlecker", + "Nuttennarr", + "Nuttennippel", + "Nuttenpissetrinker", + "Nuttenpreller", + "Nuttenprinz", + "Nuttensammler", + "Nuttensau", + "Nuttenscheißefresser", + "Nuttenschlampe", + "Nuttenschlumpf", + "Nuttensohn", + "Nuttenstängel", + "Nuttenstaubsauger", + "Nuttentester", + "Nuttentopf", + "Nuttenträger", + "Nuttenvergewaltiger", + "Nuttenviech", + "Nuttenwurst", + "Nuttenzüchter", + "Nutterich", + "Oberaffe", + "Oberaffenarsch", + "Oberarsch", + "Oberbazille", + "Oberbazillus", + "Oberblumengießer", + "Oberdackel", + "Oberflächentaucher", + "Oberkakerlake", + "Oberlusche", + "Obermotz", + "Oberonanierer", + "Oberpfeife", + "Oberschlampe", + "Obertrottel", + "Objekt", + "Obstabwascher", + "Obstkuchenvergewaltiger", + "Obstler", + "Obstsalat", + "Obstschäler", + "Obstwäscher", + "Ochsenfrosch", + "Ochsenfroschbegatter", + "Ochsenkind", + "Ochsenkopf", + "Ochsenpimmel", + "Ochsenschwanz", + "Ochsentreiber", + "Odlgrubentaucher", + "Oedipus", + "Ofenreiniger", + "Ofensitzer", + "Ohnelichtbeischläfer", + "Ohrauslutscher", + "Ohrenkaktus", + "Ohrenpopler", + "Ohrenputzer", + "Ohrenschlüfer", + "Ohrenschmalz", + "Ohrenschmalzbeseitiger", + "Ohrenschmalzesser", + "Ohrenschmalzkoster", + "Ohrenschmalzlutscher", + "Ohrenschmalznascher", + "Ohrenwärmerträger", + "Ohrfeige", + "Ohrfeigengesicht", + "Ohrschmalzlecker", + "Ohrwaschlkaktus", + "Oimel", + "Oktopusfresse", + "Olbel", + "Olivenkernlutscher", + "Omabefriediger", + "Omafaltenlutscher", + "Omaficker", + "Omalecker", + "Omaliebling", + "Omapopper", + "Omaschlucker", + "Omaschlüpfer", + "Omavergewaltiger", + "Omavotzenlecker", + "Omibumser", + "Ommelkuh", + "Onanierer", + "Onanierfaust", + "Onanierkolben", + "Onanist", + "Onkelficker", + "Onsel", + "Opabläser", + "Opafaltenglattlutscher", + "Opaficker", + "Operettenhörer", + "Opernficker", + "Opferkind", + "Opferknecht", + "Opfernoob", + "Opferpenis", + "Opferspast", + "Opossum", + "Opportunist", + "Optimist", + "Oralbolzen", + "Oraldurchfall", + "Oralfotzenlecker", + "Oralmonster", + "Oralprediger", + "Oralscheißer", + "Oralschlürfer", + "Oralsodomist", + "Oralspritzer", + "Oralsüchtiger", + "Orangenarsch", + "Orangutan", + "Orangutanarsch", + "Orang-Uthan", + "Organfehler", + "Orgasmusansager", + "Orgasmusbremse", + "Orgasmuseintreiber", + "Orgasmuskeule", + "Orgasmuskönig", + "Orgasmusmonster", + "Orgasmusvortäuscher", + "Orgasmuswichser", + "Orgasmusziege", + "Orgelpfeife", + "Original", + "Orkanangsthaber", + "Orkschänder", + "Ornitologe", + "Oropaxträger", + "Ortsschildbremser", + "Otterfotze", + "Otternäschen", + "Otterngezücht", + "Otzenschlonz", + "Outlaw", + "Ovalbefriediger", + "Oze", + "Ozelotenfotzer", + "Ozelotficker", + "Ozondödel", + "Ozonenloch", + "Ozongeburt", + "Paarhufer", + "Packesel", + "Päckle", + "Paddelbootraser", + "Päddy", + "Päderast", + "Pädolette", + "Pafümerieschlampe", + "Pakascheninstrument", + "Palmesel", + "Pampasrocker", + "Pampelmusenficker", + "Pamperswechseler", + "Pampskoch", + "Pandabär", + "Pannkooken", + "Panoramamaik", + "Panosficker", + "Panscher", + "Pansen", + "Pansenfresser", + "Pansengesicht", + "Pansenkind", + "Pansenkopf", + "Pansenrammler", + "Pantoffelheld", + "Pantoffelparallelaufsteller", + "Pantoffeltierchenfußmatte", + "Pantoffelträger", + "Panzereichel", + "Papageikondomtester", + "Papierficker", + "Papierrückseitenbeschreiber", + "Papierstauentferner", + "Papiertieger", + "Papist", + "Papnase", + "Pappenheimer", + "Pappnase", + "Pappteller", + "Paragraphenreiter", + "Paraphilneurotiker", + "Parasit", + "Parfümierer", + "Parfümschlampe", + "Parkfreier", + "Parkhausparker", + "Parkhausschrankenhure", + "Parklückenverstopfer", + "Parkplatzlückenspringer", + "Parkscheibenweiterdreher", + "Parmesahnlutscher", + "Partnerbefriediger", + "Partybummser", + "Partyficker", + "Partykotzunke", + "Partyluder", + "Partynutte", + "Partypuper", + "Partytypenrunterholflittchen", + "Passfotogrinser", + "Passwortaufschreiber", + "Pastete", + "Pastillenhalbierer", + "Patentschwätzer", + "Patschen", + "Pattexfresse", + "Pauschaltourist", + "Pavian", + "Pavianarsch", + "Pavianfut", + "Pavianhintern", + "Paviankönig", + "Paviankotlecker", + "Pavianzüchter", + "Pawianarsch", + "Paypalschuldner", + "PC-Runterfahrer", + "Pechvogel", + "Pedalneurotiker", + "Pedbär", + "Pederast", + "Pedo", + "Pedobär", + "Pedofotzenficker", + "Pegalus", + "Pelikanpenis", + "Pellwemser", + "Pelzfotze", + "Pelzkopf", + "Pelzmantelablehner", + "Penatenarsch", + "Penetrator", + "Peniröhrenverlegungsapperat", + "Penis Ocularis", + "Penisanbläser", + "Penisattrappe", + "Penisauto", + "Penisbacke", + "Penisbär", + "Penisbauer", + "Penisbirne", + "Penisdreher", + "Penisenteiser", + "Peniseule", + "Penisfickermonster", + "Penisfinger", + "Penisfisch", + "Penisfischaussaugungsgerät", + "Penisflitsche", + "Penisflötist", + "Penisforscher", + "Penisfresse", + "Penisfresser", + "Penisfriedhof", + "Penisfummler", + "Penisfurtzer", + "Penisfurunkel", + "Penisgarage", + "Penisgebein", + "Penisgeier", + "Penisgeige", + "Penisgesicht", + "Penisglatze", + "Penisgnom", + "Penisgrampe", + "Penisgurke", + "Penishaube", + "Penisherrscher", + "Penishirn", + "Penishirsch", + "Penishund", + "Penisinspektor", + "Peniskacker", + "Peniskäse", + "Peniskind", + "Penisknoten", + "Peniskopf", + "Peniskopfadler", + "Peniskopfduscher", + "Peniskratzer", + "Peniskünstler", + "Penisküsser", + "Penislängenvergleicher", + "Penisläufer", + "Penislecker", + "Penisloch", + "Penislocher", + "Penislollie", + "Penislutscher", + "Penislutschgerippe", + "Penismagd", + "Penismatte", + "Penismonster", + "Penismuschi", + "Penisnase", + "Penisnasenhund", + "Penisnutte", + "Penispanzer", + "Penisparmesan", + "Penispickel", + "Penispilz", + "Penispirat", + "Penisprinz", + "Penisprotese", + "Penisprothese", + "Penispumpe", + "Penispups", + "Penisrakete", + "Penisratte", + "Penisscharfrichter", + "Penisschlucker", + "Penisschlumpf", + "Penisspitzer", + "Penisstinker", + "Penisstütze", + "Penistampon", + "Penistier", + "Penistorsion", + "Penisvergrößerungspumpe", + "Penisverkürzung", + "Penisverschleißung", + "Penisvibrator", + "Penisvisage", + "Peniswärmer", + "Peniswarze", + "Peniswurst", + "Peniswurzel", + "Pennbruder", + "Penner", + "Penner vom Dienst", + "Pennerabzocker", + "Penneraffe", + "Pennerficker", + "Pennergesicht", + "Pennergurke", + "Pennerhaufen", + "Pennerkind", + "Pennerkopf", + "Pennerlutscher", + "Pennerolle", + "Pennerratte", + "Pennislutscher", + "Penniszwerg", + "Pensionistenanbrunzer", + "Penuschi", + "Pepdrosel", + "Pepnase", + "Pepschwanzficker", + "Pepschwanzwicher", + "Periodensoßentrinker", + "Perückenschaf", + "Perverser", + "Perversling", + "Pessimist", + "Pestbeule", + "Pestbeulenlutscher", + "Peter Penis", + "Petzarschficker", + "Petze", + "Petzer", + "Pfaffenficker", + "Pfahlochse", + "Pfandflaschenzurückbringer", + "Pfandpirat", + "Pfannenarsch", + "Pfannenkuchengesicht", + "Pfannkuchengesicht", + "Pfefferkopf", + "Pfeife, allergrößte", + "Pfeifendeckel", + "Pfeifenheini", + "Pfeifenkopf", + "Pfeifenwichs", + "Pfeifenwichser", + "Pfennigfuchser", + "Pferdbesteiger", + "Pferdeapfel", + "Pferdeapfelfeinschmecker", + "Pferdearsch", + "Pferdearschgeburt", + "Pferdeficker", + "Pferdefleischfresser", + "Pferdefotze", + "Pferdefresse", + "Pferdefurzinhalierer", + "Pferdegefriss", + "Pferdegesicht", + "Pferdehoden", + "Pferdesamenverkoster", + "Pferdeschwanzlutscher", + "Pferdevagina", + "Pfiffer", + "Pfingstochse", + "Pfirsichabschäler", + "Pfirsichkopf", + "Pfirsichspalte", + "Pflanze", + "Pflanzenbegrabscher", + "Pflasterhirsch", + "Pflaumenaugust", + "Pflaumenlecker", + "Pfliegel", + "Pflock", + "Pflunze", + "Pförtnerkind", + "Pfosten", + "Pfötz", + "Pfotzenhobel", + "Pfotzenknecht", + "Pfotzenknüppel", + "Pfundshammel", + "Pfurz", + "Pfurzi", + "Pfurzkanone", + "Pfurzkarnickel", + "Pfurzknecht", + "Pfurzkopf", + "Pfurztüte", + "Pfuscher", + "Pfützenumfahrer", + "Phantast", + "Phasenvertauscher", + "Philantrop", + "Philister", + "Photoficker", + "Phrasendrescher", + "Pichler", + "Pickel", + "Pickelabdecker", + "Pickelarsch", + "Pickelausdrücker", + "Pickelauslutscher", + "Pickelbart", + "Pickelbefruchter", + "Pickelface", + "Pickelficker", + "Pickelfotzenwarze", + "Pickelfratzenarsch", + "Pickelfresse", + "Pickelfresser", + "Pickelgesicht", + "Pickelpampe", + "Pickelpenis", + "Pickelpinoccio", + "Pickelplantage", + "Pickelsau", + "Pickelverkoster", + "Pickelwurm", + "Piefke", + "Pienser", + "Piepmatz", + "Piepmatzbeschwörer", + "Piercingträger", + "Piesepampel", + "Pifke", + "Pikachupopel", + "Pikel", + "Pikelface", + "Pikelgesicht", + "Pillelrübe", + "Pillemannarsch", + "Pillendreher", + "Pillenfresser", + "Pillermann", + "Pillermannarsch", + "Pilsfurtz", + "Pilsnacken", + "Pilzfuß", + "Pilzzüchter", + "Pimelgesicht", + "Pimellecker", + "Pimellutscher", + "Pimelschwertkämpfer", + "Pimmel", + "Pimmelabschüttler", + "Pimmelarsch", + "Pimmelarschloch", + "Pimmelbacke", + "Pimmelbammel", + "Pimmelbär", + "Pimmelbeißer", + "Pimmelbirne", + "Pimmelbläser", + "Pimmeldieb", + "Pimmeldipp", + "Pimmelente", + "Pimmeleule", + "Pimmelfatze", + "Pimmelficker", + "Pimmelflöte", + "Pimmelfotze", + "Pimmelfotzenlecker", + "Pimmelfrau", + "Pimmelfresse", + "Pimmelfresser", + "Pimmelgesicht", + "Pimmelgestank", + "Pimmelgewächs", + "Pimmelgretsche", + "Pimmelgrille", + "Pimmelgucker", + "Pimmelhupe", + "Pimmelhure", + "Pimmelkäse", + "Pimmelkäseesser", + "Pimmelkäsefanaticker", + "Pimmelkauer", + "Pimmelkind", + "Pimmelking", + "Pimmelkittfresser", + "Pimmelknecht", + "Pimmelkneter", + "Pimmelknoten", + "Pimmelkopf", + "Pimmellecker", + "Pimmelloch", + "Pimmellutscher", + "Pimmelmann", + "Pimmelmannarschloch", + "Pimmelmannsau", + "Pimmelminister", + "Pimmelmönch", + "Pimmelnase", + "Pimmelnasenbär", + "Pimmelnuckelzwerg", + "Pimmelnuckler", + "Pimmelnutte", + "Pimmelofant", + "Pimmelpenner", + "Pimmelpeter", + "Pimmelpirat", + "Pimmelpisser", + "Pimmelpony", + "Pimmelprinz", + "Pimmelprothese", + "Pimmelpups", + "Pimmelreiber", + "Pimmelrübe", + "Pimmelsack", + "Pimmelsammler", + "Pimmelsau", + "Pimmelsauger", + "Pimmelschimmel", + "Pimmelschlucker", + "Pimmelschorf", + "Pimmelschorflecker", + "Pimmelschupse", + "Pimmelschwanz", + "Pimmelschwein", + "Pimmelschwinger", + "Pimmelschwitzer", + "Pimmelsgesicht", + "Pimmelvergewaltiger", + "Pimmelwichser", + "Pimmelwicht", + "Pimmelwurst", + "Pimmelwurstfachverkäufer", + "Pimmelzieher", + "Pimmelzwerg", + "Pimperperle", + "Pimperpimmel", + "Pimperpöttchen", + "Pingufant", + "Pinguinficker", + "Pinguingesicht", + "Pinguinscheiße", + "Pinguinscheißefresser", + "Pinippel", + "Pinkelschwein", + "Pinkler", + "Pinnummernaufschreiber", + "Pinscher", + "Pinsel", + "Pinselschwinger", + "Pinsettenficker", + "Pinwandbenutzer", + "Pipifrau", + "Pipikruste", + "Pipilutscher", + "Pipimann", + "Pipisau", + "Pippischwein", + "Pippitröpflerli", + "Pisimann", + "Pissameise", + "Pissbacke", + "Pissbackenzeisig", + "Pissbär", + "Pissbeckenforelle", + "Pissbeckenlecker", + "Pissbeckensteinlutscher", + "Pissbesen", + "Pissbeutel", + "Pissbirne", + "Pissbirnenkopf", + "Pissbratze", + "Pissbreze", + "Pissbruder", + "Pissduscher", + "Pisseimer", + "Pisselefant", + "Pissente", + "Pisser", + "Pisseschlotzer", + "Pissetrinker", + "Pissfalte", + "Pissfleck", + "Pissfleckchen", + "Pissflinte", + "Pissflitsch", + "Pissflitsche", + "Pissfotze", + "Pissfresse", + "Pissgehirn", + "Pissgesicht", + "Pissgurke", + "Pisshamster", + "Pisshaufen", + "Pisshund", + "Pisshure", + "Pisskachel", + "Pisskackarsch", + "Pisskind", + "Pissklo", + "Pissknitte", + "Pissknödel", + "Pisskopf", + "Pisskröte", + "Pisslache", + "Pisslappen", + "Pissmatratze", + "Pissmaul", + "Pissmolch", + "Pissmösengesicht", + "Pissnelke", + "Pissnelkenbefruchter", + "Pissnille", + "Pissnoob", + "Pissoirforelle", + "Pissoirkacker", + "Pisspage", + "Pisspantoffel", + "Pissqualle", + "Pissratte", + "Pissrattenkadaver", + "Pissrinne", + "Pissrinnenverfehler", + "Pissritze", + "Pisssau", + "Pissschaumschlürfer", + "Pissschlampe", + "Pissschnalle", + "Pissschwein", + "Pisstasche", + "Pissuarkacker", + "Pissvogel", + "Pissvotzenschwein", + "Pisswichse", + "Pistensau", + "Pistenschwein", + "Pistenstreicher", + "Pixelquäler", + "Pizzagesicht", + "Pizzarandliegenlasser", + "Plagegeist", + "Plagiator", + "Planet", + "Planschbeckentaucher", + "Planschkuh", + "Plantagenpopper", + "Plapperer", + "Plappermaul", + "Plärrer", + "Plastiktütenaufbewahrer", + "Plastiktütenmehrfachbenutzer", + "Plätzchenteignascher", + "Platzhirsch", + "Playboyfetischist", + "Playboyficker", + "Playboygucker", + "Plazenta", + "Pleitegeier", + "Plempe", + "Pluckiföster", + "Plumpskloliebhaber", + "Plumpsklotaucher", + "Plumpskuh", + "Plüschtierpopper", + "Plutoficker", + "Pöbel", + "Pockenpenis", + "Poesiealbumgedichtesammler", + "Pogeschwür", + "Pokemon", + "Pokemonfetischist", + "Pokerface", + "Pokreme", + "Polierter", + "Polizistengrüßer", + "Poloch", + "Polochficker", + "Polochreiber", + "Polygon", + "Polysacaridfresser", + "Pommelpanzer", + "Pommesbudenfresser", + "Pommespanzer", + "Pömpellutscher", + "Pömpelwasser", + "Ponase", + "Pönkel", + "Popelbefriediger", + "Popelbremse", + "Popelding", + "Popelesser", + "Popelfresser", + "Popelgesicht", + "Popellutscher", + "Popelnase", + "Popelpeitsche", + "Pöpelpimmel", + "Popelprofi", + "Popelrundroller", + "Popelschnipser", + "Popelstrecker", + "Popelsucher", + "Popeltante", + "Popelwegschnipper", + "Poperze", + "Poperzenlutscher", + "Poperzenpirat", + "Poperzenschlürfer", + "Popler", + "Popobär", + "Popoblaser", + "Popobluter", + "Popobohrer", + "Popobox", + "Popobums", + "Popobürster", + "Popoclubmitglied", + "Popodegen", + "Popoeislutscher", + "Popoesser", + "Popoficker", + "Popofickgerät", + "Popogesicht", + "Popogucker", + "Popohinhalter", + "Popokind", + "Popoklatscher", + "Popoklopfer", + "Popoküsser", + "Popolecker", + "Popoliebemacher", + "Popoloch", + "Popolochgiraffe", + "Popolutscher", + "Poponase", + "Popopirat", + "Popopopper", + "Popopupser", + "Poporacer", + "Poporammler", + "Poposchinken", + "Popostecher", + "Popostopfer", + "Popowichskind", + "Poppelfresser", + "Poppkornpopper", + "Poppolecker", + "Popporiecher", + "Poppwaffel", + "Poritzenlecker", + "Pornobildsammler", + "Pornodarsteller", + "Pornoficker", + "Pornofreak", + "Pornogazelle", + "Pornograph", + "Pornoheftverstecker", + "Pornokiller", + "Pornokind", + "Pornolehrer", + "Pornolocke", + "Pornonikolaus", + "Pornopapst", + "Pornoprinz", + "Pornoprostituierte", + "Pornosammler", + "Pornosau", + "Pornosaurus", + "Pornoschlampe", + "Pornoschniedel", + "Pornostar", + "Pornowürstchen", + "Porreefickstängel", + "Portion, halbe", + "Postkartenschreiber", + "Postkutschenpferdewechsler", + "Postmarkenanschlecker", + "Potsau", + "Pottsau", + "Pottschwanz", + "Pottwalsau", + "Potzköpfchen", + "Powermuschimagnet", + "Pozyklop", + "Prahler", + "Prahlhans", + "Prairieficker", + "Prallbirne", + "Pralli", + "Prallkopf", + "Prämiensparer", + "Prantze", + "Prasselhirn", + "Praxistest", + "Pregler", + "Preisvergleicher", + "Prelli", + "Prellus", + "Pressgeburt", + "Presswurst", + "Prilente", + "Primadonna", + "Primat", + "Primatenaffe", + "Primatengesäß", + "Primatenschwein", + "Primelficker", + "Primitivling", + "Printgirlie", + "Prinzporno", + "Probefahrtmacher", + "Probeneinsammler", + "Problembusen", + "Problemfilmgucker", + "Problemzonenaufhäufung", + "Professorgrüßer", + "Profondeur", + "Prolet", + "Proletensau", + "Proletenwitz", + "Proll", + "Prolopimmelpilz", + "Promenadenmischung", + "Promillepapst", + "Promillepromineneter", + "Prophylaxer", + "Proportionsunfug", + "Prostituierte", + "Protostomier", + "Protze", + "Provinzfurz", + "Provinzpenner", + "Provokateur", + "Pseudo", + "Pseudofotze", + "Pseudofotzenlecker", + "Pseudofratze", + "Pseudoleben", + "Pseudonutte", + "Pseudoprofi", + "Pseudopsychopat", + "Pseudoschlampe", + "Psycho", + "Psychoclown", + "Psychokrüppel", + "Psychonudl", + "Psychopat", + "Psychopath", + "Puddingbügler", + "Puddingdampfer", + "Puddingfotze", + "Puddingkind", + "Pudelficker", + "Pudelfriseur", + "Pudelknutscher", + "Puderquaste", + "Puderquasti", + "Puffbesitzer", + "Puffbesucher", + "Puffer", + "Puffgestalt", + "Puffgezeugter", + "Puffhenkst", + "Puffi", + "Pufflaterne", + "Puffmutter", + "Puffmutti", + "Puffnudel", + "Puffnutte", + "Puffranger", + "Puffratte", + "Puffreisdaddy", + "Puffreiskanone", + "Puffsalami", + "Puffschlange", + "Puffwanze", + "Puller", + "Pullerfresse", + "Pullergesicht", + "Pullerkeks", + "Pullerkopf", + "Pullerschnute", + "Pullunderträger", + "Pumaarsch", + "Pümmel", + "Pummelfee", + "Pumpelschnorchler", + "Pumuckel", + "Punikaflasche", + "Pünktlichkommer", + "Pünte", + "Puparsch", + "Pupenschmatzer", + "Puperzenlecker", + "Puppenficker", + "Puppenhausinnenausstatter", + "Puppenpopoküsser", + "Pupsbacke", + "Pupsbärchen", + "Pupser", + "Pupsgesicht", + "Püpsimüpsi", + "Pupsipopo", + "Pupskanone", + "Pupskind", + "Pupskissen", + "Pupsknödel", + "Pupskopf", + "Pupsluft", + "Pupsnase", + "Pupspüppchen", + "Pupsschnecke", + "Pupsschnüffler", + "Pupstörtchen", + "Pupswindel", + "Pupswurst", + "Pürrer", + "Pussy", + "Pussyhammer", + "Pussylutscher", + "Pussymuff", + "Pussypock", + "Pussystrocker", + "Pusteblume", + "Pusteblumenabzupfer", + "Pustnickel", + "Putensau", + "Pygmäenpimmel", + "Pyroverlierer", + "Quacksalber", + "Quadratarschloch", + "Quadratdackel", + "Quadratdepp", + "Quadratfresse", + "Quadratlatschi", + "Quadratratschen", + "Quadratschädel", + "Quadrowichsgesicht", + "Quälgeist", + "Qualitätssicherer", + "Qualle", + "Quallenaußenrumschwimmer", + "Quallenficker", + "Quallenfischer", + "Quallenwichser", + "Quängelfritz", + "Quängler", + "Quarkbecherauskratzer", + "Quarkschädel", + "Quarktaschenfrau", + "Quasimodo", + "Quasselstrippe", + "Quassler", + "Quastenflossler", + "Quatscher", + "Quatschkopf", + "Queefmuschi", + "Querdenker", + "Querfeldantilope", + "Querficker", + "Querflötenlutscher", + "Querfurzantilope", + "Querfut", + "Querfutzflöte", + "Querkopf", + "Querschwimmer", + "Querulant", + "Querzahnmolch", + "Quetschbirne", + "Quetschgeburt", + "Quetschhodenlutscher", + "Quickificker", + "Quietschentchen", + "Quittungssammler", + "Rabattmarkenkleber", + "Rabauke", + "Rabaukenpuller", + "Rabenaas", + "Rabenscheißer", + "Radarfallenbremser", + "Radarfallenwarner", + "Radfahrernatur", + "Radikalkannibale", + "Radiohörer", + "Radischenvonuntenangucker", + "Radkappenpolierer", + "Radkappenverbieger", + "Radwichser", + "Raffke", + "Raffzahn", + "Rammel", + "Rammelking", + "Rammeloschi", + "Rammelrumpf", + "Rammelrüssel", + "Rammler", + "Rampenpimmel", + "Randalierotto", + "Randgruppenassi", + "Randschteinbumser", + "Randsteinabhänger", + "Randsteinbefruchter", + "Randsteinbeißer", + "Randsteinbumbser", + "Randsteinbumser", + "Randsteingurke", + "Randsteinküsser", + "Randsteinlecker", + "Ranzberg", + "Ranzbolzen", + "Ranzfotze", + "Ranzldanzl", + "Ranzmöse", + "Ranzratte", + "Ranztüte", + "Rapsöltanker", + "Rasenficksau", + "Rasenmäher", + "Rasenmähervergewaltiger", + "Rastahure", + "Rastplatzbenützer", + "Ratenzahler", + "Ratschkattel", + "Rattenafter", + "Rattenarsch", + "Rattenbiss", + "Rattenfänger", + "Rattenficker", + "Rattenfotze", + "Rattenfresse", + "Rattenfresser", + "Rattengeburt", + "Rattenjunge", + "Rattenkind", + "Rattenkopf", + "Rattenlecker", + "Rattenlutscher", + "Rattenmörder", + "Rattenrektaleinführer", + "Rattenritze", + "Rattenschiss", + "Rattenschwanz", + "Rattenschwanzreiter", + "Rattensohn", + "Rattenstall", + "Rattsloch", + "Räuber", + "Räuberstochter", + "Raubkopierer", + "Raubritter", + "Raufbold", + "Raumann", + "Raunga", + "Raunz", + "Rauschkind", + "Rausspritzer", + "Reagenzficker", + "Reagenzglasgeburt", + "Reagenzglaskind", + "Reagenzglaswichser", + "Reaktionär", + "Realitätsfremder", + "Reblaus", + "Rechthaber", + "Rechtsabbieger", + "Rechtsbeuger", + "Rechtschreibprogrammbenutzer", + "Rechtsfahrer", + "Rechtslinksverwechsler", + "Rechtsverdreher", + "Rechtwinkelwichser", + "Reeperbahnfotze", + "Reformhausübernachter", + "Reformkostesser", + "Regelblutschlürfer", + "Regelsammler", + "Regelschlecker", + "Regenflüchter", + "Regenhaubenaufsetzer", + "Regentonnenaufsteller", + "Regenwassersammler", + "Regenwurm", + "Regenwurmficker", + "Regimentsschlampe", + "Rehfötzchen", + "Rehkopp", + "Rehstreichler", + "Reifenknutscher", + "Reinigungsbandbenutzer", + "Reiningschwanz", + "Reißnagelaufheber", + "Rekalsüchtiger", + "Rektalartist", + "Rektalbohrer", + "Rektalforscher", + "Rektalforunkel", + "Rektalfurunkel", + "Rektalgemeuer", + "Rektalgewitter", + "Rektalgourmet", + "Rektalgurke", + "Rektalkarotte", + "Rektalmonteur", + "Rektalpirat", + "Rektaltrombose", + "Rektumsurfer", + "Relaxo", + "Renegat", + "Rentier", + "Reptil", + "Resteeinfrierer", + "Resteficker", + "Restprodukt", + "Reudeschleuder", + "Reusenschlürfer", + "Rhinozeros", + "Richkolben", + "Richtgeschwindigkeitsfahrer", + "Riemen", + "Riemenhändler", + "Riesenarsch", + "Riesenbaby", + "Riesenblödarsch", + "Rieseneinlauf", + "Riesenross", + "Riesensack", + "Rinderbüffel", + "Rinderficker", + "Rinderschinder", + "Rindschwein", + "Rindspimpel", + "Rindsschaf", + "Rindvieh", + "Rindviehficker", + "Ringelnatter", + "Rinnenbowler", + "Rinozerosfurz", + "Ritzenblitz", + "Ritzendreck", + "Ritzenflitzer", + "Ritzenfummler", + "Ritzenkacker", + "Ritzenlecker", + "Ritzenpflücker", + "Ritzenpisser", + "Ritzenputzer", + "Ritzenragout", + "Ritzenritter", + "Ritzensammler", + "Ritzenschnecke", + "Ritzenspritzer", + "Rizeschwitzer", + "Robbenbabyschänder", + "Robbenficker", + "Roboter", + "Rochzipfelzieher", + "Rocker", + "Rockzipfellutscher", + "Rohrkrepierer", + "Rohrspatzgucker", + "Roller", + "Rollerfahrer", + "Rollischubser", + "Rollkofferschieber", + "Rollkragenträger", + "Rollmops", + "Rollstuhlfahrer", + "Rollstuhlschieber", + "Rolltreppensteher", + "Romulaner", + "Ronja krieg", + "Roob", + "Rörenmonitorbenutzer", + "Rosenduftgenießer", + "Rosenttenhengst", + "Rosetenausweiter", + "Rosetenschlemmer", + "Rosette", + "Rosettenabschleifer", + "Rosettenbär", + "Rosettenbefruchter", + "Rosettenbeißer", + "Rosettenbesucher", + "Rosettenbügler", + "Rosettenfaltenstraffer", + "Rosettenfetischist", + "Rosettenfick", + "Rosettenfummler", + "Rosettenhaarzwicker", + "Rosettenhammel", + "Rosettenheld", + "Rosettenhengst", + "Rosettenhöhlenforscher", + "Rosetteninfiltrator", + "Rosettenjäger", + "Rosettenkaiser", + "Rosettenkasper", + "Rosettenkauer", + "Rosettenkavalier", + "Rosettenknacker", + "Rosettenknaller", + "Rosettenknecht", + "Rosettenkönig", + "Rosettenkopf", + "Rosettenkranz", + "Rosettenkrümelkokser", + "Rosettenkünstler", + "Rosettenlappen", + "Rosettenlecker", + "Rosettenlutscher", + "Rosettenmaseur", + "Rosettenmeerschweinchen", + "Rosettenmund", + "Rosettenpapst", + "Rosettenrammler", + "Rosettenraupe", + "Rosettenroboter", + "Rosettenrubbler", + "Rosettenschieler", + "Rosettenschlecker", + "Rosettenschlemmer", + "Rosettenschlemmerer", + "Rosettenschwein", + "Rosettenschwengel", + "Rosettenschwund", + "Rosettenspalter", + "Rosettenspreitzer", + "Rosettenspritzer", + "Rosettenstulle", + "Rosettentroll", + "Rosettenveredler", + "Rosettenvergrößerungssaugglocke", + "Rosettenversilberer", + "Rosettenweiter", + "Rosettenzerrer", + "Rosettenzerrung", + "Rossballenklauber", + "Rossettengardist", + "Rossettenhengst", + "Rossettenhobel", + "Rossettenkitzler", + "Rosstäuscher", + "Rostschneckenbesamer", + "Rosty", + "Rotarschparvian", + "Rotarschpavian", + "Rothaarspacko", + "Rotkehlchen", + "Rotlichtbeamter", + "Rotlkohlmasturbator", + "Rotmundschmuckschildkröte", + "Rotweinkotzer", + "Rotz", + "Rotzaffe", + "Rotzbengel", + "Rotzböbbel", + "Rotzer", + "Rotzeschlucker", + "Rotzeschlürfer", + "Rotzfotze", + "Rotzglocke", + "Rotzkanister", + "Rotzkiste", + "Rotzklöte", + "Rotzkoffer", + "Rotzkopf", + "Rotzlöffel", + "Rotznase", + "Rotzrübe", + "Rotzscheißer", + "Rotzschlecker", + "Rotzschlürfer", + "Rotztopf", + "Rotzvotze", + "Rouladenarsch", + "Rübennase", + "Rübensau", + "Rübenschwein", + "Rubensfrau", + "Rübezahl", + "Rückendildo", + "Rückenhaarfetischist", + "Rückenhaarföhner", + "Rückevolutionierer", + "Rückgeldzähler", + "Rucksack", + "Rucksacksepp", + "Rücksitzwichser", + "Rückspiegelpolierer", + "Rückwärtseinparker", + "Rückwärtsesser", + "Rückwärtsfresser", + "Rückwärtsschwimmer", + "Rudelbumser", + "Rudelnutte", + "Rudelpisser", + "Rudelwichser", + "Rudiment", + "Rufnummerunterdrücker", + "Ruhestörer", + "Ruhrpottsau", + "Rülpser", + "Rülpsgesicht", + "Rülpskuckuck", + "Rülpsschlucker", + "Rumfurzer", + "Rumkugler", + "Rummeljule", + "Rummelnutte", + "Rummelpony", + "Rumpelfutz", + "Rumpelkammer", + "Rumpfie", + "Rumtreiber", + "Rundeckenscheißer", + "Rundfotze", + "Rundgelutschter", + "Runterholer", + "Runzelfresse", + "Runzelhure", + "Runzelritze", + "Runzeltitte", + "Rüpel", + "Rüpelpopel", + "Ruppelbumpel", + "Rüscherlbrunzer", + "Rüsselface", + "Rüsselpisser", + "Rüsselschwanz", + "Rüsselwarze", + "Rüttelrostrosette", + "Sabbelbacke", + "Sabberarsch", + "Sabberer", + "Sabberfresse", + "Sabberfurz", + "Sabberknilch", + "Sabberkopf", + "Sabbermaul", + "Sabbersau", + "Säbelzahnwürstchen", + "Saboteur", + "Sachgesicht", + "Sachhaarfresser", + "Sackafter", + "Sackarsch", + "Sackassi", + "Sackbegutachter", + "Sackbumser", + "Säckel", + "Säckelfotze", + "Sackfalte", + "Sackfotze", + "Sackfresse", + "Sackfussel", + "Sackgesicht", + "Sackgrabscher", + "Sackhaar", + "Sackhaaransatzloser", + "Sackhaarepilierer", + "Sackhaarflechter", + "Sackhaarfresse", + "Sackhaarfresser", + "Sackhaarkämmer", + "Sackhaarkiffer", + "Sackhaarlaus", + "Sackhaarlutscher", + "Sackhaarrasierer", + "Sackhaarraucher", + "Sackhaarrupfer", + "Sackhalter", + "Sackhüpfer", + "Sackicht", + "Sackkanister", + "Sackkarren", + "Sackkratzer", + "Sacklaus", + "Sacklausfilzer", + "Sacklecker", + "Sacklutscher", + "Sacknase", + "Sacknasenhaarfresser", + "Sackpfeife", + "Sackrasierer", + "Sackratte", + "Sackrattenarsch", + "Sackrattenzüchter", + "Sackritzenschwitzer", + "Sacksau", + "Sacksaupillemannarsch", + "Sackscheißer", + "Sackschmatzer", + "Sacktreter", + "Sackwalze", + "Sackwasserschlürfer", + "Sackwichser", + "Sackzipfel", + "Sadist", + "Sadofratze", + "Saftarsch", + "Saftarschpresse", + "Saftarschstecher", + "Saftbackenlutscher", + "Saftfurz", + "Saftkeks", + "Saftkissen", + "Saftkopf", + "Säftl", + "Saftpapagai", + "Saftsack", + "Saftsacklutscher", + "Saftschlampe", + "Saftschleuder", + "Saftschubse", + "Saftschupse", + "Saftspritze", + "Safttrinker", + "Saftverkäufer", + "Sagrotanwischer", + "Sahneficker", + "Sahnepinkler", + "Sahneprinz", + "Saisonkennzeichenfahrer", + "Saitenzupfer", + "Salamanderfußnagel", + "Salamificker", + "Salamigurke", + "Salamiinscheibchenschneider", + "Salatgurkenbehälter", + "Salatwachtel", + "Salatwässerer", + "Salbader", + "Salmonelle", + "Salmonellenfresser", + "Salong", + "Salop", + "Salzeule", + "Salzkartoffel", + "Sambaschlampe", + "Samenräuber", + "Samensaufer", + "Samensauger", + "Samenschlucker", + "Samenspender", + "Samenstute", + "Samentoilette", + "Sammelbesteller", + "Samstagmorgenautowäscher", + "Sandalenficker", + "Sandhase", + "Sandkastenbaby", + "Sandkastengangster", + "Sandkastenkacker", + "Sandkastenpisser", + "Sandkastenrocker", + "Sandkuchenfresser", + "Sandmännchengucker", + "Sandpupsschnecke", + "Sanftlauscher", + "Saprophyt", + "Sargpolierer", + "Satan mit einem Horn", + "Satanficker", + "Satanist", + "Satanistenbär", + "Satanistenficker", + "Satansbraten", + "Sau", + "Sau, schwule", + "Sauaas", + "Saubacke", + "Saubangard", + "Saubär", + "Saubärentreiber", + "Saubatzen", + "Saubauer", + "Saubazi", + "Saubeidl", + "Säubelz", + "Saubermann", + "Saubeutel", + "Saubock", + "Saubratzen", + "Saudackel", + "Saudepp", + "Saudreckhure", + "Saueimerauslecker", + "Sauenarschloch", + "Sauerländer", + "Saufbert", + "Saufbruder", + "Säufer", + "Sauficker", + "Saufkopf", + "Saufotze", + "Saufotzensattler", + "Saufsack", + "Saufut", + "Saugbläser", + "Saugesicht", + "Saugglockengeburt", + "Saugnippel", + "Sauhammel", + "Sauhaxn", + "Sauhund", + "Sauhure", + "Saukopf", + "Saukrampen", + "Saulachs", + "Saumaul", + "Saunaaufguss", + "Saunaaufgussverweigerer", + "Saunabauchlieger", + "Saunackl", + "Saunafrühaufsteher", + "Saunahandtuchunterleger", + "Saunakopf", + "Saunalauwarmduscher", + "Saunaobensitzer", + "Saunatrottel", + "Saunauntensitzer", + "Sauneruntensitzer", + "Saupillemannarschloch", + "Saupillermannarschloch", + "Sausack", + "Sauschlampe", + "Sauschlampenbock", + "Sauschwanzfotze", + "Saustallbesen", + "Saustrolch", + "Sautrottel", + "Sauwurf", + "Sauzüchter", + "Scandiskdurchlauflasser", + "Schabe", + "Schabenkind", + "Schäbiger", + "Schabracke", + "Schachbrettumwerfer", + "Schachhooligan", + "Schachtscheißer", + "Schädel", + "Schädelbasisbruchkratzer", + "Schädelprinz", + "Schädling", + "Schaf, schwarzes", + "Schäfchenzähler", + "Schafdarm", + "Schafsäckel", + "Schafsegel", + "Schafsficker", + "Schafskopf", + "Schafwämser", + "Schakal", + "Schalentier", + "Schambeinbruch", + "Schambolzen", + "Schamentblößer", + "Schamhaar", + "Schamhaarabkauer", + "Schamhaaransatzkrauler", + "Schamhaarbürste", + "Schamhaarbürster", + "Schamhaardauerblondierer", + "Schamhaarfetischist", + "Schamhaarflechter", + "Schamhaarförster", + "Schamhaarfresse", + "Schamhaarfresser", + "Schamhaargesicht", + "Schamhaarkämmer", + "Schamhaarkopf", + "Schamhaarlecker", + "Schamhaarlockenkopf", + "Schamhaarlolly", + "Schamhaarpumukel", + "Schamhaarrasierer", + "Schamhaarraucher", + "Schamhaarsammler", + "Schamhaarschimpanse", + "Schamhaarschlecker", + "Schamhaarshampoonierer", + "Schamhaarsucher", + "Schamhaartupierter", + "Schamlaus", + "Schamlippendeospray", + "Schamlippenhaarablutscher", + "Schamlippenkrempelpilz", + "Schamlippenküsser", + "Schamlippenlecker", + "Schamlippenlutscher", + "Schandbuhle", + "Schande", + "Schandfleck", + "Schandgesicht", + "Schandkerl", + "Schandmaul", + "Schanzlecker", + "Scharfrichter", + "Scharlartan", + "Scharlertan", + "Scharnuch", + "Schaskopf", + "Schastrommel", + "Schattenbräuner", + "Schattenduscher", + "Schattenlieger", + "Schattenparker", + "Schaukelpferdjockey", + "Schaukelpferdzüchter", + "Schaumbazen", + "Schaumschläger", + "Schauspieler", + "Scheckbetrüger", + "Scheibenfurz", + "Scheibenwichser", + "Scheibenwischer", + "Scheide", + "Scheidenfresser", + "Scheidenfurz", + "Scheidenkrampf", + "Scheidenkratzer", + "Scheidenlecker", + "Scheidenpfurz", + "Scheidenpilz", + "Scheidenpisser", + "Scheidenriecher", + "Scheidenschlabberer", + "Scheidenschleim", + "Scheidenspüler", + "Scheidentier", + "Scheidenwichser", + "Scheidenwischer", + "Scheinbartrasierer", + "Scheinheiliger", + "Scheipi", + "Scheisligkeit", + "Scheißarsch", + "Scheißbällchen", + "Scheißbatzenfresser", + "Scheißbreze", + "Scheißbürstenficker", + "Scheißdreck", + "Scheiße", + "Scheißeaufschlecker", + "Scheißebader", + "Scheißeballen", + "Scheißebatzen", + "Scheißebürste", + "Scheißeesser", + "Scheißeficker", + "Scheißefresser", + "Scheißefressficker", + "Scheißeguru", + "Scheißehaufen", + "Scheißeklumpen", + "Scheißeknödel", + "Scheißekopf", + "Scheißekotzer", + "Scheißelutscher", + "Scheißenager", + "Scheißer", + "Scheißesager", + "Scheißesau", + "Scheißestück", + "Scheißetüte", + "Scheißewurst", + "Scheißgeburt", + "Scheißgesicht", + "Scheißhahn", + "Scheißhaufen", + "Scheißhaufenficker", + "Scheißhaufenknutscher", + "Scheißhaufenschnüffler", + "Scheißhausfliege", + "Scheißhausfliegenbrut", + "Scheißhausfotze", + "Scheißhausmücke", + "Scheißhausnutte", + "Scheißhausputzer", + "Scheißhausratte", + "Scheißhausschlampe", + "Scheißhausvisagist", + "Scheißhauswandbeschmierer", + "Scheißhuhn", + "Scheißkacker", + "Scheißkerl", + "Scheißkind", + "Scheißklopinsel", + "Scheißkopf", + "Scheißkreatur", + "Scheißloch", + "Scheißmaus", + "Scheißmistgeburt", + "Scheißpilz", + "Scheißriegel", + "Scheißrohrkackalake", + "Scheißverkackter", + "Scheißvieh", + "Scheißvogel", + "Scheißwicher", + "Scheitel", + "Schelm", + "Scherbenfresser", + "Scherenschleifer", + "Scherge", + "Scherzbold", + "Scherzkeks", + "Schesen", + "Scheuerlappen", + "Scheuerrübe", + "Scheusal", + "Scheuslichkeit", + "Schickimicki", + "Schickse", + "Schieber", + "Schiefbrunzer", + "Schiefgeburt", + "Schiefmaul", + "Schielauge", + "Schießbudenfigur", + "Schießhahn", + "Schiffer", + "Schiffschaukelbremser", + "Schiffschaukelschubser", + "Schiffsplankenputzer", + "Schildkröte", + "Schildkrötenstreichler", + "Schilfschneider", + "Schimmeldackel", + "Schimmelei", + "Schimmelfut", + "Schimmelhirnbastard", + "Schimmelköter", + "Schimmelmöse", + "Schimmelpenis", + "Schimmelpimmel", + "Schimmelstreichler", + "Schimmler", + "Schimpanse", + "Schimpansenschänder", + "Schimpfer", + "Schimpflusche", + "Schimpfwortausweicher", + "Schimpfwortdozent", + "Schimpfworterfinder", + "Schimpfwörtergebraucher", + "Schimpfwörterleser", + "Schinder", + "Schindluder", + "Schindmähre", + "Schinkenbauerntrüffel", + "Schinkenscheißer", + "Schinkenschwartenabschneider", + "Schinkenspalter", + "Schinkenspicker", + "Schinkentitte", + "Schirdewahn", + "Schisser", + "Schissgeburt", + "Schisshure", + "Schisskind", + "Schissschüler", + "Schitte", + "Schittie", + "Schlabauka", + "Schlabberbacke", + "Schlabberfotze", + "Schlabberhure", + "Schlabberlatzbenutzer", + "Schlabberlätzchenträger", + "Schlabbermäulchen", + "Schlabbermöse", + "Schlabbermösenficker", + "Schlabberschenkel", + "Schlabberschwanzgurke", + "Schlabschwanz", + "Schlachter", + "Schlächter", + "Schlachtschiff", + "Schlafanzug", + "Schlafanzugträger", + "Schläfer", + "Schlaffi", + "Schlaffschwanz", + "Schlafmütze", + "Schläger", + "Schlaglochausweicher", + "Schlammfotze", + "Schlammfresse", + "Schlammfut", + "Schlammsack", + "Schlammsau", + "Schlammschippenmüsser", + "Schlammspringer", + "Schlampe", + "Schlampenbefruchter", + "Schlampenficker", + "Schlampenfotze", + "Schlampengöre", + "Schlampenheini", + "Schlampenhirn", + "Schlampenhure", + "Schlampenkind", + "Schlampenkuh", + "Schlampensammler", + "Schlampensau", + "Schlampenschiss", + "Schlampenschwein", + "Schlampensohn", + "Schlampentochter", + "Schlampenvieh", + "Schlampenwichser", + "Schlamper", + "Schlamperich", + "Schlampino", + "Schlangenfänger", + "Schlangenkopf", + "Schlangenwespe", + "Schlappi", + "Schlappmaul", + "Schlappnudel", + "Schlapppisser", + "Schlappsack", + "Schlappschwanz", + "Schlappschwanzficker", + "Schlappute", + "Schlauberger", + "Schlaubi", + "Schlauchbootfotze", + "Schlauchbootheizer", + "Schlauchficker", + "Schlauchi", + "Schlauchlippe", + "Schlaukopf", + "Schlaumeier", + "Schlawiener", + "Schlawiner", + "Schlecker", + "Schleicher", + "Schleiereule", + "Schleim", + "Schleimbeutel", + "Schleimbonze", + "Schleimbrocken", + "Schleimer", + "Schleimfotze", + "Schleimfotzenkopf", + "Schleimfotzenlutscher", + "Schleimfotzenmaulgesicht", + "Schleimfresser", + "Schleimhautvorkoster", + "Schleimi", + "Schleimklumpen", + "Schleimknödel", + "Schleimkriecher", + "Schleimpilz", + "Schleimscheißer", + "Schleimschlürfer", + "Schleimspüler", + "Schleimspurwicher", + "Schleimtunte", + "Schlemmerfetischist", + "Schlepper", + "Schlepphoden", + "Schlepphodenslip", + "Schlibradoni", + "Schlickrutscher", + "Schliesmuskelrausoperirer", + "Schließmuskel", + "Schließmuskelbesamer", + "Schließmuskelfanatiker", + "Schließmuskelheld", + "Schlingel", + "Schlitzbrunzen", + "Schlitzdöddel", + "Schlitzer", + "Schlitzohr", + "Schlitzpisser", + "Schlitzrüssler", + "Schlitzwurst", + "Schluchtenscheißer", + "Schluckluder", + "Schluckspecht", + "Schludrian", + "Schluffi", + "Schlumpf", + "Schlumpfarschloch", + "Schlumpfbärenbefruchter", + "Schlumpfbärenficker", + "Schlumpfgeige", + "Schlumpfkopf", + "Schlumpfkotze", + "Schlumpfpenis", + "Schlumpfscheiße", + "Schlumpfwichser", + "Schlüpfer", + "Schlüpferbohrer", + "Schlüpfercowboy", + "Schlüpferpilot", + "Schlüpferschnüffler", + "Schlüpferstürmer", + "Schlupfhoden", + "Schlupp", + "Schlürfhans", + "Schluri", + "Schlüsselbundsucher", + "Schlüsselkind", + "Schlüssellochbefruchter", + "Schlüssellochficker", + "Schlüssellochspritzer", + "Schmachthaken", + "Schmalspurdenker", + "Schmalspurpisser", + "Schmalspurrambo", + "Schmalspurwichser", + "Schmalzbacke", + "Schmalzbrot", + "Schmalzbulemiker", + "Schmalzfliege", + "Schmalzkringel", + "Schmalzlocke", + "Schmalzohrring", + "Schmand", + "Schmandbollen", + "Schmandfratze", + "Schmandkopf", + "Schmandmann", + "Schmandnacken", + "Schmandraucher", + "Schmandtulpe", + "Schmarotzer", + "Schmarrenheimer", + "Schmarrer", + "Schmarrkopf", + "Schmeißfliege", + "Schmicklutscher", + "Schmierefresser", + "Schmierer", + "Schmierfink", + "Schmierfotze", + "Schmierkäse", + "Schmierlappen", + "Schmierpenis", + "Schmierpiss", + "Schmiervogel", + "Schmierwurst", + "Schmiggler", + "Schminktussi", + "Schmobb", + "Schmock", + "Schmodderkopf", + "Schmoddermöse", + "Schmollmops", + "Schmonk", + "Schmuckerl", + "Schmukopf", + "Schmusebärchen", + "Schmutte", + "Schmutz", + "Schmutzbrust", + "Schmutzer", + "Schmutzfink", + "Schmutzfuß", + "Schmutzwurst", + "Schnaakenhals", + "Schnabelfresse", + "Schnabeltasse", + "Schnabeltassentrinker", + "Schnackler", + "Schnakenhals", + "Schnakenhuster", + "Schnakenpopanz", + "Schnalle", + "Schnallentreiber", + "Schnapphahn", + "Schnapsbär", + "Schnapsdrossel", + "Schnapsnase", + "Schnarcher", + "Schnarchfresse", + "Schnarchkopf", + "Schnarchnase", + "Schnarchzapfen", + "Schnarnase", + "Schnattchen", + "Schnaworkel", + "Schneckenfresser", + "Schneckenohr", + "Schneckenschaß", + "Schneckenschiss", + "Schneckenzwerg", + "Schneeballducker", + "Schneebrunzer", + "Schneekettenaufzieher", + "Schneemogul", + "Schneemonster", + "Schneepenis", + "Schneesieber", + "Schnellchecker", + "Schnellkacker", + "Schnellonanierer", + "Schnellspanner", + "Schnellspritzer", + "Schnepfe", + "Schnidellutscher", + "Schniedelschmatzer", + "Schnittlauch", + "Schnitzel", + "Schnitzelesser", + "Schnitzelfanatiker", + "Schnitzelficker", + "Schnitzelfotze", + "Schnitzelgesicht", + "Schnitzelhirn", + "Schnitzelhörnchen", + "Schnitzelklopfer", + "Schnitzelpopel", + "Schnitzeltitte", + "Schnodderfotze", + "Schnoddermann", + "Schnoogie", + "Schnorchdattl", + "Schnorkenschiss", + "Schnorrer", + "Schnösel", + "Schnottenkopf", + "Schnottermann", + "Schnotti", + "Schnuddelkuh", + "Schnudriwutz", + "Schnüffler", + "Schnullerbacke", + "Schnullerficker", + "Schnulli", + "Schnulzenglotzer", + "Schnulzliederhörer", + "Schnumpelkuh", + "Schnurrbartkämmer", + "Schoasgesicht", + "Schoaßwiesn", + "Schockobär", + "Schoggi", + "Schoggikopf", + "Schokobrötchen", + "Schokodiggler", + "Schokofaltenlecker", + "Schokogrotte", + "Schokohure", + "Schokoladencreme", + "Schokolecker", + "Schokopfortenlecker", + "Schokopopper", + "Schokoriegelesser", + "Schokoscheißer", + "Schokostecher", + "Schokosträuselscheißer", + "Schonbezugstreichler", + "Schonerträger", + "Schönheitsrasenmäher", + "Schöni", + "Schönwetterkicker", + "Schönwetterskifahrer", + "Schönwetterzelter", + "Schoof", + "Schöps", + "Schorflecker", + "Schorfschwanz", + "Schorfschwanzlecker", + "Schorscher", + "Schoßhüpfer", + "Schotterschüssel", + "Schpackschraube", + "Schrabnelle", + "Schrankficker", + "Schrankfurzer", + "Schrankwandbesitzer", + "Schranzfratz", + "Schraptorenschlampe", + "Schraubdeckelweintrinker", + "Schrebergärtner", + "Schreckgespenst", + "Schreckschraube", + "Schreibtischaufräumer", + "Schreibtischhengst", + "Schreibtischwichser", + "Schreihals", + "Schrempfkopf", + "Schrittschampoonierer", + "Schrittschwitzer", + "Schrittstinker", + "Schrödel", + "Schroffenstein", + "Schrott", + "Schrottarsch", + "Schrottfotze", + "Schrottkind", + "Schrottplatzfresse", + "Schrubber", + "Schrulle", + "Schrumpelarschgesicht", + "Schrumpelfotze", + "Schrumpelpimmel", + "Schrumpfgermane", + "Schrumpfgespenst", + "Schrumpfhirn", + "Schrumpfklöte", + "Schrumpfkopf", + "Schrumpfkopfamöbe", + "Schrumpfschlauch", + "Schrumpfschwanz", + "Schrumphirn", + "Schubbe", + "Schubiak", + "Schubraupe", + "Schuchtelei", + "Schuft", + "Schuhauszieher", + "Schuhbekleckerer", + "Schuhkopf", + "Schuhlöffelbenutzer", + "Schuhsohlenankleber", + "Schuhwichser", + "Schuhzubinder", + "Schülerknutscher", + "Schulhure", + "Schullattentrager", + "Schulnutte", + "Schulschlampe", + "Schulterblicker", + "Schulterblickmacher", + "Schultütendieb", + "Schumpe", + "Schupfabrunzer", + "Schupfenscheißer", + "Schuppenharzer", + "Schuppenscheißkopf", + "Schuputzer", + "Schurke", + "Schürzenjäger", + "Schussel", + "Schüssel", + "Schusterjunge", + "Schüttler", + "Schutzblechmountainbiker", + "Schutzbrillenschweißer", + "Schützengrabenducker", + "Schutzimpfer", + "Schwabbelbacke", + "Schwabbelbackenficker", + "Schwabbelbauch", + "Schwabbeler", + "Schwabbelhure", + "Schwabbelklo", + "Schwabbelmuschi", + "Schwabbelnugget", + "Schwabbelpanzer", + "Schwabbelpastete", + "Schwabbelpo", + "Schwabbelsau", + "Schwabbeltitte", + "Schwabbelviech", + "Schwachamputierter", + "Schwachkopf", + "Schwächling", + "Schwachmat", + "Schwachmatentrainer", + "Schwachsalzer", + "Schwachsau", + "Schwachsinniger", + "Schwachstecher", + "Schwachstrahlpisser", + "Schwachstrahlstruller", + "Schwachstromelektriker", + "Schwachstromelektroleitungsverleger", + "Schwachstromfunker", + "Schwachstruller", + "Schwalbe", + "Schwamm", + "Schwammauslutscher", + "Schwammerlzüchter", + "Schwammkopf", + "Schwanz", + "Schwanz, rostiger", + "Schwanzaal", + "Schwanzabbeißer", + "Schwanzaffe", + "Schwanzanbeter", + "Schwanzarsch", + "Schwanzauge", + "Schwanzbäckchen", + "Schwanzbacke", + "Schwanzbammel", + "Schwanzbesteiger", + "Schwanzbombe", + "Schwanzbrezelwichser", + "Schwanzbubu", + "Schwanzdrache", + "Schwanzduscher", + "Schwanzfeuchter", + "Schwanzfotze", + "Schwanzfrau", + "Schwanzfresse", + "Schwanzfresser", + "Schwanzfrikadelle", + "Schwanzfrosch", + "Schwanzfummler", + "Schwanzgeburt", + "Schwanzgeige", + "Schwanzgeigenpfotze", + "Schwanzgepiercter", + "Schwanzgesicht", + "Schwanzgrapscher", + "Schwanzgurke", + "Schwanzhaar", + "Schwanzhaarraucher", + "Schwanzhirn", + "Schwanzhund", + "Schwanzhure", + "Schwanzhurenficker", + "Schwanzkacker", + "Schwanzkakalake", + "Schwanzkamerad", + "Schwanzkäse", + "Schwanzkäseabraspler", + "Schwanzkäseesser", + "Schwanzklötenficker", + "Schwanzkolben", + "Schwanzkopf", + "Schwanzkopfbeißer", + "Schwanzkopfgesicht", + "Schwanzkrapscher", + "Schwanzkuh", + "Schwanzlecker", + "Schwanzlippe", + "Schwanzlochlutscher", + "Schwanzloser", + "Schwanzlurch", + "Schwanzlutscher", + "Schwanzmaul", + "Schwanzmaus", + "Schwanznase", + "Schwanznutte", + "Schwanznuttenlecker", + "Schwanzpilotenwixer", + "Schwanzpolierer", + "Schwanzpresse", + "Schwanzprolet", + "Schwanzprotese", + "Schwanzraspel", + "Schwanzratte", + "Schwanzrubbler", + "Schwanzsack", + "Schwanzschwadron", + "Schwanzspieler", + "Schwanzumformer", + "Schwanzvermöbler", + "Schwanzvortäuscher", + "Schwanzwedler", + "Schwanzwichser", + "Schwanzzange", + "Schwartenwilli", + "Schwarzfahrer", + "Schwarzweißkopierer", + "Schwätzer", + "Schwefelkuh", + "Schwein mit Grunzfehler", + "Schwein, armes", + "Schweinchenwurst", + "Schweinealabast", + "Schweinearsch", + "Schweinearschlecker", + "Schweinebacke", + "Schweinebackengesicht", + "Schweinebastard", + "Schweinebauer", + "Schweinebesamer", + "Schweinebraten", + "Schweinebrot", + "Schweinebuckel", + "Schweinefick", + "Schweineficker", + "Schweineflachleger", + "Schweinefleischesser", + "Schweinefotze", + "Schweinefresse", + "Schweinefurz", + "Schweinefurzer", + "Schweinegemächt", + "Schweinegenitalküsser", + "Schweinegesicht", + "Schweinehaxe", + "Schweinehirt", + "Schweinehund", + "Schweinehüter", + "Schweinekottlet auf zwei Beinen", + "Schweinemonk", + "Schweinenase", + "Schweinepimmel", + "Schweinepriester", + "Schweinereiter", + "Schweineschänder", + "Schweineschwanz", + "Schweineschwanzlutscher", + "Schweineschwengel", + "Schweinesohn", + "Schweinewelpenficker", + "Schweinigel", + "Schweinosaurus", + "Schweinsarschficker", + "Schweinsbauch", + "Schweinsblase", + "Schweinskopf", + "Schweinskopfsülze", + "Schweinsohrlecker", + "Schweinswürstlschmeisser", + "Schweißarsch", + "Schweißbub", + "Schweißbüffel", + "Schweißfuß", + "Schweißgrinde", + "Schweißgurgler", + "Schweißherz", + "Schweißlecker", + "Schweißlöffler", + "Schweißnapflecker", + "Schweißpudel", + "Schweißtier", + "Schweißtropfen", + "Schwelli", + "Schwellkörper", + "Schwellkörperpiercer", + "Schwengel", + "Schwengelbrecher", + "Schwengellutscher", + "Schwengelnase", + "Schwert in der Scheide", + "Schwertschlucker", + "Schwerverbrecher", + "Schwesterküsser", + "Schwiegermuttersöhnchen", + "Schwimmbadpinkler", + "Schwimmbadpisser", + "Schwimmbeckenscheißer", + "Schwimmkursteilnehmer", + "Schwindler", + "Schwindlicher", + "Schwippenkaiser", + "Schwitzficker", + "Schwitzhüttenbelüfter", + "Schwitzscheißer", + "Schwitztitte", + "Schwölle", + "Schwuchtel", + "Schwuchtelficker", + "Schwuchtelgladiator", + "Schwuchtelspinner", + "Schwuchtibert", + "Schwuffi", + "Schwulette", + "Schwulettenpudel", + "Schwuli", + "Schwulschwanz", + "Schwutte", + "Scriptgamer", + "Sechserschüler", + "Seeanemone", + "Seegurke", + "Seekrankwerder", + "Seelenfänger", + "Seemannsbraut", + "Seepferdchenbumser", + "Seerosengießer", + "Segelmann", + "Seidekopf", + "Seierer", + "Seifeaufheber", + "Seifenblase", + "Seifenblasenpupser", + "Seifenbücker", + "Seifenschnute", + "Seifensieder", + "Seilbahnfahrer", + "Seilbergsteiger", + "Seismographensohn", + "Seitenwichser", + "Sekierer", + "Selbstabholer", + "Selbstbeflecker", + "Selbstbefruchter", + "Selbstblaser", + "Selbsterklärungsabgeber", + "Selbstfister", + "Selbsthandbefummler", + "Selbstklebebriefmarkenkäufer", + "Selbstlutscher", + "Selbstmörder", + "Selbstmordmotiv", + "Selbstschwanzbläser", + "Semesteranfangslerner", + "Semmel", + "Semmelfurzer", + "Semmelgeist", + "Semmelgesicht", + "Sempel", + "Senfbacke", + "Senfglas", + "Senfglasficker", + "Senfgurke", + "Senfgurkenzuckerer", + "Senfkorn", + "Senfritzer", + "Senftkopf", + "Seniorenbumser", + "Seniorenhure", + "Sensorenparker", + "Servierschlitten", + "Serviettenbenutzer", + "Servolenker", + "Sesamstraßenknecht", + "Sesselbumser", + "Sesselficker", + "Sesselfurzer", + "Sesselpupser", + "Sesselschläfer", + "Sesterz, falscher", + "Seucheherd", + "Seuchenschleuder", + "Seuchenvogel", + "Seuchenwanne", + "Seuchpimmel", + "Sexarsch", + "Sexbirne", + "Sexficker", + "Sexfotze", + "Sexgeiler", + "Sexist", + "Sexjubel", + "Sexpott", + "Sexprotz", + "Sexschlampe", + "Sexschwuchtel", + "Sexsklave", + "Sexsüchtiger", + "Sexterminator", + "Sextourist", + "Sexualpädagoge", + "Shanghai", + "Sicherheitsklingenrasierer", + "Sicherheitskopienersteller", + "Sicherheitsschuhträger", + "Sicherheitssteckdosenbenutzer", + "Sicherungsabsteller", + "Sicherungsbenutzer", + "Sicherungsdiskettenzieher", + "Siebenschläfer", + "Siech", + "Siffbock", + "Siffknochen", + "Siffkopp", + "Siffmöse", + "Siffprinz", + "Siggibienchen", + "Signalzahnbürste", + "Silberbesteckputzer", + "Sillikonschlampe", + "Sillkopf", + "Simpel", + "Simulant", + "Sittenpisser", + "Sittensau", + "Sittenstrolch", + "Sitzbrunzer", + "Sitzenpinkler", + "Sitzfasching", + "Sitzheizungsfahrer", + "Sitzkissenbepisser", + "Sitzpinkler", + "Sitzpisser", + "Sitzplatzanweiser", + "Sitzplatzerkämpfer", + "Six-Pack", + "Skarabäus", + "Skeletor", + "Skelett", + "Skiliftplanbenutzer", + "Skipassverlierer", + "Skischuhheizer", + "Skistiefelheckeinsteiger", + "Skistiefelvorwärmer", + "Skiunterwäscheträger", + "Sklave", + "Sklavenficker", + "Sklavenhalter", + "Sklavenhändler", + "Sklavenhure", + "Sklavennutte", + "Sklavenschlampe", + "Sklaventreiber", + "Skontoausnutzer", + "Slipeinlagenträger", + "Slipkot", + "Smegmalecker", + "Smegmalutscher", + "Smegmamon", + "Snickersjunkie", + "Soachbridschn", + "Soacher", + "Soachkachel", + "Socke voll Popcorn", + "Sockenbügler", + "Sockenfalter", + "Sockenfresser", + "Sockenhochzieher", + "Sockenpopper", + "Sockenschläfer", + "Sockenschnüffler", + "Sockensortierer", + "Sockenstopfer", + "Sodafotzenlecker", + "Sodomiefetischist", + "Sodomit", + "Sofahocker", + "Sofapfurzer", + "Softballspieler", + "Softeislutscher", + "Softy", + "Solarzellenwärter", + "Sonderangebotshure", + "Sonderangebotsnutte", + "Sondermüll", + "Sonderschiss", + "Sonderwunschbesteller", + "Sonnenfinsternisangsthaber", + "Sonntagsfahrer", + "Soßenkopf", + "Sozialpädagoge", + "Sozialparasit", + "Sozialschmarotzer", + "Sozialschnorrer", + "Sozialversicherungsmüll", + "Spachtel", + "Spack", + "Spackbeutel", + "Spackbreze", + "Spacken", + "Spackenkeks", + "Spacker", + "Spacko", + "Spackomat", + "Spack-o-mat", + "Spackonaut", + "Spacktasche", + "Spageltarzan", + "Spagettifresse", + "Spagettikleinschneider", + "Spaghettiheld", + "Spaisd", + "Spaken", + "Spakenkind", + "Spakspaten", + "Spaltenjäger", + "Spaltenschmatz", + "Spaltenspritzer", + "Spamfilterbenutzer", + "Spammer", + "Spanferkel", + "Spanner", + "Spanplatte", + "Spardose", + "Spardosenwichser", + "Spargeltarzan", + "Spargeltarzanverschnitt", + "Sparkassengesicht", + "Sparpackung", + "Sparten", + "Spartenjunge", + "Sparwichser", + "Spaßbacke", + "Spaßbremse", + "Spassbremse", + "Spasselakke", + "Spaßmacke", + "Spaßstaubsauger", + "Spasst", + "Spaßte", + "Spaßvogel", + "Spast", + "Spastenkönig", + "Spastenkopf", + "Spasti", + "Spastiasti", + "Spastificker", + "Spastiker", + "Spastischeraffe", + "Spastivergewaltiger", + "Spastomat", + "Spaten", + "Spatenkind", + "Spätkommer", + "Spätspritzer", + "Spatzen", + "Spatzenhirn", + "Spatzlecker", + "Spaziergänger", + "Speckarsch", + "Speckbaron", + "Speckbirne", + "Speckbuckel", + "Specki", + "Speckmade", + "Specknacken", + "Specko", + "Specktrommel", + "Speckwanne", + "Speckwürstchen", + "Speedschisser", + "Speibschwanz", + "Speicheldusche", + "Speichellecker", + "Speiseeisanwärmer", + "Spektralspreizer", + "Spekulant", + "Spermaabhängiger", + "Spermablocker", + "Spermabumser", + "Spermacontainer", + "Spermaentsorgungsstelle", + "Spermafresser", + "Spermagarage", + "Spermagesicht", + "Spermagurgler", + "Spermakarnickel", + "Spermakleber", + "Spermakontainer", + "Spermalager", + "Spermalecker", + "Spermaloch", + "Spermalutscher", + "Spermanutte", + "Spermarutsche", + "Spermasammler", + "Spermasaufer", + "Spermasäufer", + "Spermaschlange", + "Spermaschleuder", + "Spermaschleuderer", + "Spermaschlucker", + "Spermasilo", + "Spermaspritzer", + "Spermaspucke", + "Spermasurfer", + "Spermatologe", + "Spermaverdrecker", + "Spermavulkan", + "Spermazuhälter", + "Spiderschwein", + "Spiegeleiwender", + "Spiegelföhner", + "Spiegelüberbetthänger", + "Spielplatzscheißer", + "Spielverderber", + "Spielzeug", + "Spießbürger", + "Spießer", + "Spießgeselle", + "Spinatfresser", + "Spinatmütze", + "Spinatwachtel", + "Spinatwuchtel", + "Spindluder", + "Spinnenängstler", + "Spinnenficker", + "Spinner", + "Spitzbube", + "Spitzel", + "Spitzrücken", + "Splatterfresse", + "Splitter", + "Spongo", + "Sportbeutelvergesser", + "Sportlehrer", + "Sportwagenfahrer", + "Sportwagenverkäufer", + "Sposen", + "Spratzi", + "Spreize", + "Sprengschiss", + "Springbrunnenpinkler", + "Spritzdose", + "Spritzer", + "Spritzgacke", + "Spritzgackgurgler", + "Spritzgebäck", + "Spritzgeburt", + "Spritzgesicht", + "Spritzkuchen", + "Spritzmolch", + "Spritzpups", + "Spritzvieh", + "Sprüchemacher", + "Sprühfresse", + "Sprühkot", + "Sprühwurst", + "Sprühwurstesser", + "Sprühwurstverdränger", + "Spuckeproduzierer", + "Spucker", + "Spucklecker", + "Spucknapf", + "Spuckspasti", + "Spüllappensuckler", + "Spülmaschineneinräumer", + "Spunk", + "Spurwechselblinker", + "Sputtelkopf", + "Staatsmatratze", + "Staatsverbrecher", + "Stachelsau", + "Stachelschwein", + "Stadtkind", + "Stadtloch", + "Stadtmatratze", + "Stadtplanbenutzer", + "Stadtplankäufer", + "Stadtplanumdreher", + "Stadtstricher", + "Stadtstricherlehrling", + "Stahlfresse", + "Stammtischhocker", + "Stammtischmitglied", + "Stammtischphilosoph", + "Stampfnase", + "Standgebläse", + "Standheizer", + "Standlichtparker", + "Standscheißer", + "Stangenbohnenbumser", + "Stänker", + "Stänkerer", + "Starkstromspritzer", + "Starkstromwichser", + "Staubfänger", + "Staubgeschwür", + "Staubkopf", + "Staubsauger", + "Staubsaugerpilot", + "Staubsaugerpolierer", + "Staudenbrunzer", + "Staumelder", + "Stauumfahrer", + "Steakdurchbrater", + "Stecher", + "Stechzebra", + "Steckdoennase", + "Steckdosenbefriediger", + "Steckdosenbefruchter", + "Steckdosenbumser", + "Steckdosenbumsfehler", + "Steckdosenface", + "Steckdosenficker", + "Steckdosenlutscher", + "Steckdosennase", + "Steckdosennutte", + "Steckdosenschwanz", + "Steckdosenvergewaltiger", + "Steckdosenwichser", + "Stecken", + "Steckerwackler", + "Stecknadelkopf", + "Steckrübe", + "Stecksau", + "Stehaufmännchen", + "Stehbrunzer", + "Stehlampe", + "Stehlampenfesthalter", + "Stehparty", + "Stehpinkler", + "Stehpisser", + "Stehscheißer", + "Steinbeißer", + "Steinschlag", + "Steinzeitmensch", + "Steinzeitpisser", + "Steißgeburt", + "Stelzbock", + "Stelzenbefruchter", + "Stenz", + "Steppensau", + "Sternwarzenpickel", + "Stiefelbumser", + "Stiefelhure", + "Stiefellecker", + "Stiefelpisser", + "Stiefelwichser", + "Stiellutscher", + "Stierficker", + "Stierhammel", + "Stiernacken", + "Stierschwanzgrapscher", + "Stifteinschieber", + "Stimmbrüchiger", + "Stinkaffe", + "Stinkbatzen", + "Stinkbock", + "Stinkbolzen", + "Stinkebär", + "Stinkefinger", + "Stinkefisch", + "Stinkefurz", + "Stinkeglatze", + "Stinkekind", + "Stinkelümmel", + "Stinkepopo", + "Stinkepup", + "Stinkepups", + "Stinker", + "Stinkewarze", + "Stinkewurst", + "Stinkfisch", + "Stinkfotze", + "Stinkfotzenbumser", + "Stinkfotzenliebhaber", + "Stinkfut", + "Stinkgeschwader", + "Stinkkanone", + "Stinkloch", + "Stinkmolch", + "Stinkmorchel", + "Stinkmöse", + "Stinkmösenpolka", + "Stinkmulch", + "Stinksack", + "Stinksau", + "Stinkschlitz", + "Stinkschlüpfer", + "Stinksocke", + "Stinkstiefel", + "Stinktier", + "Stinkvieh", + "Stinkvogel", + "Stinkvotzenentsafter", + "Stirnknifte", + "Stockficker", + "Stockfisch", + "Stockpenislolly", + "Stoffel", + "Stoffhosenträger", + "Stofftierfetischist", + "Stofftiersammler", + "Stofftiersüßfinder", + "Stoffwechselendprodukt", + "Stoffwechselendproduktausscheidungsorgan", + "Stokel", + "Stöpselprinz", + "Storchennestbesetzer", + "Störenfried", + "Sträfling", + "Stranddieb", + "Strandhure", + "Strandnutte", + "Strandscheißer", + "Strapsenkönig", + "Strapsenlutscher", + "Straßenficker", + "Straßenhure", + "Straßenkind", + "Straßenmädchen", + "Straßennutte", + "Straßenpenner", + "Straßenräuber", + "Straßenstricher", + "Stratosphärenkellner", + "Strauchdieb", + "Sträuselkuchen", + "Streber", + "Streberschlumpf", + "Streichwurstesser", + "Streithammel", + "Streithansel", + "Streuner", + "Streuselkuchen", + "Streuselkuchenfresse", + "Stricher", + "Stricheranwerber", + "Strichjunge", + "Strichkind", + "Strichmädchen", + "Strichnutte", + "Strickjackenfetischist", + "Strickkurslehrer", + "Strickpulloverträger", + "Stripper", + "Strippertunte", + "Strohhalm", + "Strohhalmfresser", + "Strohhalmtrinker", + "Strohkopf", + "Strohsternbastler", + "Strolch", + "Stromzaunpinkler", + "Strongo", + "Struller", + "Strumpfhosenträger", + "Strumpfstopfer", + "Strunshoden", + "Strunz", + "Strunzfuß", + "Struppi", + "Struwwelpeter", + "Stubenhocker", + "Stück Dreck", + "Stück Fleisch", + "Stück Scheiße", + "Stück Scheisse", + "Studentenwitzlacher", + "Stuffel", + "Stuhlbeinbumser", + "Stuhlgangansauger", + "Stuhlgangbetrachter", + "Stuhlgänger", + "Stuhlpfurzer", + "Stuhlranschieber", + "Stulhgangesser", + "Stummelbumser", + "Stummelhase", + "Stümper", + "Sturer", + "Sturkopf", + "Sturzgeburt", + "Stützradfahrer", + "Stützstrumpf", + "Substratleicher", + "Suchmaschinennutzer", + "Sucker", + "Südhangskifahrer", + "Suffbruder", + "Suffkopf", + "Sülzer", + "Sülzkopf", + "Sumfgurke", + "Sumpfdackel", + "Sumpfgnom", + "Sumpfhuhn", + "Sumpfjunkie", + "Sumpfkuh", + "Sumpfmonster", + "Sumpfnatter", + "Sumpfnudel", + "Sumpfralle", + "Sumpfrattenwurm", + "Sumpfschnepfe", + "Sumpfschnepfenvögler", + "Sumpfschrat", + "Sumpfschwein", + "Sündenbock", + "Sünder", + "Supentrulli", + "Superblödi", + "Superficker", + "Superfotze", + "Superglupfer", + "Superhure", + "Superlusche", + "Supersau", + "Superschwein", + "Superstarsucher", + "Suppenhuhn", + "Suppenkaltpuster", + "Suppenkasper", + "Suppenkopf", + "Suppenkröte", + "Suppentrulli", + "Sushimuschi", + "Süßfrühstücker", + "Süßwassersegler", + "Süßweintrinker", + "Swinger", + "Sylvesterverschlafer", + "Synonymausdenker", + "Synonymeingeber", + "Synonymsucher", + "Systemfehler", + "Tablettenlutscher", + "Tachogucker", + "Tagedieb", + "Tagversauer", + "Takostecher", + "Talkshowbratze", + "Talkshowkandidat", + "Talkshowseher", + "Tampon", + "Tamponaussauger", + "Tamponesser", + "Tamponlutscher", + "Tamponmilchshake", + "Tamponwichser", + "Tamponwiederverwender", + "Tangaschnüffler", + "Tangatussi", + "Tankarsch", + "Tankdeckelabschließer", + "Tanklastwagenausbremser", + "Tankstellenkondom", + "Tannenbestäuber", + "Tanzlehrer", + "Tanzschulkursleiter", + "Tanzschulkursteilnehmer", + "Tanzwurst", + "Tarzanficker", + "Taschendieb", + "Taschenkammträger", + "Taschenmuschi", + "Taschenrechnerbenutzer", + "Taschenschlampe", + "Taschenspieler", + "Taschentuchbefruchter", + "Taschentuchbügler", + "Taschentuchspritzer", + "Tastaturabdecker", + "Tastaturenputzer", + "Tattergreis", + "Tatzelwurm", + "Taugenichts", + "Teddybärbumser", + "Teddybärknuddler", + "Teddybärkuschler", + "Teddyficker", + "Teddysau", + "Teddystecher", + "Teebeutelabwieger", + "Teebeutelabzähler", + "Teebeutelkiffer", + "Teebeutelmehrfachbenutzer", + "Teebeutelschwenker", + "Teebeutelweitwerfer", + "Teeblütensammler", + "Teerschlecker", + "Teerstraßenbenutzer", + "Teetrinker", + "Teewurst", + "Teflongesicht", + "Teichpirat", + "Teigäffchen", + "Teilzeitstricher", + "Telebanker", + "Telefonbefruchter", + "Telefonbuchgucker", + "Telefongesicht", + "Telefonkabellutscher", + "Telefonkostenkontrollierer", + "Telefonphobiker", + "Telefonschweiger", + "Telefonsexsüchtiger", + "Telefonwichser", + "Telefonzellenbenutzer", + "Teletubby", + "Teletubbygucker", + "Teletubbywegschalter", + "Teletubbyzuerstwinker", + "Teletubbyzurückwinker", + "Teletubyzurückwinker", + "Tellerliftbenutzer", + "Telofon", + "Tempelhure", + "Tempelnutte", + "Tempelschlampe", + "Tempeltänzer", + "Tennissockenträger", + "Teppichficker", + "Teppichfransenkämmer", + "Teppichfurz", + "Teppichkantenputzer", + "Teppichluder", + "Teppichnutte", + "Teppichspucker", + "Teufel", + "Teufelsbraten", + "Teufelsdreck", + "Teufelsfrucht", + "Teufelsgeburt", + "Textmarkerbenutzer", + "Thaumaturg", + "Thekenschlampe", + "Thermalbader", + "Thermoskannenbenutzer", + "Thermoskannenbesitzer", + "Thunfischfresse", + "Tiefflieger, geistiger", + "Tiefschutzträger", + "Tieftoilettentaucher", + "Tier, niederes", + "Tierbeglücker", + "Tierficker", + "Tierpornoproduzent", + "Tierquäler", + "Tierschänder", + "Tierstimmenlauscher", + "Tiervergewaltiger", + "Tigerpenis", + "Tigerpenislutcher", + "Tinitusse", + "Tintenkillerbenutzer", + "Tintenpisser", + "Tischgesicht", + "Tischreservierer", + "Tittchen", + "Titte", + "Tittenablecker", + "Tittenarsch", + "Tittenbefriediger", + "Tittenbeißer", + "Tittendachs", + "Tittendanebenwichser", + "Tittenfick", + "Tittenficker", + "Tittenfisch", + "Tittenforscher", + "Tittenfotze", + "Tittenfresser", + "Tittenfrosch", + "Tittenfrucht", + "Tittenfurz", + "Tittengesicht", + "Tittengrabscher", + "Tittengrapscher", + "Tittenhurenschwanzkopf", + "Tittenklaus", + "Tittenklemmpenis", + "Tittenkopf", + "Tittenlecker", + "Tittenlurch", + "Tittenlutscher", + "Tittenmann", + "Tittenmilchkakaotrinker", + "Tittenmonster", + "Tittennuckler", + "Tittenpatscher", + "Tittenquaste", + "Tittensaugerbenutzer", + "Tittenschaber", + "Tittenschlecker", + "Tittenschluckbitch", + "Tittenschweller", + "Tittentante", + "Tittentier", + "Tittentorso", + "Tittentroll", + "Tittentunte", + "Tittenumherwackeler", + "Tittenverteidiger", + "Tittenwichser", + "Tittenwurm", + "Tittophiler", + "Toastbrotbefruchter", + "Tod auf Urlaub", + "Todeshirsch der Finsternis", + "Todesschnitzel", + "To-Do-Listenschreiber", + "Toilettenabflussbefruchter", + "Toilettenablutscher", + "Toilettenabschmecker", + "Toilettenbefruchter", + "Toilettenbumser", + "Toilettenbürstenfickersatz", + "Toilettenfensteröffner", + "Toilettenfotze", + "Toilettengeburt", + "Toilettenkabinenbenutzer", + "Toilettenkiffer", + "Toilettenknecht", + "Toilettenlecker", + "Toilettenmüllablecker", + "Toilettenpapieranfeuchter", + "Toilettenpapierbenutzer", + "Toilettenrohrputzer", + "Toilettensaubermacher", + "Toilettensäufer", + "Toilettenspüler", + "Toilettensteinlutscher", + "Toilettentaucher", + "Toilettentiefseetaucher", + "Toilettentieftaucher", + "Toilettentieftaucher mit Arschbeleuchtung", + "Toilettenvergewaltiger", + "Toilettenwichser", + "Toilletenklauer", + "Toilletenrandficker", + "Toillettentieftaucher", + "Tölenbumser", + "Tollpatsch", + "Tölpel", + "Tomatenfritz", + "Tomatengesicht", + "Tomatenkind", + "Tonnentaucher", + "Topfgucker", + "Topflappenbenutzer", + "Topsau", + "Torfhirn", + "Torfkopf", + "Torfnase", + "Törtchen", + "Tortenarsch", + "Tortenbaby", + "Tortenboxer", + "Torzuzieher", + "Totalausfall", + "Totalspinner", + "Totenbescheißer", + "Totenficker", + "Totenkopfpenis", + "Totenkopftyp", + "Totenschänder", + "Totenwagensbremser", + "Totgeburt", + "Totgeburtenvergewaltiger", + "Totschwätzer", + "Tragetaschenbenutzer", + "Traktorfahrer", + "Trampel", + "Trampeltier", + "Trankonditor", + "Transe", + "Transenficker", + "Transenkopf", + "Transfunsel", + "Transuse", + "Trantüte", + "Tratschmaul", + "Tratschtante", + "Trauerkloß", + "Trauma", + "Träumer", + "Traumhochzeitmitheuler", + "Traumtänzer", + "Treckergesicht", + "Treppendepp", + "Treppenhausgesindel", + "Treppenhausputzer", + "Tretbooteinparker", + "Tretbootfahrer", + "Trethuhn", + "Tretmiene", + "Tretmienenfresser", + "Tretomobilwanze", + "Treuepunktesammler", + "Triefauge", + "Triefel", + "Triefsau", + "Triefschleimlehrerin", + "Triele", + "Trietschler", + "Trinker", + "Trinkerlein", + "Trinkgeldgeber", + "Trinkhallenphilosoph", + "Tripperclown", + "Tripperkönig", + "Trippertonne", + "Trittbrettfahrer", + "Troch", + "Trockenduscher", + "Trockenfotze", + "Trockenhaarspraybenutzer", + "Trockenpupser", + "Trockenrasierer", + "Trockenrasierschneider", + "Trockensurfer", + "Trockentussi", + "Trödelschaß", + "Trödler", + "Trödlerwilli", + "Trollaffe", + "Trolldepp", + "Trollhund", + "Trollo", + "Trollrotz", + "Trommelarsch", + "Trommelhorst", + "Trompetenarsch", + "Trop", + "Tropenfotze", + "Tropfenklöte", + "Tropfer", + "Trottel", + "Trottelarsch", + "Trottelkopf", + "Trottellumme", + "Trotzkopf", + "Trü", + "Trübsalbläser", + "Trüffelhirn", + "Trüffellecker", + "Trüffelmüffel", + "Trüffelschwein", + "Trümmer", + "Trümmergesicht", + "Trümmerschlampe", + "Truppenübungsplatz", + "Truthahn", + "Truthänchenficker", + "Tschernobylkind", + "Tschernokid", + "Tschuschensau", + "Tschutsch", + "Tucke", + "Tuller", + "Tulpenknicker", + "Tumorbrust", + "Tumorfotze", + "Tumorkopf", + "Tumorverursacher", + "Tümpelkröte", + "Tunichtgut", + "Tunte", + "Tuntenbefruchter", + "Tuntenfisch", + "Tuntengeburt", + "Tuntenschnalle", + "Tüpfelhyäne", + "Tupperpartygastgeber", + "Tupperwarenkäufer", + "Türabschließer", + "Türaufhalter", + "Turbotitte", + "Türgriffbenutzer", + "Türklinkenanwärmer", + "Türklinkenficker", + "Turnbeutellutscher", + "Turnbeutelvergesser", + "Turnbeutelverlierer", + "Turnhallenliebhaber", + "Turnhosenbügler", + "Turnsackerlvergesser", + "Turnschuh", + "Türöffner", + "Türzumacher", + "Tusse", + "Tussi", + "Tussifant", + "Tütenclown", + "Tütenweintrinker", + "Tütü", + "Tyrann", + "U-Boot, geistiges", + "Uferschnepfe", + "Uhrenglotzer", + "Uhrzeitumsteller", + "Uixbeutel", + "Ultrakippenraucher", + "Ultraschlampe", + "Ultraschwein", + "Umleitungsbenutzer", + "Umleitungsschilderfolger", + "Umpelkante", + "Umstandskrämer", + "Umweltverschmutzer", + "Umweltverschmutzung, optische", + "Umzugskartonbeschrifter", + "Undankbarmensch", + "Unfall", + "Unfallopfer", + "Unflat", + "Ungeheuer", + "Ungetüm", + "Ungeziefer", + "Ungustl", + "Unhold", + "Uniformfetischist", + "Universalfickschnitzel", + "Universumanschauer", + "Unkörper", + "Unkrautfresser", + "Unkrautzupfer", + "Unmann", + "Unmensch", + "Unpaarhufer", + "Unrat", + "Unrumpf", + "Unsympath", + "Untenlieger", + "Unterarsch", + "Unterhemdträger", + "Unterhose", + "Unterhosenbügler", + "Unterhosenpsychopath", + "Unterhosenreiniger", + "Unterhosenriecher", + "Unterhosenvollscheißer", + "Unterhosenwichtel", + "Unterhosenzusammenleger", + "Unterhund", + "Unterlagenzelter", + "Unterleibsdonut", + "Unterleibsgesicht", + "Unterleibskuchen", + "Untermensch", + "Unterseeboot, geistiges", + "Untertan", + "Untertier", + "Unterwäschebügler", + "Untoter", + "Unwucht", + "Unzüchtling", + "Urinalbeckenbegatter", + "Urinalfotzenschleimlecker", + "Urinalkatheter", + "Urinalwärter", + "Urinanbeter", + "Urinbatzen", + "Urinboje", + "Urinflöte", + "Uringesicht", + "Urinkellner", + "Urinnascher", + "Urinpflanze", + "Urinschlirfer", + "Urinschlucker", + "Urinschlürfer", + "Urinschnüffler", + "Urinschwuchtel", + "Urinsteinlutscher", + "Urinteddy", + "Urintrinker", + "Urlaubskartenschreiber", + "Urlaubsortwiederholer", + "Urlaubsplaner", + "Urlaubsvideosgucker", + "Urmensch", + "Urmundtier", + "Urscheiße", + "Urschleim", + "Urvieh", + "Vacuumvisage", + "Vaginakitzler", + "Vaginakröte", + "Vaginalchirug", + "Vaginalecker", + "Vaginalfriseuse", + "Vaginalkartoffel", + "Vaginalmassaker", + "Vaginalmilch", + "Vaginalöffnung", + "Vaginalpornoemanze", + "Vaginalrutsche", + "Vaginalschmerz", + "Vaginalsekrettrinker", + "Vaginalstimulator", + "Vaginalwurm", + "Vaginaschlecker", + "Vaginaschleimgourmet", + "Vaginaschleimtester", + "Vaginenauskratzer", + "Vampierarschloch", + "Vampir", + "Vampirpfurz", + "Vandale", + "Vaterficker", + "Vaterknutscher", + "Vaterlecker", + "Vatisager", + "Verbalerotiker", + "Verbalschrapnell", + "Verbrecher", + "Verdeckzumacher", + "Verderber", + "Vereinsmatratze", + "Vereinsmeier", + "Verfallsdatenbeachter", + "Verfallsdatumleser", + "Verfallsdatumspaniker", + "Verführer", + "Vergaser", + "Vergaseraufbohrer", + "Vergewaltiger", + "Vergewohltätiger", + "Verhaltenskreativer", + "Verhütungsnuss", + "Verkehrserzieher", + "Verkehrsfunkhörer", + "Verkehrsrowdy", + "Verkehrsunfall", + "Verleumnder", + "Verlierer", + "Verräter", + "Verrückter", + "Versager", + "Versandhauswarenbesteller", + "Verschwender", + "Verständnisvortäuscher", + "Verständniszeiger", + "Verstrahlter", + "Verwendungszweckausfüller", + "Vespawichser", + "Viagraschlucker", + "Vibrationsfotze", + "Vibrationsman", + "Vibrator", + "Vibratoraga", + "Vibratorbenutzer", + "Vibratorkopf", + "Vibratorlutscher", + "Videobandsortierer", + "Viechwichser", + "Viehbegrabscher", + "Viehbumser", + "Viehdieb", + "Viehficker", + "Vielfraß", + "Vierauge", + "Vignettenkäufer", + "Virenscannerbenutzer", + "Vitaminbonbonlutscher", + "Vogelficker", + "Vogelfotze", + "Vögelfotze", + "Vogelfreier", + "Vogelfurz", + "Vogelhose", + "Vogelidiot", + "Vogelkind", + "Vogellutscher", + "Vogelnestretter", + "Vogelscheißesammler", + "Vogelscheuche", + "Vögelschlampe", + "Volksdepp", + "Volksloch", + "Volkstrottel", + "Volksverblöder", + "Vollarsch", + "Vollassi", + "Vollbrot", + "Volldepp", + "Volldildo", + "Volleugen", + "Vollfatzge", + "Vollfisch", + "Vollgasdepp", + "Vollgaser", + "Vollhuf", + "Vollidiot", + "Vollkaskofahrer", + "Vollkoffer", + "Vollkoter", + "Vollkotfresse", + "Vollkotzarschgehirn", + "Vollmilchpirat", + "Vollmond", + "Vollnappel", + "Vollpenner", + "Vollpfosten", + "Vollpfostenkatheter", + "Vollrauschverweigerer", + "Vollschwachkopf", + "Vollschwachmat", + "Vollsiebziger", + "Vollspack", + "Vollspacko", + "Vollspast", + "Vollspaten", + "Vollsprallo", + "Volltanker", + "Volltrottel", + "Vollvase", + "Vollwertkoster", + "Vollwicher", + "Vollwurst", + "Vollzeitlutscher", + "Vollzeitspast", + "Vorabendeinchecker", + "Vorbeuger", + "Vorbohrer", + "Vorfahrtanbieter", + "Vorfahrtbeachter", + "Vorfotze", + "Vorfotzenficker", + "Vorfotzengeschwür", + "Vorfotzewegmauser", + "Vorgartenzwerg", + "Vorgärtner", + "Vorhaut", + "Vorhautakrobatike", + "Vorhautbürste", + "Vorhautkäsefresser", + "Vorhautkitzler", + "Vorhautlatz", + "Vorhautlutscher", + "Vorhautmade", + "Vorhautmann", + "Vorhautprinz", + "Vorhautreiter", + "Vorhautrunzler", + "Vorhautsalat", + "Vorhautschäler", + "Vorhautsegel", + "Vorhautverengung", + "Vorhautzurückschieber", + "Vorhautzurückzieher", + "Vorherentschuldiger", + "Vorherrauszieher", + "Vorsorgeuntersuchungspatient", + "Vorspieler", + "Vorstadtcasanova", + "Vorwärtseinparker", + "Vorwärtsparker", + "Vorzeltheizer", + "Vorzeltparker", + "Votzengrind", + "Votzenschlampe", + "Votzentaucher", + "Votzeschleimfresser", + "Vulkanarschloch", + "Vulkanficker", + "Vulvalecker", + "Waachbirn", + "Waalrossbaby", + "Wabbelarsch", + "Wabbelbacke", + "Wabbelhirn", + "Wabbelpanzer", + "Wabbelschwabbel", + "Wabberfotze", + "Wabblaschädl", + "Wabbler", + "Wachskerzenpuhler", + "Wachtel", + "Wachtelei", + "Wackeldackelstreichler", + "Wackeldackelzüchter", + "Wadelbeißer", + "Wadenbeißer", + "Waffel", + "Waffelbäcker", + "Wahnsinnsbalken", + "Walanalkotlecker", + "Waldapotheker", + "Waldesel", + "Waldfee", + "Waldheini", + "Waldhure", + "Waldkacker", + "Waldläufer", + "Waldlutschie", + "Waldscheißer", + "Waldschlampenverführer", + "Waldschnepfe", + "Waldschrat", + "Walkmanleisehörer", + "Walross", + "Walrosspimmel", + "Walzerrechtsrumtänzer", + "Wanderfotze", + "Wanderhoden", + "Wanderhure", + "Wanderkasper", + "Wanderpokal", + "Wanderschlampe", + "Wandervakuum", + "Wanderwarze", + "Wanderziege", + "Wandficker", + "Wandpinkler", + "Wandteppichbepisser", + "Wangenküsschengeber", + "Wangenküsser", + "Wanker", + "Wanzenficker", + "Wanzenfummler", + "Wanzenkopf", + "Wappler", + "Warmbadetagbader", + "Warmbiertrinker", + "Warmduscher", + "Wärmflaschenfüller", + "Warmluftspender", + "Warmmilchtrinker", + "Warmmösenficker, nekrophiler", + "Warmwasserwarzenschwein", + "Warmwasserzähneputzer", + "Warmwichswurst", + "Warteschlangennörgler", + "Wärzchen", + "Warzenarsch", + "Warzenfabrikant", + "Warzenfotze", + "Warzenfresser", + "Warzengesicht", + "Warzenjunge", + "Warzenmagnet", + "Warzensammler", + "Warzensau", + "Warzenschwein", + "Warzenspielplatz", + "Waschanlagenanschnaller", + "Waschanlagenbenutzer", + "Waschanlagenfahrer", + "Waschball", + "Waschbärbauch", + "Waschbeckenrandspringer", + "Wäschekorbkind", + "Wäschekorbträger", + "Waschel", + "Waschlappen", + "Waschlappenbenutzer", + "Waschstraßennachpolierer", + "Waschweib", + "Wasserbettvorwärmer", + "Wasserbüffel", + "Wasserdestilierer", + "Wasserentkalker", + "Wasserkopf", + "Wasserkopfreaktor", + "Wasserpflanze", + "Wasserstoffschlampe", + "Wasserträger", + "Wassertrinker", + "Wasserwichser", + "Watschengesicht", + "Watz, wilder", + "Weberficker", + "Wechselbalg", + "Wechselfälscher", + "Wechselgeldzähler", + "Wechselreiter", + "Weib", + "Weibchenarschlochbumser", + "Weiberheld", + "Weichbaguette", + "Weichborstenzahnbürster", + "Weichei", + "Weicheiverläumder", + "Weichkäseesser", + "Weichling", + "Weichnudellmaschine", + "Weichschädel", + "Weichschwanz", + "Weichspülerbenutzer", + "Weichspülfetischist", + "Weidag", + "Weihnachtsbaumanzünder", + "Weihnachtsgeschenkekäufer", + "Weihnachtsgeschichtenvorleser", + "Weihnachtshure", + "Weihnachtskartenschreiber", + "Weihnachtsliedersinger", + "Weihnachtsmann", + "Weihnachtspapiersammler", + "Weihnachtspenis", + "Weinerlieschen", + "Weinpanscher", + "Weintraubenentkerner", + "Weintraubenkernausspucker", + "Weißwurstwichser", + "Weitstrahlpisser", + "Weitwichser", + "Wellblechpenis", + "Wendehals", + "Werbungwegzapper", + "Werkstransenhure", + "Wertstoffsammlung", + "Werwolf", + "Wesen, schwanzloses", + "Westentaschenkasanova", + "Wetterarsch", + "Wetterberichtgucker", + "Wetterhexe", + "Wettervorhersagenleser", + "Wettkampfkegler", + "Weusler", + "WG-Dienstplanschreiber", + "Wichkind", + "Wichpfosten", + "Wichsarsch", + "Wichsarschficker", + "Wichsbalg", + "Wichsbär", + "Wichsbauer", + "Wichsbecher", + "Wichsbeutel", + "Wichsbirne", + "Wichsbirnenhirn", + "Wichsbold", + "Wichsbolzen", + "Wichsbratze", + "Wichsbrötchen", + "Wichsbürste", + "Wichsedipper", + "Wichseesser", + "Wichsekobold", + "Wichsel", + "Wichselch", + "Wichselecker", + "Wichselutscher", + "Wichser", + "Wichser, platonischer", + "Wichserchen", + "Wichserficker", + "Wichserkönig", + "Wichseule", + "Wichsficker", + "Wichsfleck", + "Wichsfletsche", + "Wichsfotze", + "Wichsfotzenaugust", + "Wichsfresse", + "Wichsfrosch", + "Wichsgebräu", + "Wichsgeburt", + "Wichsgerät", + "Wichsgesicht", + "Wichsgriffel", + "Wichsgriffelablecker", + "Wichsgriffellecker", + "Wichsgrippel", + "Wichsgrüppel", + "Wichsgurke", + "Wichshänschen", + "Wichshaube", + "Wichshorn", + "Wichshund", + "Wichshure", + "Wichskanone", + "Wichskeks", + "Wichskind", + "Wichskissenbeschmierer", + "Wichsknödel", + "Wichsknoten", + "Wichsknubbel", + "Wichsknüppel", + "Wichskopf", + "Wichskröte", + "Wichskrüppel", + "Wichskrüppelbumser", + "Wichskrüppl", + "Wichskübel", + "Wichskugel", + "Wichslappen", + "Wichsloch", + "Wichslöchle", + "Wichsmaus", + "Wichsmist", + "Wichsnase", + "Wichsnudel", + "Wichsopfer", + "Wichspavian", + "Wichspfanne", + "Wichspfützenauflecker", + "Wichspickel", + "Wichspickelficker", + "Wichspilz", + "Wichspimmel", + "Wichspirat", + "Wichspisse", + "Wichsrosine", + "Wichssau", + "Wichsschlauch", + "Wichsschlumpf", + "Wichsschnecke", + "Wichsschnitzel", + "Wichsschwein", + "Wichsstrich", + "Wichssüchtiger", + "Wichstitte", + "Wichstüte", + "Wichsviech", + "Wichsvorlage", + "Wichswicht", + "Wichswurst", + "Wichtel", + "Wichtelfurz", + "Wichtelmännchen", + "Wichtelzwerg", + "Wichtigtuer", + "Wickelnutte", + "Widerling", + "Widerspruchsgeist", + "Wiedehopf", + "Wiesel", + "Wieselpisse", + "Wieselschwanz", + "Wifftsack", + "Wildsau", + "Wildschwein", + "Wildschweinfotze", + "Wimmere", + "Wimmerl", + "Wimpelnachdemwindhänger", + "Wimperngezücht", + "Winckelschleifer", + "Windarsch", + "Windbeutel", + "Windei", + "Windel", + "Windelausschlecker", + "Windelfetischist", + "Windelkacker", + "Windelkind", + "Windelpisser", + "Windelpupskind", + "Windelscheißer", + "Windelträger", + "Windelwichser", + "Windhund", + "Windkanalgesicht", + "Windmacher", + "Windowsherunterfahrer", + "Windpinkler", + "Windpisser", + "Windschattenfahrer", + "Windschottfahrer", + "Windsorknotenträger", + "Winkeladvokat", + "Winkelkind", + "Winkelpisser", + "Winselbritschn", + "Wintermützenträger", + "Winterreifenaufzieher", + "Winterreifenbenutzer", + "Winzigpimmel", + "Wirbelsäulengymnastiker", + "Wirrkopf", + "Witzarsch", + "Witzbold", + "Witzeaufschreiber", + "Witzfigur", + "Witzknoten", + "Witzknubbel", + "Witzkräcker", + "Wixxer", + "Wochenendduscher", + "Wochenendpimmel", + "Wochenendrasierer", + "Wohnungstürspiongucker", + "Wohnzimmerzelter", + "Wolkesiebenflieger", + "Wollhaarmuschi", + "Wollmilchsau, eierlegende", + "Wollmützenaufsetzer", + "Wollsockenabspritzer", + "Wollsockenträger", + "Wollunterhosenträger", + "Wombatz", + "Worcoholic", + "Wörterbuchleser", + "Wörterbuchnachschlager", + "Wortsager", + "Wubba", + "Wucherer", + "Wucherzwerg", + "Wuchtbrumme", + "Wucki", + "Wulscht", + "Wulstling", + "Wumsbacke", + "Wundendesinfizierer", + "Wunderkerzenfeuerwerker", + "Wundertüte", + "Wundficker", + "Wundpflasterträger", + "Wunschkennzeichenfahrer", + "Wunschkind", + "Wunschtroll", + "Würfeldreher", + "Wurfsau", + "Wurfzwerg", + "Wurmfresser", + "Wurmfurz", + "Wurmkopf", + "Würmling", + "Wurstarsch", + "Wurstbauer", + "Wurstbläser", + "Wurstbrot", + "Wurstbrotlecker", + "Würstchen", + "Würstchengriller", + "Wurstfinger", + "Wurstfresse", + "Wurstgebärer", + "Wurstgesicht", + "Wurstgnom", + "Wurstkäfer", + "Wurstkalli", + "Wurstkind", + "Wurstknödel", + "Wurstkopf", + "Wurstkuh", + "Wurstlappen", + "Wurstmacher", + "Wurstmensch", + "Wurstnappel", + "Wurstnase", + "Wurstpellenabmacher", + "Wurstpimmel", + "Wurstsack", + "Wurstschalenwichser", + "Wurstwärmer", + "Wurstwasser", + "Wurstwassertrinker", + "Wurstwichser", + "Wurstwumme", + "Wurzelgnom", + "Wurzelpferd", + "Wurzelsau", + "Wurzelsepp", + "Wuschel", + "Wuschkind", + "Wüstenpfützenumfahrer", + "Wüstenpopel", + "Wüstenrennsau", + "Wüstensau", + "Wüstenschlitz", + "Wüstenstaubsauger", + "Wüstling", + "WYSIWYG-Homepagebastler", + "Xantippe", + "Xenoformalitätenlutscher", + "Xenonlichtautofahrer", + "Xylakant", + "Xylakantensympathisant", + "Xylophonbefruchter", + "Xylophonbohrer", + "Xylophondildo", + "Xylophonficker", + "Xylophonliebhaber", + "Xylophonspieler", + "Xylophonsticklutscher", + "Yakarsch", + "Yakbefruchter", + "Yakfotze", + "Yakfotzenficker", + "Yakfotzenlecker", + "Yakpisse", + "Yakspritzer", + "Yakuzafotze", + "Yamchu", + "Yetiarsch", + "Yetificker", + "Yetischwanzlecker", + "Yetistecher", + "Yetywichser", + "Ykik", + "Yockel", + "Yodaficker", + "Yogafotze", + "Yogaschlampe", + "Yogaschnulli", + "Yogiteetrinker", + "YPS-Spezialagent", + "Yufkaesser", + "Yufkaficker", + "Yuppie", + "Yuppispeichellecker", + "Zahnableger", + "Zahnartzschwänzer", + "Zahnarztfürchter", + "Zahnarztspritzenbettler", + "Zahnarztterminverschieber", + "Zahnbelagliebhaber", + "Zahnbürstenabtrockner", + "Zahnbürstenanaleinführer", + "Zahnbürstenbefriediger", + "Zahnbürstenborstenverbieger", + "Zahnbürstenschieber", + "Zahnflitze", + "Zahnfresser", + "Zahnfüllung", + "Zahnlücke", + "Zahnseideaufroller", + "Zahnseidenknoter", + "Zahnseideverwender", + "Zahnspangenfresse", + "Zahnspangenlecker", + "Zahnspangenschwein", + "Zahnsteinlutscher", + "Zahnstocher", + "Zahnstocherficker", + "Zahnwichser", + "Zamgeburt", + "Zander", + "Zanderfilet", + "Zangenbumser", + "Zangengeburt", + "Zapfen", + "Zapfendödel", + "Zapfsäulenficker", + "Zappelphillip", + "Zarter", + "Zartmöse", + "Zauberflöte", + "Zaungaffer", + "Zaunpinkler", + "Zausel", + "Zebraficker", + "Zebrastreifenbenutzer", + "Zebrastreifenbremser", + "Zebrastreifenstolperer", + "Zechengorn", + "Zechenkas", + "Zechpreller", + "Zeckenarsch", + "Zeckenbläser", + "Zeckendöddel", + "Zeckenficker", + "Zeckenfresser", + "Zeckenfurz", + "Zeckenlutscher", + "Zeckensammler", + "Zeckenschiss", + "Zeckenzieher", + "Zeckenzüchter", + "Zegonventil", + "Zehenfinger", + "Zehenlutscher", + "Zehennagel", + "Zehennagelfresser", + "Zehennagelschneider", + "Zehensockenanzieher", + "Zehenzwischenraumtrocknern", + "Zehncentbefruchter", + "Zehnfingertipper", + "Zehschweißlutscher", + "Zeitlupenscheißer", + "Zeitungsartikelausschneider", + "Zeitungsfalter", + "Zellhaufen", + "Zeltabschließer", + "Zeltfeger", + "Zeltheizer", + "Zementarsch", + "Zentralheizungspfadfinder", + "Zentralverriegler", + "Zersäger", + "Zerstörer", + "Zettelfresser", + "Zeugnisfälscher", + "Zicke", + "Zickenbefruchter", + "Zickenbesammer", + "Zickenbock", + "Zickenficker", + "Zickenlutscher", + "Zickenmonster", + "Zickensack", + "Zickenschlampe", + "Ziegarretenlutscher", + "Ziegelstein", + "Ziegenbart", + "Ziegenbock", + "Ziegenbumser", + "Ziegenficke", + "Ziegenficker", + "Ziegenfurz", + "Ziegenjunge", + "Ziegenkotnascher", + "Ziegenmasseur", + "Ziegenmuschilecker", + "Ziegenpisser", + "Ziegenschänder", + "Ziegenschliefe", + "Ziegenschwanzkäse", + "Ziehmannbefruchter", + "Ziepfelzeiger", + "Zierfischzüchter", + "Zigarettenbürschal", + "Ziggenlecker", + "Zikkenficker", + "Zimmerdurchlüfter", + "Zimmermädchenverführer", + "Zimmerpflanzengießer", + "Zimperliese", + "Zimtzicke", + "Zimtzickenficker", + "Zinkenhammel", + "Zipfebeißer", + "Zipfeklatscher", + "Zipfel", + "Zipfelarschknatterer", + "Zipfelbär", + "Zipfeldreher", + "Zipfelfresse", + "Zipfelgesicht", + "Zipfelhuber", + "Zipfelklatscher", + "Zipfelknecht", + "Zipfelkobold", + "Zipfellutscher", + "Zipfelmütze", + "Zipfelreißer", + "Zipfelschwinger", + "Zipfelspieler", + "Zipfelzieher", + "Zipfigesicht", + "Zipfiklatscher", + "Zippe", + "Zipperface", + "Zirkusaffe", + "Zischkopf", + "Zitronenarschgesicht", + "Zitronensaftpisser", + "Zitronenschüttler", + "Zitteraal", + "Zitterling", + "Zitzenanus", + "Zitzenbeißer", + "Zitzenkacker", + "Zitzenlutscher", + "Zitzenpitscher", + "Zitzenzieher", + "Zizenpenner", + "Zizzenlecker", + "Zombie", + "Zombieficker", + "Zombiefotze", + "Zombiefresse", + "Zottelfresse", + "Zuagroaster", + "Zuchtaffe", + "Zuchtbulle", + "Zuchtgarnele", + "Zuchthäusler", + "Zuchtsau", + "Zuchtsaubesamer", + "Zuchtschiss", + "Zuerstkommer", + "Zufrühkommer", + "Zuhälter", + "Zuhörer", + "Zumpfl", + "Zungenakrobat", + "Zungenkussverweigerer", + "Zungenläcker", + "Zungenrasierer", + "Zungenzügler", + "Zupfgeigenhansel", + "Zupfhenne", + "Zuppe", + "Zurückgewichster", + "Zurücklächler", + "Zusammengestauchter", + "Zwack", + "Zwangsonnanist", + "Zweieck", + "Zweifingertipper", + "Zweihandwichser", + "Zweimalfrager", + "Zweitligist", + "Zweiweckersteller", + "Zweizeller", + "Zwerchfelltreter", + "Zwergarschfotze", + "Zwergendödel", + "Zwergendünnschiss", + "Zwergenfuß", + "Zwergenlutscher", + "Zwergenpimmel", + "Zwergenpopper", + "Zwergenschwanz", + "Zwergenwerfer", + "Zwergenzipfel", + "Zwergmöse", + "Zwergnase", + "Zwergpügmehe", + "Zwetschgenkopf", + "Zwickelzwerg", + "Zwiebackesser", + "Zwiebackfrese", + "Zwiebackmöse", + "Zwiebelhirsch", + "Zwiebelkopf", + "Zwiederschippel", + "Zwiederwurzen", + "Zwiederwurzenziege", + "Zwischendeckpassagier", + "Zwischendenzehenlecker", + "Zwischenpisser", + "Zwitter", + "Zwitterficker", + "Zwoggel", + "Zwunsch", + "Zygotenzüchter", + "Zyklop", + "Zyklopenaugapfel", + "Zyklopenbusen", + "Zyklopenficker", + "Zyklopenfotze", + "Zyklopenfotzenlecker", + "Zyklopenfresse", + "Zyklopenhoden", + "Zyklopenhodenlecker", + "Zyklopenhure", + "Zyklopenhurenfickerschwein", + "Zyklopenpo", + "Zyklopenschlampe", + "Zyklopenschlampenficker", + "Zyklopenzyste", + "Zylinder", + "Zylinderficker", + "Zylinderkopf", + "Zylinderschlampe", + "Zyniker", + "Zystenbock", + "Zystenficker", + "Zystenfresse", + "Zystenfresser", + "Zystenhals", + "Zysteninhaltlecker", + "Zysteninhaltschmatzer", + "Zystenkopf", + "Zystenlecker", + "Zystenlutscher", + "Zystenoma", + "Zystenpenislutscher", + "Zystenpriester", + "Zystensauger", + "Zystenstecher", + "Zystenvögelfotze", + "Zystenzappler", + "Zystenziege", + "Zystenzupfer", + "Zystenzupferliese", + "Zystenzwerg" + ] +} \ No newline at end of file diff --git a/includes/blocked-users.php b/includes/blocked-users.php new file mode 100644 index 0000000..1704807 --- /dev/null +++ b/includes/blocked-users.php @@ -0,0 +1,198 @@ +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( WP_MULTI_FILE, 'wp_multi_activate' ); + +function wp_multi_block_user($username = '', $email = '', $ip_address = '') { + global $wpdb; + if (empty($username) && empty($email) && empty($ip_address)) { + return false; + } + $result = $wpdb->insert( + $wpdb->prefix . 'blocked_users', + [ + 'username' => $username, + 'email' => $email, + 'ip_address' => $ip_address + ] + ); + return $result !== false; +} + +function wp_multi_delete_blocked_user($id) { + global $wpdb; + return $wpdb->delete($wpdb->prefix . 'blocked_users', ['id' => $id], ['%d']); +} + +// Der Menüpunkt "Gesperrte Benutzer" wird zentral in wp_multi_register_admin_menus() registriert. + +function wp_multi_blocked_users_page() { + global $wpdb; + + $notices = array(); + + if (isset($_POST['block_username']) || isset($_POST['block_email']) || isset($_POST['block_ip'])) { + check_admin_referer('wp_multi_block_user'); + $username = sanitize_text_field($_POST['block_username']); + $email = sanitize_email($_POST['block_email']); + $ip_address = sanitize_text_field($_POST['block_ip']); + if (wp_multi_block_user($username, $email, $ip_address)) { + $notices[] = array('success', __('Benutzer wurde gesperrt!', 'wp-multi')); + } else { + $notices[] = array('error', __('Fehler beim Sperren des Benutzers!', 'wp-multi')); + } + } + + if (isset($_GET['delete']) && isset($_GET['_wpnonce'])) { + if (wp_verify_nonce($_GET['_wpnonce'], 'wp_multi_delete_user_' . $_GET['delete'])) { + $user_id = intval($_GET['delete']); + if ($user_id > 0 && wp_multi_delete_blocked_user($user_id)) { + $notices[] = array('success', __('Benutzer wurde gelöscht!', 'wp-multi')); + } else { + $notices[] = array('error', __('Fehler beim Löschen des Benutzers!', 'wp-multi')); + } + } + } + + $search_query = ''; + if (isset($_GET['search'])) { + $search_query = sanitize_text_field($_GET['search']); + } + + $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 . '%' + )); + + wpmt_admin_page_open( + __('Gesperrte Benutzer', 'wp-multi'), + __('Benutzer per Name, E-Mail oder IP von Kommentaren ausschließen', 'wp-multi') + ); + + foreach ($notices as $notice) { + wpmt_admin_notice($notice[0], $notice[1]); + } + + echo '
'; + + wpmt_admin_card_open(__('Benutzer sperren', 'wp-multi')); + ?> +
+ +
+ + +
+
+ + +
+
+ + +
+

+
+ +
+ +
+ + +
+

+
+ '; + + wpmt_admin_card_open(__('Gesperrte Benutzer', 'wp-multi')); + ?> +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
username); ?>email); ?>ip_address); ?> + +
+
+ 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'); + + diff --git a/includes/bookmarks.php b/includes/bookmarks.php new file mode 100644 index 0000000..2bb54e1 --- /dev/null +++ b/includes/bookmarks.php @@ -0,0 +1,346 @@ + [ + 'name' => __('Lesezeichen', 'statistik-manager'), + 'singular_name' => __('Lesezeichen', 'statistik-manager'), + ], + 'public' => false, + 'show_ui' => false, + 'show_in_menu' => false, + 'supports' => ['title', 'custom-fields'], + ]); +} +add_action('init', 'statistik_manager_create_bookmark_post_type'); + +/** + * Generiert oder holt den Gast-Token. + * + * @return string Der Gast-Token. + */ +function statistik_manager_get_guest_token() { + $guest_token = isset($_COOKIE[STATISTIK_MANAGER_COOKIE_NAME]) ? sanitize_text_field($_COOKIE[STATISTIK_MANAGER_COOKIE_NAME]) : null; + + if (!$guest_token) { + $guest_token = wp_generate_uuid4(); + setcookie( + STATISTIK_MANAGER_COOKIE_NAME, + $guest_token, + time() + STATISTIK_MANAGER_COOKIE_DURATION, + COOKIEPATH, + COOKIE_DOMAIN, + is_ssl(), // Secure + true // HttpOnly + ); + } + + return $guest_token; +} + +/** + * Speichert ein Lesezeichen für einen Gast. + * + * @param int $post_id Post-ID des Lesezeichens. + */ +function statistik_manager_save_bookmark($post_id) { + $guest_token = statistik_manager_get_guest_token(); + update_post_meta($post_id, '_guest_token', $guest_token); +} + +/** + * Ruft die Lesezeichen eines Gastes ab. + * + * @return array Liste der Lesezeichen. + */ +function statistik_manager_get_guest_bookmarks() { + $guest_token = statistik_manager_get_guest_token(); + $cache_key = STATISTIK_MANAGER_BOOKMARKS_CACHE_KEY . md5($guest_token); + $bookmarks = get_transient($cache_key); + + if ($bookmarks !== false) { + return $bookmarks; + } + + $args = [ + 'post_type' => STATISTIK_MANAGER_BOOKMARK_POST_TYPE, + 'meta_query' => [ + [ + 'key' => '_guest_token', + 'value' => $guest_token, + ], + ], + 'posts_per_page' => -1, + 'post_status' => 'publish', + 'orderby' => 'date', + 'order' => 'DESC', + ]; + + $bookmarks_query = new WP_Query($args); + $bookmarks = $bookmarks_query->posts; + + set_transient($cache_key, $bookmarks, HOUR_IN_SECONDS); + return $bookmarks; +} + +/** + * Löscht ein Lesezeichen via AJAX. + */ +function statistik_manager_delete_bookmark() { + check_ajax_referer('statistik_manager_bookmark_nonce', 'nonce'); + + if (!isset($_POST['bookmark_id']) || !isset($_COOKIE[STATISTIK_MANAGER_COOKIE_NAME])) { + wp_send_json_error(['message' => __('Ungültige Anfrage.', 'statistik-manager')]); + } + + $bookmark_id = absint($_POST['bookmark_id']); + $guest_token = sanitize_text_field($_COOKIE[STATISTIK_MANAGER_COOKIE_NAME]); + $stored_token = get_post_meta($bookmark_id, '_guest_token', true); + + if ($stored_token !== $guest_token) { + wp_send_json_error(['message' => __('Du kannst nur deine eigenen Lesezeichen löschen.', 'statistik-manager')]); + } + + wp_delete_post($bookmark_id, true); + delete_transient(STATISTIK_MANAGER_BOOKMARKS_CACHE_KEY . md5($guest_token)); + wp_send_json_success(['message' => __('Lesezeichen erfolgreich gelöscht.', 'statistik-manager')]); +} +add_action('wp_ajax_delete_bookmark', 'statistik_manager_delete_bookmark'); +add_action('wp_ajax_nopriv_delete_bookmark', 'statistik_manager_delete_bookmark'); + +/** + * Fügt ein Lesezeichen via AJAX hinzu. + */ +function statistik_manager_add_bookmark_ajax() { + check_ajax_referer('statistik_manager_bookmark_nonce', 'nonce'); + + if (!isset($_POST['bookmark_url']) || !isset($_POST['bookmark_name'])) { + wp_send_json_error(['message' => __('Bitte alle Felder ausfüllen.', 'statistik-manager')]); + } + + $bookmark_url = esc_url_raw($_POST['bookmark_url']); + $bookmark_name = sanitize_text_field($_POST['bookmark_name']); + + if (empty($bookmark_url) || empty($bookmark_name)) { + wp_send_json_error(['message' => __('Ungültige URL oder Name.', 'statistik-manager')]); + } + + // Prüfen, ob die URL bereits existiert + $guest_token = statistik_manager_get_guest_token(); + $args = [ + 'post_type' => STATISTIK_MANAGER_BOOKMARK_POST_TYPE, + 'meta_query' => [ + 'relation' => 'AND', + [ + 'key' => '_guest_token', + 'value' => $guest_token, + ], + [ + 'key' => '_bookmark_url', + 'value' => $bookmark_url, + ], + ], + 'posts_per_page' => 1, + ]; + + $existing = new WP_Query($args); + if ($existing->have_posts()) { + wp_send_json_error(['message' => __('Diese URL ist bereits ein Lesezeichen.', 'statistik-manager')]); + } + + // Neues Lesezeichen erstellen + $post_id = wp_insert_post([ + 'post_type' => STATISTIK_MANAGER_BOOKMARK_POST_TYPE, + 'post_title' => $bookmark_name, + 'post_status' => 'publish', + 'meta_input' => [ + '_bookmark_url' => $bookmark_url, + '_guest_token' => $guest_token, + ], + ]); + + if (is_wp_error($post_id)) { + wp_send_json_error(['message' => __('Fehler beim Hinzufügen des Lesezeichens.', 'statistik-manager')]); + } + + delete_transient(STATISTIK_MANAGER_BOOKMARKS_CACHE_KEY . md5($guest_token)); + wp_send_json_success([ + 'message' => __('Lesezeichen erfolgreich hinzugefügt.', 'statistik-manager'), + 'html' => '
  • ' . esc_html($bookmark_name) . '
  • ', + ]); +} +add_action('wp_ajax_add_bookmark', 'statistik_manager_add_bookmark_ajax'); +add_action('wp_ajax_nopriv_add_bookmark', 'statistik_manager_add_bookmark_ajax'); + +/** + * Zeigt die Lesezeichen eines Gastes an. + * + * @return string HTML-Ausgabe der Lesezeichen. + */ +function statistik_manager_display_bookmarks() { + $bookmarks = statistik_manager_get_guest_bookmarks(); + + ob_start(); + ?> +
    +

    + +

    + + + +
    + +
    + +
    + + +
    +
    + + +
    +
    + +
    +
    +
    + + + + prefix . 'blocked_ips'; + $attempts_table = $wpdb->prefix . 'login_attempts'; + $block_threshold = 5; + + // Anmeldeversuch in attempts-Tabelle speichern + $wpdb->insert( + $attempts_table, + array( + 'ip' => $ip, + 'username' => $username, + 'attempt_time' => current_time('mysql'), + ), + array('%s', '%s', '%s') + ); + + // Prüfen, ob IP bereits in blocked_ips existiert + $row = $wpdb->get_row($wpdb->prepare("SELECT * FROM $blocked_table WHERE ip = %s", $ip)); + + if ($row) { + $wpdb->update( + $blocked_table, + array( + 'attempts' => $row->attempts + 1, + 'last_attempt' => current_time('mysql'), + ), + array('ip' => $ip), + array('%d', '%s'), + array('%s') + ); + $attempts = $row->attempts + 1; + } else { + $wpdb->insert( + $blocked_table, + array( + 'ip' => $ip, + 'attempts' => 1, + 'last_attempt' => current_time('mysql'), + ), + array('%s', '%d', '%s') + ); + $attempts = 1; + } + + // IP sperren, wenn Schwellenwert erreicht + if ($attempts >= $block_threshold) { + wp_die( + __('Deine IP-Adresse wurde aufgrund zu vieler Fehlversuche gesperrt. Bitte versuche es später noch einmal.', 'wp-multi'), + __('Zugriff gesperrt', 'wp-multi'), + array('response' => 403) + ); + } +} + +// Hook für fehlgeschlagene Anmeldungen +add_action('wp_login_failed', 'wp_multi_log_failed_login', 10, 1); + +// Funktion zur Erstellung der Tabellen +function wp_multi_create_blocked_ips_table() { + global $wpdb; + + $blocked_table = $wpdb->prefix . 'blocked_ips'; + $attempts_table = $wpdb->prefix . 'login_attempts'; + $charset_collate = $wpdb->get_charset_collate(); + $version = get_option('wp_multi_blocked_ips_version', '1.0'); + + if (version_compare($version, '1.1', '<')) { + $sql_blocked = "CREATE TABLE $blocked_table ( + 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), + KEY ip (ip) + ) $charset_collate;"; + + $sql_attempts = "CREATE TABLE $attempts_table ( + id mediumint(9) NOT NULL AUTO_INCREMENT, + ip varchar(45) NOT NULL, + username varchar(255) NOT NULL, + attempt_time datetime NOT NULL, + PRIMARY KEY (id), + KEY ip (ip), + KEY attempt_time (attempt_time) + ) $charset_collate;"; + + require_once ABSPATH . 'wp-admin/includes/upgrade.php'; + dbDelta($sql_blocked); + dbDelta($sql_attempts); + update_option('wp_multi_blocked_ips_version', '1.1'); + } +} +register_activation_hook(WP_MULTI_FILE, 'wp_multi_create_blocked_ips_table'); + +// Wöchentliche Zusammenfassung +function wp_multi_send_weekly_summary() { + global $wpdb; + + // Prüfen, ob Zusammenfassung aktiviert ist + $summary_enabled = get_option('wp_multi_summary_enabled', 1); + if (!$summary_enabled) { + return; + } + + $attempts_table = $wpdb->prefix . 'login_attempts'; + $last_email_time = get_option('wp_multi_last_summary_email', 0); + $current_time = time(); + + // Prüfen, ob eine Woche vergangen ist (7 Tage = 604800 Sekunden) + if (($current_time - $last_email_time) < 604800) { + return; + } + + // Zeitraum für die Zusammenfassung (letzte Woche) + $week_ago = date('Y-m-d H:i:s', strtotime('-7 days')); + $now = date('Y-m-d H:i:s'); + + // Gesamtzahl der Anmeldeversuche + $total_attempts = $wpdb->get_var( + $wpdb->prepare( + "SELECT COUNT(*) FROM $attempts_table WHERE attempt_time >= %s", + $week_ago + ) + ); + $total_attempts = $total_attempts ? $total_attempts : 0; + + // Top 10 IPs mit den meisten Anmeldeversuchen + $top_attempts = $wpdb->get_results( + $wpdb->prepare( + "SELECT ip, username, COUNT(*) as attempt_count, MAX(attempt_time) as last_attempt + FROM $attempts_table + WHERE attempt_time >= %s + GROUP BY ip, username + ORDER BY attempt_count DESC + LIMIT 10", + $week_ago + ) + ); + + // E-Mail-Inhalt + $message = __("Wöchentliche Anmeldeversuche-Zusammenfassung\n\n", 'wp-multi'); + $message .= sprintf(__("Zeitraum: %s bis %s\n\n", 'wp-multi'), $week_ago, $now); + $message .= sprintf(__("Gesamtzahl der Anmeldeversuche: %d\n\n", 'wp-multi'), $total_attempts); + $message .= __("Top 10 Anmeldeversuche (nach IP und Benutzername):\n", 'wp-multi'); + + if ($top_attempts) { + foreach ($top_attempts as $index => $attempt) { + $message .= sprintf( + __("%d. IP: %s, Benutzername: %s, Versuche: %d, Letzter Versuch: %s\n", 'wp-multi'), + $index + 1, + $attempt->ip, + $attempt->username, + $attempt->attempt_count, + $attempt->last_attempt + ); + } + } else { + $message .= __("Keine Anmeldeversuche in diesem Zeitraum.\n", 'wp-multi'); + } + + // E-Mail an Admin senden + $admin_email = get_option('admin_email'); + wp_mail( + $admin_email, + __('Wöchentliche Anmeldeversuche-Zusammenfassung', 'wp-multi'), + $message, + array('Content-Type: text/plain; charset=UTF-8') + ); + + // Aktualisiere den Zeitstempel der letzten E-Mail + update_option('wp_multi_last_summary_email', $current_time); +} + +// Planen der wöchentlichen Zusammenfassung (jeden Montag um 8:00 Uhr) +function wp_multi_schedule_weekly_summary() { + if (!wp_next_scheduled('wp_multi_weekly_summary_event')) { + wp_schedule_event(strtotime('next Monday 08:00'), 'weekly', 'wp_multi_weekly_summary_event'); + } +} +add_action('wp', 'wp_multi_schedule_weekly_summary'); + +// Hook für die Ausführung der Zusammenfassung +add_action('wp_multi_weekly_summary_event', 'wp_multi_send_weekly_summary'); + +// Einstellungsoption für die Zusammenfassung +function wp_multi_users_register_settings() { + add_option('wp_multi_summary_enabled', 1); + register_setting('wp_multi_users_settings_group', 'wp_multi_summary_enabled', array( + 'type' => 'integer', + 'sanitize_callback' => 'absint', + 'default' => 1, + )); + + // Settings Section hinzufügen + add_settings_section( + 'wp_multi_security_section', + __('Brute-Force-Schutz Einstellungen', 'wp-multi'), + 'wp_multi_security_section_callback', + 'wp_multi_users_security_settings' + ); + + // Settings Field hinzufügen + add_settings_field( + 'wp_multi_summary_enabled', + __('Wöchentliche Zusammenfassung', 'wp-multi'), + 'wp_multi_summary_enabled_callback', + 'wp_multi_users_security_settings', + 'wp_multi_security_section' + ); +} +add_action('admin_init', 'wp_multi_users_register_settings'); + +// Callback für die Settings Section +function wp_multi_security_section_callback() { + echo '

    ' . __('Konfiguriere die Sicherheitseinstellungen für den Brute-Force-Schutz deiner Website. Aktiviere oder deaktiviere die wöchentliche Zusammenfassung der fehlgeschlagenen Anmeldeversuche.', 'wp-multi') . '

    '; +} + +// Callback für das Settings Field +function wp_multi_summary_enabled_callback() { + $summary_enabled = get_option('wp_multi_summary_enabled', 1); + ?> + /> + +

    + +

    +
    + +
    + prefix . 'blocked_ips'; + + $five_days_ago = date('Y-m-d H:i:s', strtotime('-5 days')); + $per_page = 50; + $page = max(1, isset($_GET['paged']) ? intval($_GET['paged']) : 1); + $offset = ($page - 1) * $per_page; + + $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 + ) + ); + + $total_ips = $wpdb->get_var($wpdb->prepare("SELECT COUNT(*) FROM $table_name WHERE last_attempt >= %s", $five_days_ago)); + $total_pages = ceil($total_ips / $per_page); + + wpmt_admin_page_open( + __('Blockierte IPs', 'wp-multi'), + __('Vom Brute-Force-Schutz erfasste IP-Adressen der letzten 5 Tage', 'wp-multi') + ); + + wpmt_admin_card_open(); + if (empty($blocked_ips)) { + wpmt_admin_notice('info', __('Keine blockierten IPs gefunden.', 'wp-multi')); + } else { + ?> +
    + + + + + + + + + + + + + + + + + + + + + +
    id); ?>ip); ?>attempts); ?>last_attempt); ?> + + + +
    +
    + + 1) : ?> +
    +
    + add_query_arg('paged', '%#%'), + 'format' => '', + 'prev_text' => __('«'), + 'next_text' => __('»'), + 'total' => $total_pages, + 'current' => $page, + )); + ?> +
    +
    + + query( + $wpdb->prepare( + "DELETE FROM $table_name WHERE attempts < 10 AND last_attempt < %s", + $three_days_ago + ) + ); + + wpmt_admin_page_close(); +} + +// 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.', 'wp-multi'), '', array('response' => 403)); + } + + $id = isset($_GET['id']) ? intval($_GET['id']) : 0; + + if (!$id || !isset($_GET['_wpnonce']) || !wp_verify_nonce(wp_unslash($_GET['_wpnonce']), 'wp_multi_remove_blocked_ip_' . $id)) { + wp_die(__('Ungültige oder abgelaufene Anfrage.', 'wp-multi'), '', array('response' => 403)); + } + + global $wpdb; + + if ($id > 0) { + $table_name = $wpdb->prefix . 'blocked_ips'; + $wpdb->delete($table_name, array('id' => $id), array('%d')); + } + + wp_safe_redirect(admin_url('admin.php?page=wp_multi_blocked_ips')); + exit; +} +add_action('admin_post_remove_blocked_ip', 'wp_multi_remove_blocked_ip'); + + diff --git a/includes/comment-filter.php b/includes/comment-filter.php new file mode 100644 index 0000000..5509e8a --- /dev/null +++ b/includes/comment-filter.php @@ -0,0 +1,153 @@ + 'absint', 'default' => 0]); + register_setting('wp_multi_security_settings', 'wp_multi_filter_email', ['sanitize_callback' => 'absint', 'default' => 0]); + register_setting('wp_multi_security_settings', 'wp_multi_filter_url', ['sanitize_callback' => 'absint', 'default' => 0]); + register_setting('wp_multi_security_settings', 'wp_multi_filter_ip', ['sanitize_callback' => 'absint', 'default' => 0]); + register_setting('wp_multi_security_settings', 'wp_multi_filter_swearwords', ['sanitize_callback' => 'absint', 'default' => 0]); + + add_settings_section( + 'wp_multi_comment_filter_section', + __('Kommentarfilter', 'wp-multi'), + 'wp_multi_comment_filter_section_callback', + 'wp-multi-security' + ); + + add_settings_field('wp_multi_filter_phone', __('Telefonnummern filtern', 'wp-multi'), 'wp_multi_filter_phone_callback', 'wp-multi-security', 'wp_multi_comment_filter_section'); + add_settings_field('wp_multi_filter_email', __('E-Mail-Adressen filtern', 'wp-multi'), 'wp_multi_filter_email_callback', 'wp-multi-security', 'wp_multi_comment_filter_section'); + add_settings_field('wp_multi_filter_url', __('URLs filtern', 'wp-multi'), 'wp_multi_filter_url_callback', 'wp-multi-security', 'wp_multi_comment_filter_section'); + add_settings_field('wp_multi_filter_ip', __('IP-Adressen filtern', 'wp-multi'), 'wp_multi_filter_ip_callback', 'wp-multi-security', 'wp_multi_comment_filter_section'); + add_settings_field('wp_multi_filter_swearwords', __('Schimpfwörter filtern', 'wp-multi'), 'wp_multi_filter_swearwords_callback', 'wp-multi-security', 'wp_multi_comment_filter_section'); +} +add_action('admin_init', 'wp_multi_comment_filter_register_settings'); + +function wp_multi_comment_filter_section_callback() { + echo '

    ' . esc_html__('Lege fest, welche Inhalte in Kommentaren automatisch durch * ersetzt werden, statt den ganzen Kommentar zu blockieren.', 'wp-multi') . '

    '; +} + +function wp_multi_filter_phone_callback() { + ?> + > + + > + + > + + > + + > + + "]+#i', 'wp_multi_mask_match', $content); + } + + if (get_option('wp_multi_filter_ip', 0)) { + $content = preg_replace_callback('/\b(?:\d{1,3}\.){3}\d{1,3}\b/', 'wp_multi_mask_match', $content); + } + + if (get_option('wp_multi_filter_swearwords', 0)) { + foreach (wp_multi_get_bad_words_patterns() as $pattern) { + $content = preg_replace_callback($pattern, 'wp_multi_mask_match', $content); + } + } + + return $content; +} + + + + + + + + diff --git a/includes/copy-protection.php b/includes/copy-protection.php new file mode 100644 index 0000000..f389e57 --- /dev/null +++ b/includes/copy-protection.php @@ -0,0 +1,63 @@ +window.open("' . esc_url($page['url']) . '", "_blank");'; + echo '

    ' . __('Die externe Seite wird in einem neuen Fenster geöffnet.', 'wp-stat-notice') . '

    '; + echo '

    ' . esc_html__('Seite manuell öffnen', 'wp-stat-notice') . '

    '; + } else { + echo '

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

    '; + } + wpmt_admin_card_close(); + wpmt_admin_page_close(); + return; + } + } + + wpmt_admin_page_open(__('Benutzerdefinierte Seite', 'wp-stat-notice')); + wpmt_admin_notice('error', __('Seite nicht gefunden.', 'wp-stat-notice')); + wpmt_admin_page_close(); +} + +// Funktion zum Hinzufügen und Verwalten benutzerdefinierter Seiten +function wp_stat_notice_add_custom_page_form() { + $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' + ]; + + ?> +
    +

    + + +
    + + + + + + + + + + + + + + + + + + +
    + +
    +
    +

    +
    + +

    ' . __('Titel und Slug sind erforderlich.', 'wp-stat-notice') . '

    '; + } else { + $custom_pages = get_option('wp_stat_notice_custom_pages', []); + $slugs = array_column($custom_pages, 'slug'); + if (in_array($slug, $slugs)) { + echo '

    ' . __('Dieser Slug wird bereits verwendet.', 'wp-stat-notice') . '

    '; + } else { + $custom_pages[] = ['title' => $title, 'url' => $url, 'slug' => $slug, 'icon' => $icon]; + update_option('wp_stat_notice_custom_pages', $custom_pages); + echo '

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

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

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

    '; + echo ''; + echo ''; + echo ''; + foreach ($custom_pages as $index => $page) { + echo ''; + echo ''; + echo ''; + echo ''; + $delete_url = wp_nonce_url(admin_url('admin.php?page=wp-stat-notice-custom-page&delete=' . $index), 'wp_stat_notice_delete_page_' . $index); + echo ''; + echo ''; + } + echo '
    ' . __('Titel', 'wp-stat-notice') . '' . __('URL', 'wp-stat-notice') . '' . __('Slug', 'wp-stat-notice') . '' . __('Aktionen', 'wp-stat-notice') . '
    ' . esc_html($page['title']) . '' . esc_html($page['url'] ?: '-') . '' . esc_html($page['slug']) . '' . __('Bearbeiten', 'wp-stat-notice') . ' | '; + echo '' . __('Löschen', 'wp-stat-notice') . '
    '; + } + + // Bearbeiten + if (isset($_GET['edit']) && isset($custom_pages[(int) $_GET['edit']])) { + $edit_index = (int) $_GET['edit']; + $edit_page = $custom_pages[$edit_index]; + + echo '

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

    '; + ?> +
    + + + + + + + + + + + + + + + + + + +
    + +
    +
    +

    +
    +

    ' . __('Titel und Slug sind erforderlich.', 'wp-stat-notice') . '

    '; + } else { + $custom_pages[$edit_index] = ['title' => $title, 'url' => $url, 'slug' => $slug, 'icon' => $icon]; + update_option('wp_stat_notice_custom_pages', $custom_pages); + echo '

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

    '; + } + } + } + + // Löschen + if (isset($_GET['delete']) && isset($custom_pages[(int) $_GET['delete']])) { + check_admin_referer('wp_stat_notice_delete_page_' . (int) $_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') . '

    '; + } + ?> + + + + +
    + + + + + + + + + + + + + + +
    + /> +

    +
    + +

    +
    + +

    +
    + +
    + ID, '_guest_author', true); + $author_name = !empty($guest_author_name) ? $guest_author_name : get_the_author(); + $custom_texts = get_option('wp_multi_custom_texts', ''); + $second_custom_texts = get_option('wp_multi_second_custom_text', ''); + $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))); + $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); + + if (empty($custom_texts_array) && empty($second_custom_texts_array)) { + return $content; + } + + $output = '
    '; + $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]); + } + $output .= '

    '; + 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) { + $custom_texts = get_option('wp_multi_custom_texts'); + $custom_texts_array = array_filter(array_map('trim', explode("\n", $custom_texts))); + $second_custom_text = get_option('wp_multi_second_custom_text'); + $second_custom_text_array = array_filter(array_map('trim', explode("\n", $second_custom_text))); + $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); + wp_nonce_field('wp_multi_custom_text_choice_nonce', 'wp_multi_custom_text_choice_nonce_field'); + ?> + + + + + +

    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 ); + + diff --git a/includes/disposable-email.php b/includes/disposable-email.php new file mode 100644 index 0000000..0fe4717 --- /dev/null +++ b/includes/disposable-email.php @@ -0,0 +1,44 @@ +ID, '_guest_author', true); + wp_nonce_field('wp_multi_guest_author_nonce', 'wp_multi_guest_author_nonce_field'); + ?> + + + ID, '_guest_author', true); + if (!empty($guest_author)) { + $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'); + +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); + echo !empty($guest_author) ? esc_html($guest_author) : __('Kein Gast-Autor', 'wp-multi'); + } +} +add_action('manage_posts_custom_column', 'wp_multi_display_guest_author_column', 10, 2); + +// Der Gast-Autoren-Menüpunkt wird zentral in wp_multi_register_admin_menus() registriert. + +// Callback-Funktion für die Gast-Autor-Übersicht +function wp_multi_guest_author_overview_page() { + // Sortierparameter aus URL lesen + $orderby = isset($_GET['orderby']) ? sanitize_key($_GET['orderby']) : 'guest_author'; + $order = isset($_GET['order']) && in_array(strtoupper($_GET['order']), ['ASC', 'DESC']) ? strtoupper($_GET['order']) : 'ASC'; + + // Gültige Sortierfelder + $valid_orderby = ['guest_author' => 'pm.meta_value', 'posts' => 'post_count']; + $sql_orderby = isset($valid_orderby[$orderby]) ? $valid_orderby[$orderby] : 'pm.meta_value'; + $sql_order = $order; + + // Basis-URL für Sortier-Links + $base_url = add_query_arg(['page' => 'guest_author_overview'], admin_url('admin.php')); + + global $wpdb; + $query = " + SELECT pm.meta_value AS guest_author, COUNT(*) AS post_count + FROM {$wpdb->posts} p + INNER JOIN {$wpdb->postmeta} pm ON p.ID = pm.post_id + WHERE pm.meta_key = '_guest_author' + AND pm.meta_value != '' + AND p.post_status = 'publish' + GROUP BY pm.meta_value + ORDER BY {$sql_orderby} {$sql_order} + "; + $guest_authors = $wpdb->get_results($query); + + wpmt_admin_page_open( + __('Gast-Autoren', 'wp-multi'), + __('Alle Gast-Autoren mit Anzahl ihrer veröffentlichten Beiträge', 'wp-multi') + ); + + wpmt_admin_card_open(); + ?> +
    + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + +
    guest_author); ?>post_count); ?>
    +
    + $page_title, + 'post_name' => $page_slug, + 'post_content' => '[guest_author_posts]', + 'post_status' => 'publish', + 'post_type' => 'page', + )); + + if ($page_id && !is_wp_error($page_id)) { + update_option('wp_multi_guest_author_page_id', $page_id); + } + } else { + update_option('wp_multi_guest_author_page_id', $page->ID); + } +} +add_action('init', 'wp_multi_create_guest_author_page'); + +// Shortcode für Gastautoren-Liste +function wp_multi_guest_author_shortcode() { + ob_start(); + global $wpdb; + + // Alle Gastautoren mit Beitragsanzahl abrufen + $query = " + SELECT pm.meta_value AS guest_author, COUNT(*) AS post_count + FROM {$wpdb->posts} p + INNER JOIN {$wpdb->postmeta} pm ON p.ID = pm.post_id + WHERE pm.meta_key = '_guest_author' + AND pm.meta_value != '' + AND p.post_status = 'publish' + GROUP BY pm.meta_value + ORDER BY pm.meta_value ASC + "; + $guest_authors = $wpdb->get_results($query); + + // URL der Gastautoren-Beitragsseite + $guest_author_page_id = get_option('wp_multi_guest_author_page_id'); + $guest_author_page_url = $guest_author_page_id ? get_permalink($guest_author_page_id) : '#'; + + ?> +
    + +
    + + + +

    guest_author); ?>

    +

    post_count); ?>

    +
    + + +

    + +
    +
    + + + + +
    +

    + +

    +
    + ['post', 'page', 'dein_custom_post_type'], + 'post_status' => 'publish', + 'meta_query' => array( + array( + 'key' => '_guest_author', + 'value' => $guest_author, + 'compare' => '=' + ) + ), + 'tax_query' => array( + array( + 'taxonomy' => 'category', + 'field' => 'slug', + 'terms' => 'series', + 'operator' => 'NOT IN' + ) + ), + 'posts_per_page' => -1 + ); + + $query = new WP_Query($args); + + + + if ($query->have_posts()) { + while ($query->have_posts()) { + $query->the_post(); + // Beitragsinhalt abrufen und kürzen + $content = get_the_content(); + $content = wp_strip_all_tags($content); // HTML-Tags entfernen + $trimmed_content = wp_trim_words($content, 30, '...'); + ?> +
    +

    + +

    +

    +
    + +

    + +

    + +
    +
    + + + + 'sanitize_hex_color', 'default' => '']); + register_setting($group, 'wp_multi_login_logo', ['sanitize_callback' => 'esc_url_raw', 'default' => '']); + register_setting($group, 'wp_multi_login_logo_home', ['sanitize_callback' => 'absint', 'default' => 1]); + register_setting($group, 'wp_multi_login_bg_color', ['sanitize_callback' => 'sanitize_hex_color', 'default' => '']); + register_setting($group, 'wp_multi_login_bg_image', ['sanitize_callback' => 'esc_url_raw', 'default' => '']); + register_setting($group, 'wp_multi_login_bg_size', ['sanitize_callback' => 'wp_multi_login_design_sanitize_bg_size', 'default' => 'cover']); + register_setting($group, 'wp_multi_login_form_bg', ['sanitize_callback' => 'sanitize_hex_color', 'default' => '']); + register_setting($group, 'wp_multi_login_button', ['sanitize_callback' => 'sanitize_hex_color', 'default' => '']); + register_setting($group, 'wp_multi_login_link', ['sanitize_callback' => 'sanitize_hex_color', 'default' => '']); + register_setting($group, 'wp_multi_login_custom_css', ['sanitize_callback' => 'wp_multi_login_design_sanitize_css', 'default' => '']); +} +add_action('admin_init', 'wp_multi_login_design_register'); + +// Eigenes CSS grob absichern (kein -Ausbruch, keine Tags) +function wp_multi_login_design_sanitize_css($css) { + $css = (string) $css; + $css = wp_strip_all_tags($css); + return trim($css); +} + +// Anzeige-Art des Hintergrundbilds (Whitelist) +function wp_multi_login_design_sanitize_bg_size($value) { + $allowed = array('cover', 'contain', 'stretch', 'tile', 'center'); + return in_array($value, $allowed, true) ? $value : 'cover'; +} + +// Liefert die CSS-Regeln für die gewählte Hintergrund-Anzeigeart +function wp_multi_login_design_bg_rules($mode) { + switch ($mode) { + case 'contain': + return 'background-size:contain !important; background-repeat:no-repeat !important; background-position:center !important;'; + case 'stretch': + return 'background-size:100% 100% !important; background-repeat:no-repeat !important; background-position:center !important;'; + case 'tile': + return 'background-size:auto !important; background-repeat:repeat !important;'; + case 'center': + return 'background-size:auto !important; background-repeat:no-repeat !important; background-position:center !important;'; + case 'cover': + default: + return 'background-size:cover !important; background-repeat:no-repeat !important; background-position:center !important;'; + } +} + +/* + * Ausgabe auf der Login-Seite + */ +function wp_multi_login_design_styles() { + $form_text = get_option('wp_multi_login_form_text', ''); + $logo = get_option('wp_multi_login_logo', ''); + $bg_color = get_option('wp_multi_login_bg_color', ''); + $bg_image = get_option('wp_multi_login_bg_image', ''); + $form_bg = get_option('wp_multi_login_form_bg', ''); + $button = get_option('wp_multi_login_button', ''); + $link = get_option('wp_multi_login_link', ''); + $css = get_option('wp_multi_login_custom_css', ''); + + // Nur ausgeben, wenn überhaupt etwas konfiguriert ist + if (!$logo && !$bg_color && !$bg_image && !$form_bg && !$button && !$link && !$css && !$form_text) { + return; + } + + echo "\n"; +} +add_action('login_enqueue_scripts', 'wp_multi_login_design_styles'); + +// Logo-Link auf die eigene Startseite statt wordpress.org +function wp_multi_login_design_headerurl($url) { + return get_option('wp_multi_login_logo_home', 1) ? home_url('/') : $url; +} +add_filter('login_headerurl', 'wp_multi_login_design_headerurl'); + +// Logo-Titel = Seitenname +function wp_multi_login_design_headertext($text) { + return get_option('wp_multi_login_logo_home', 1) ? get_bloginfo('name') : $text; +} +add_filter('login_headertext', 'wp_multi_login_design_headertext'); + +/* + * Assets für die Einstellungsseite (Color-Picker + Medienauswahl) + */ +function wp_multi_login_design_admin_assets($hook) { + if ($hook !== 'wp-multi_page_wp_multi_login_design' && $hook !== 'toplevel_page_wp_multi_login_design') { + return; + } + wp_enqueue_style('wp-color-picker'); + wp_enqueue_script('wp-color-picker'); + wp_enqueue_media(); +} +add_action('admin_enqueue_scripts', 'wp_multi_login_design_admin_assets'); + +/* + * Einstellungsseite + */ +function wp_multi_login_design_page() { + if (!current_user_can('manage_options')) { + wp_die(__('Zugriff verweigert.', 'wp-multi')); + } + + wpmt_admin_page_open( + __('Login-Design', 'wp-multi'), + __('Die WordPress-Login-Seite nach deinen Wünschen gestalten', 'wp-multi') + ); + + $logo = get_option('wp_multi_login_logo', ''); + $bg_image = get_option('wp_multi_login_bg_image', ''); + + wpmt_admin_notice('info', sprintf( + __('Vorschau: %s (in neuem Tab öffnen – als eingeloggter Nutzer wirst du ggf. direkt weitergeleitet, dann kurz ausloggen).', 'wp-multi'), + '' . esc_html(wp_login_url()) . '' + )); + + wpmt_admin_card_open(__('Gestaltung', 'wp-multi')); + ?> +
    + + +
    + +
    + + +
    '; ?>
    +
    +
    + +
    + +
    +
    + +
    + +
    +
    + +
    + +
    + + +
    +
    + +
    + +
    + + +
    +
    + +
    + +
    +
    + +
    + +
    +
    + +
    + +
    +
    + +
    + +
    +
    + +
    + +
    +
    + + +
    + + + 404)); + } + exit; +} + +// Ersetzt "wp-login.php" in generierten URLs durch den eigenen Slug +function wp_multi_login_filter_url($url, $scheme = null) { + if (strpos($url, 'wp-login.php') === false) { + return $url; + } + if (is_ssl()) { + $scheme = 'https'; + } + $query = parse_url($url, PHP_URL_QUERY); + $args = array(); + if ($query) { + parse_str($query, $args); + } + $new = wp_multi_login_new_url($scheme); + if (!empty($args)) { + // add_query_arg kodiert selbst; parse_str liefert bereits dekodierte Werte. + $new = add_query_arg($args, $new); + } + return $new; +} + +function wp_multi_login_filter_site_url($url, $path, $scheme, $blog_id = null) { + return wp_multi_login_filter_url($url, $scheme); +} + +function wp_multi_login_filter_wp_redirect($location) { + return wp_multi_login_filter_url($location); +} + +// Registriert die Filter und den Request-Handler, sobald WordPress geladen ist +function wp_multi_login_init() { + if (!wp_multi_login_active()) { + return; + } + + add_filter('site_url', 'wp_multi_login_filter_site_url', 10, 4); + add_filter('network_site_url', 'wp_multi_login_filter_site_url', 10, 4); + add_filter('wp_redirect', 'wp_multi_login_filter_wp_redirect', 10, 1); + add_filter('login_url', 'wp_multi_login_filter_wp_redirect', 10, 1); + add_filter('logout_url', 'wp_multi_login_filter_wp_redirect', 10, 1); + add_filter('lostpassword_url', 'wp_multi_login_filter_wp_redirect', 10, 1); + add_filter('register_url', 'wp_multi_login_filter_wp_redirect', 10, 1); +} +add_action('plugins_loaded', 'wp_multi_login_init', 1); + +// Fängt die eingehende Anfrage ab: geheimer Slug lädt das Login, wp-login.php/wp-admin werden versteckt +function wp_multi_login_handle_request() { + if (!wp_multi_login_active()) { + return; + } + + // Systemendpunkte niemals blockieren + if ((defined('DOING_AJAX') && DOING_AJAX) || (defined('DOING_CRON') && DOING_CRON) || (defined('REST_REQUEST') && REST_REQUEST)) { + return; + } + + $uri = isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : ''; + $path = untrailingslashit((string) parse_url($uri, PHP_URL_PATH)); + $home_path = wp_multi_login_home_path(); + $login_path = $home_path . '/' . wp_multi_login_slug(); + + // 1) Aufruf des geheimen Slugs → echtes wp-login.php ausliefern + if ($path === $login_path) { + $GLOBALS['pagenow'] = 'wp-login.php'; + require_once ABSPATH . 'wp-login.php'; + exit; + } + + // 2) Direkter Aufruf von wp-login.php (nicht über den Slug) → verstecken + if (strpos($uri, 'wp-login.php') !== false) { + wp_multi_login_die_404(); + } + + // 3) Der gesamte /wp-admin-Bereich für nicht eingeloggte Besucher → verstecken, + // statt zum versteckten Login weiterzuleiten. admin-ajax.php und admin-post.php + // bleiben ausdrücklich erreichbar (auch für Gäste / nopriv-Aktionen). + if (!is_user_logged_in()) { + $admin_path = $home_path . '/wp-admin'; + $in_admin = ($path === $admin_path || strpos($path, $admin_path . '/') === 0); + $is_endpoint = (strpos($uri, 'admin-ajax.php') !== false || strpos($uri, 'admin-post.php') !== false); + if ($in_admin && !$is_endpoint) { + wp_multi_login_die_404(); + } + } +} +add_action('wp_loaded', 'wp_multi_login_handle_request'); + +// Einstellung registrieren (mit Sanitisierung gegen reservierte Slugs) +function wp_multi_login_register_setting() { + register_setting('wp_multi_login_url_group', 'wp_multi_login_slug', array( + 'type' => 'string', + 'sanitize_callback' => 'wp_multi_login_sanitize_slug', + 'default' => '', + )); +} +add_action('admin_init', 'wp_multi_login_register_setting'); + +function wp_multi_login_sanitize_slug($value) { + $value = sanitize_title(trim((string) $value, '/')); + $reserved = array('wp-admin', 'wp-login', 'wp-content', 'wp-includes', 'admin-ajax', 'admin-post', 'wp-json', 'index'); + if (in_array($value, $reserved, true)) { + add_settings_error('wp_multi_login_slug', 'reserved', __('Dieser Slug ist reserviert und kann nicht verwendet werden.', 'wp-multi')); + return ''; + } + return $value; +} + +// Admin-Seite "Login-URL" +function wp_multi_login_url_page() { + if (!current_user_can('manage_options')) { + wp_die(__('Zugriff verweigert.', 'wp-multi')); + } + + $slug = wp_multi_login_slug(); + $pretty = (bool) get_option('permalink_structure'); + + wpmt_admin_page_open( + __('Login-URL', 'wp-multi'), + __('Eigene Adresse für das Login / Admin-Panel festlegen', 'wp-multi') + ); + + if (is_multisite()) { + wpmt_admin_notice('error', __('Dieses Feature ist in einem Multisite-Netzwerk nicht verfügbar.', 'wp-multi')); + wpmt_admin_page_close(); + return; + } + + if (!$pretty) { + wpmt_admin_notice('warning', __('Für dieses Feature müssen „hübsche Permalinks" aktiviert sein (Einstellungen → Permalinks, nicht „Einfach"). Solange das nicht der Fall ist, bleibt die Login-URL unverändert.', 'wp-multi')); + } + + wpmt_admin_notice('warning', __('Achtung: Merke dir die neue Adresse gut! Wenn du sie vergisst, kommst du nicht mehr ins Backend und musst das Feld per Datenbank oder FTP zurücksetzen. Leeres Feld = Standard-Login (/wp-login.php) bleibt aktiv.', 'wp-multi')); + + if ($slug && $pretty) { + wpmt_admin_notice('success', sprintf( + __('Aktive Login-Adresse: %s', 'wp-multi'), + '' . esc_html(wp_multi_login_new_url()) . '' + )); + } + + wpmt_admin_card_open(__('Einstellung', 'wp-multi')); + ?> +
    + +
    + +
    + + +
    +
    + +
    + 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(WP_MULTI_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; + } + + global $wpdb; + $table_name = $wpdb->prefix . 'message_board'; + $created = false; + + // Nachricht erstellen (VOR der Ausgabe, damit sie sofort erscheint) + if (isset($_POST['submit_message']) && !empty($_POST['new_message'])) { + if (!isset($_POST['wp_multi_pinwand_nonce_field']) || !wp_verify_nonce(wp_unslash($_POST['wp_multi_pinwand_nonce_field']), 'wp_multi_pinwand_create_message')) { + wp_die(__('Ungültige oder abgelaufene Anfrage.', 'wp-multi')); + } + $wpdb->insert( + $table_name, + array( + 'message' => sanitize_textarea_field(wp_unslash($_POST['new_message'])), + 'user_id' => get_current_user_id(), + ) + ); + $created = true; + } + + $messages = $wpdb->get_results("SELECT * FROM $table_name ORDER BY created_at DESC"); + + wpmt_admin_page_open( + __('Pinwand', 'wp-multi'), + __('Interne Nachrichten für das Admin-Team', 'wp-multi') + ); + + if ($created) { + wpmt_admin_notice('success', __('Nachricht wurde erfolgreich erstellt.', 'wp-multi')); + } + + wpmt_admin_card_open(__('Neue Nachricht erstellen', 'wp-multi')); + ?> +
    + + +

    +
    + '; + foreach ($messages as $message) { + $user_info = get_userdata($message->user_id); + $author = $user_info ? $user_info->user_login : __('Unbekannt', 'wp-multi'); + printf( + '
    %s

    %s

    %s

    ', + (int) $message->id, + esc_html($author), + esc_html(date('d-m-Y H:i', strtotime($message->created_at))), + esc_html(wp_trim_words($message->message, 20)) + ); + } + echo ''; + } else { + wpmt_admin_notice('info', __('Keine Nachrichten vorhanden.', 'wp-multi')); + } + wpmt_admin_card_close(); + + wpmt_admin_page_close(); + ?> + + + + + prefix . 'message_board'; + $message_id = intval($_POST['message_id']); + $message = $wpdb->get_row($wpdb->prepare("SELECT * FROM $table_name WHERE id = %d", $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() { + check_ajax_referer('wp_multi_pinwand_nonce', 'nonce'); + + if (!current_user_can('administrator')) { + wp_die(); + } + + 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), array('%d')); + + 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(WP_MULTI_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.

    '; + } +} + + diff --git a/includes/notify-dashboard.php b/includes/notify-dashboard.php new file mode 100644 index 0000000..15d32fc --- /dev/null +++ b/includes/notify-dashboard.php @@ -0,0 +1,38 @@ +Telegram Nachrichten gesendet: ' . esc_html($telegram_message_count) . '

    '; + echo '

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

    '; +} + + diff --git a/includes/notify-discord.php b/includes/notify-discord.php new file mode 100644 index 0000000..1ae6ba3 --- /dev/null +++ b/includes/notify-discord.php @@ -0,0 +1,182 @@ + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    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)); + $content = get_post_field('post_content', $ID); + $excerpt = wp_trim_words($content, 60, '...'); + $role_id = get_option('wp_multi_discord_role_id'); + $mention_role = (!empty($role_id) && is_numeric($role_id)) ? "<@&" . esc_attr($role_id) . ">" : ''; + $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 + ) : ''; + + $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 + ); + $message .= "\n\n" . $excerpt . "\n\n" . $footer; + + $data = json_encode([ + 'username' => $bot_name, + 'avatar_url' => $avatar_url, + 'content' => $mention_role . "\n" . $message + ]); + + $response = wp_remote_post($webhook_url, [ + 'method' => 'POST', + 'body' => $data, + 'headers' => ['Content-Type' => 'application/json'] + ]); + + if (!is_wp_error($response)) { + wp_multi_increment_discord_message_count(); + } else { + error_log('Discord Webhook Fehler: ' . $response->get_error_message()); + } +} +add_action('publish_post', 'wp_multi_send_discord_notification', 10, 2); + +// 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); +} + +// Funktion, um die Checkbox in der Sidebar des Beitrag Editors hinzuzufügen +function wp_multi_add_checkbox_to_sidebar() { + global $post; + wp_nonce_field('wp_multi_checkbox_nonce', 'wp_multi_checkbox_nonce_field'); + $value = get_post_meta($post->ID, '_wp_multi_checkbox', true); + ?> +
    + +
    + +
    + +
    + '; +} +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(); + } + } 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(); + } + } + } + } +} + +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); +} + + diff --git a/includes/notify.php b/includes/notify.php new file mode 100644 index 0000000..1c0cbc3 --- /dev/null +++ b/includes/notify.php @@ -0,0 +1,59 @@ +'; + + wpmt_admin_card_open(__('Discord', 'wp-multi')); + ?> +

    +
      +
    1. +
    2. +
    3. +
    +

    + +

    +
      +
    1. +
    2. +
    3. +
    +

    + '; + + wpmt_admin_page_close(); +} + diff --git a/includes/post-report.php b/includes/post-report.php new file mode 100644 index 0000000..17a51e4 --- /dev/null +++ b/includes/post-report.php @@ -0,0 +1,338 @@ +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;"; + + // Tabelle zuerst erstellen bzw. aktualisieren - erst danach kann die + // Spaltenprüfung laufen (vorher schlug SHOW COLUMNS bei der Erstaktivierung fehl). + require_once(ABSPATH . 'wp-admin/includes/upgrade.php'); + dbDelta($sql); + + // Migration für Alt-Installationen: Spalte `name` ergänzen, falls sie fehlt + $columns = $wpdb->get_results("SHOW COLUMNS FROM $table_name"); + + $column_names = array_map(function($column) { + return $column->Field; + }, $columns); + + if (!in_array('name', $column_names, true)) { + $wpdb->query("ALTER TABLE $table_name ADD COLUMN `name` VARCHAR(255) NOT NULL"); + } +} + +register_activation_hook(WP_MULTI_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"); + + wpmt_admin_page_open( + __('Gemeldete Beiträge', 'wp-stat-notice'), + __('Von Besuchern gemeldete Inhalte prüfen und bearbeiten', 'wp-stat-notice') + ); + + wpmt_admin_card_open(); + if (empty($reports)) { + wpmt_admin_notice('info', __('Es liegen keine Meldungen vor.', 'wp-stat-notice')); + } else { + ?> +
    + + + + + + + + + + + + + post_id); ?> + + + + + + + + + + +
    post_title) : '—'; ?>report_date); ?>name); ?>reason); ?>status); ?> + + + +
    +
    + delete($wpdb->prefix . 'reported_posts', array('id' => intval($_GET['delete_report'])), array('%d')); + } elseif (isset($_GET['unpublish_report'])) { + check_admin_referer('wp_stat_notice_unpublish_report_' . intval($_GET['unpublish_report'])); + $wpdb->update($wpdb->prefix . 'reported_posts', array('status' => 'unpublished'), array('id' => intval($_GET['unpublish_report'])), array('%s'), array('%d')); + } elseif (isset($_GET['delete_post'])) { + check_admin_referer('wp_stat_notice_delete_post_' . intval($_GET['delete_post'])); + wp_delete_post(intval($_GET['delete_post']), true); + } +} +add_action('admin_init', 'wp_stat_notice_handle_report_actions'); + +// Der Menüpunkt "Gemeldete Beiträge" wird zentral in wp_multi_register_admin_menus() registriert. + + diff --git a/includes/shortcodes.php b/includes/shortcodes.php new file mode 100644 index 0000000..2a8cf90 --- /dev/null +++ b/includes/shortcodes.php @@ -0,0 +1,238 @@ +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( WP_MULTI_FILE, 'wp_multi_create_shortcodes_table' ); + +// Der Shortcodes-Menüpunkt wird zentral in wp_multi_register_admin_menus() registriert. + +// 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'])) { + check_admin_referer('wp_multi_save_shortcode', 'wp_multi_shortcode_nonce'); + + // Hole die übermittelten Shortcodes + $name = sanitize_key($_POST['wp_multi_shortcode_name']); + $content = wp_kses_post(wp_unslash($_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'])) { + check_admin_referer('wp_multi_delete_shortcode_' . intval($_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"); + + wpmt_admin_page_open( + __('Shortcodes', 'wp-multi'), + __('Eigene Shortcodes erstellen, die im Editor eingefügt werden können', 'wp-multi') + ); + + if (!empty($message)) { + wpmt_admin_notice('success', $message); + } + + wpmt_admin_card_open(__('Shortcode anlegen / aktualisieren', 'wp-multi')); + ?> +
    + +
    + + +
    +
    + + +
    + +
    + +
    + + + + + + + + + + id), + 'wp_multi_delete_shortcode_' . $shortcode->id + ); + ?> + + + + + + + +
    [shortcode_name); ?>]shortcode_content, 15)); ?>
    +
    + 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 wp_kses_post($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 (Classic Editor: fügt den gewählten Shortcode ein) +function wp_multi_enqueue_admin_scripts($hook) { + if ('post.php' === $hook || 'post-new.php' === $hook) { + wp_enqueue_script('wp-multi-shortcode', plugin_dir_url(WP_MULTI_FILE) . 'js/classic-editor-shortcodes.js', array('jquery'), '1.0', 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(WP_MULTI_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(WP_MULTI_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'); + + diff --git a/includes/statistik-manager.php b/includes/statistik-manager.php new file mode 100644 index 0000000..1528919 --- /dev/null +++ b/includes/statistik-manager.php @@ -0,0 +1,510 @@ + + + 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 = 0; + if (taxonomy_exists('series')) { + $count = wp_count_terms('series'); + $series_count = is_wp_error($count) ? 0 : (int) $count; + } + + // 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:
    ' . esc_html($statistics['posts_count']) . '

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

    Kommentare:
    ' . esc_html($statistics['comments_count']) . '

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

    Kategorien:
    ' . esc_html($statistics['categories_count']) . '

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

    Serien:
    ' . esc_html($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 +// Das frühere seitenspezifische admin-style.css wurde durch das gemeinsame +// Design-System (wp-multi-toolkit/assets/admin.css) ersetzt. + +// 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', WP_MULTI_FILE)); + } +} +add_action('wp_enqueue_scripts', 'statistik_manager_enqueue_frontend_styles'); + +// Der Menüpunkt "Statistik & Notice" wird zentral in wp_multi_register_admin_menus() registriert. + +// Funktion für die Plugin-Optionen-Seite +function statistik_manager_options_page() { + wpmt_admin_page_open( + __('Statistik & Notice', 'statistik-manager'), + __('Statistik-Shortcode, Lesezeichen und Frontend-Banner konfigurieren', 'statistik-manager') + ); + + wpmt_admin_card_open(__('Einstellungen', 'statistik-manager')); + ?> +
    + +

    + + + + + +
    + /> +
    + /> +
    + /> +
    + /> + +
    + +

    + + + + + +
    + '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 + +
    + + +
    + '; + + wpmt_admin_card_open(__('Kurzanleitung: Statistik-Box', 'statistik-manager')); + ?> +
      +
    1. Shortcode einfügen: Füge [statistik_manager] an der gewünschten Stelle in einem Beitrag oder einer Seite ein.
    2. +
    3. Statistiken wählen: Beiträge, Kommentare, Kategorien und Serien lassen sich einzeln ein- und ausblenden.
    4. +
    5. Kategorien: Wähle aus, welche Kategorien in die Zählung einbezogen werden.
    6. +
    7. Eröffnungsdatum: Wird automatisch in der Statistik-Box angezeigt.
    8. +
    9. Banner: Ein konfigurierbares Hinweis-Banner kann im Header oder Footer der Website eingeblendet werden.
    10. +
    + +
      +
    1. Anzeigen: Der Shortcode [display_bookmarks] listet die gespeicherten Lesezeichen der Besucher auf.
    2. +
    3. Hinzufügen: Über [add_bookmark] erhalten Besucher ein Formular zum Speichern eines Lesezeichens.
    4. +
    5. Löschen: Nur der Besitzer eines Lesezeichens kann es über den Löschen-Button entfernen.
    6. +
    +

    git.viper.ipv64.net'); ?>

    + '; + + wpmt_admin_page_close(); +} + +// Optionen registrieren +function statistik_manager_register_settings() { + register_setting('statistik_manager_settings_group', 'statistik_manager_show_posts'); + register_setting('statistik_manager_settings_group', 'statistik_manager_show_comments'); + register_setting('statistik_manager_settings_group', 'statistik_manager_show_categories'); + register_setting('statistik_manager_settings_group', 'statistik_manager_show_series'); + register_setting('statistik_manager_settings_group', 'statistik_manager_selected_categories'); + register_setting('statistik_manager_settings_group', 'statistik_manager_opening_date'); + register_setting('statistik_manager_settings_group', 'statistik_manager_banner_text'); + register_setting('statistik_manager_settings_group', 'statistik_manager_banner_color', [ + 'sanitize_callback' => 'sanitize_hex_color', + ]); + register_setting('statistik_manager_settings_group', 'statistik_manager_banner_position'); + register_setting('statistik_manager_settings_group', 'statistik_manager_banner_enabled'); + register_setting('statistik_manager_settings_group', 'statistik_manager_banner_icon', [ + 'sanitize_callback' => function($value) { + // Icon-Wert besteht aus mehreren space-getrennten CSS-Klassen (z. B. "fas fa-bell") + $classes = array_map('sanitize_html_class', explode(' ', (string) $value)); + return implode(' ', array_filter($classes)); + }, + ]); + register_setting('statistik_manager_settings_group', 'statistik_manager_show_icon'); + register_setting('statistik_manager_settings_group', 'statistik_manager_banner_font_size'); + +} +add_action('admin_init', 'statistik_manager_register_settings'); + +// Standardwerte setzen +function statistik_manager_set_default_options() { + if (get_option('statistik_manager_show_posts') === false) { + update_option('statistik_manager_show_posts', 1); + } + if (get_option('statistik_manager_show_comments') === false) { + update_option('statistik_manager_show_comments', 1); + } + if (get_option('statistik_manager_show_categories') === false) { + update_option('statistik_manager_show_categories', 1); + } + if (get_option('statistik_manager_show_series') === false) { + update_option('statistik_manager_show_series', 1); + } + if (get_option('statistik_manager_selected_categories') === false) { + update_option('statistik_manager_selected_categories', []); + } + if (get_option('statistik_manager_banner_enabled') === false) { + update_option('statistik_manager_banner_enabled', 1); + } + if (get_option('statistik_manager_banner_font_size') === false) { + update_option('statistik_manager_banner_font_size', 'medium'); +} + +} +add_action('admin_init', 'statistik_manager_set_default_options'); \ No newline at end of file diff --git a/includes/update-check.php b/includes/update-check.php new file mode 100644 index 0000000..d8356af --- /dev/null +++ b/includes/update-check.php @@ -0,0 +1,142 @@ + 10, + 'headers' => array('Accept' => 'application/json'), + )); + + if (is_wp_error($response)) { + // Kurz erneut versuchen statt für 12 Stunden zu sperren + set_transient(WP_MULTI_UPDATE_CACHE_KEY, false, HOUR_IN_SECONDS); + return false; + } + + $body = wp_remote_retrieve_body($response); + $releases = json_decode($body, true); + + if (empty($releases) || !is_array($releases)) { + set_transient(WP_MULTI_UPDATE_CACHE_KEY, false, HOUR_IN_SECONDS); + return false; + } + + usort($releases, function ($a, $b) { + $a_date = !empty($a['created_at']) ? $a['created_at'] : ''; + $b_date = !empty($b['created_at']) ? $b['created_at'] : ''; + return strtotime($b_date) - strtotime($a_date); + }); + + $latest = false; + foreach ($releases as $release) { + if (!empty($release['prerelease'])) { + continue; + } + if (!empty($release['tag_name'])) { + // Nur Download-URLs auf dem erwarteten Host akzeptieren + $html_url = !empty($release['html_url']) ? $release['html_url'] : ''; + $release_host = $html_url ? wp_parse_url($html_url, PHP_URL_HOST) : ''; + $latest = array( + 'version' => ltrim($release['tag_name'], 'v'), + 'url' => ($release_host === WP_MULTI_UPDATE_HOST) + ? esc_url_raw($html_url) + : 'https://' . WP_MULTI_UPDATE_HOST . '/M_Viper/' . WP_MULTI_UPDATE_REPO . '/releases', + ); + break; + } + } + + set_transient(WP_MULTI_UPDATE_CACHE_KEY, $latest, 12 * HOUR_IN_SECONDS); + return $latest; +} + +// Liest die installierte Version aus dem Plugin-Header +function wp_multi_get_installed_version() { + if (!function_exists('get_plugin_data')) { + require_once ABSPATH . 'wp-admin/includes/plugin.php'; + } + $data = get_plugin_data(WP_MULTI_FILE, false, false); + return !empty($data['Version']) ? $data['Version'] : '0'; +} + +// Dashboard-Widget registrieren +function wp_multi_add_update_dashboard_widget() { + wp_add_dashboard_widget( + 'wp_multi_update_widget', + __('WP Multi - Update-Status', 'wp-multi'), + 'wp_multi_update_dashboard_widget_content' + ); +} +add_action('wp_dashboard_setup', 'wp_multi_add_update_dashboard_widget'); + +// Zeigt im Dashboard-Widget an, ob WP Multi aktuell ist oder ein Update verfügbar ist +function wp_multi_update_dashboard_widget_content() { + $installed_version = wp_multi_get_installed_version(); + $latest = wp_multi_get_latest_release(); + + echo '

    ' . esc_html__('Installierte Version:', 'wp-multi') . ' ' . esc_html($installed_version) . '

    '; + + if (!$latest || empty($latest['version'])) { + echo '

    ' . esc_html__('Der Update-Server konnte nicht erreicht werden.', 'wp-multi') . '

    '; + return; + } + + if (version_compare($latest['version'], $installed_version, '>')) { + echo '

    ' . esc_html__('Update verfügbar:', 'wp-multi') . ' ' . esc_html($latest['version']) . '

    '; + echo '

    ' . esc_html__('Update herunterladen', 'wp-multi') . '

    '; + } else { + echo '

    ' . esc_html__('WP Multi ist aktuell.', 'wp-multi') . '

    '; + } +} + +// Admin-Hinweis anzeigen, wenn ein Update verfügbar ist +function wp_multi_update_admin_notice() { + if (!current_user_can('manage_options') || !is_admin()) { + return; + } + + $installed_version = wp_multi_get_installed_version(); + $latest = wp_multi_get_latest_release(); + + if (!$latest || empty($latest['version'])) { + return; + } + + if (version_compare($latest['version'], $installed_version, '>')) { + printf( + '

    %1$s %3$s

    ', + sprintf( + esc_html__('Für "WP Multi" ist ein Update verfügbar: Version %1$s (installiert: %2$s).', 'wp-multi'), + esc_html($latest['version']), + esc_html($installed_version) + ), + esc_url($latest['url']), + esc_html__('Jetzt herunterladen', 'wp-multi') + ); + } +} +add_action('admin_notices', 'wp_multi_update_admin_notice'); + + diff --git a/wp-multi.php b/wp-multi.php index 752f831..b43b4f7 100644 --- a/wp-multi.php +++ b/wp-multi.php @@ -1,5220 +1,108 @@ - -
    -

    - - - - -

    -
    - -

    %s %s %s %s

    -

    %s: %s %s %s %s %s

    - ', - esc_html__('Danke, dass du WP Multi verwendest!', 'wp-multi'), - esc_html__('Dein Feedback hilft uns, das Plugin ständig zu verbessern. Wenn du Fehler entdeckst oder Verbesserungsvorschläge hast, besuche bitte unsere', 'wp-multi'), - 'https://git.viper.ipv64.net/M_Viper/wp-multi', - esc_html__('Gitea-Seite', 'wp-multi'), - esc_html__('und teile uns deine Ideen mit!', 'wp-multi'), - esc_html__('Support', 'wp-multi'), - esc_html__('Bei Fragen oder Supportanfragen kannst du uns über', 'wp-multi'), - 'https://teams.live.com/l/community/FEAzokphpZTJ2u6OgI', - esc_html__('Microsoft Teams', 'wp-multi'), - esc_html__('oder', 'wp-multi'), - 'https://t.me/M_Viper04', - esc_html__('Telegram', 'wp-multi'), - esc_html__('erreichen.', 'wp-multi') - ); - } - 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' => sprintf( - '%s', - esc_url('https://teams.live.com/l/community/FEAzokphpZTJ2u6OgI'), - esc_html__('Microsoft Teams Support', 'wp-multi') - ), - 'support_telegram' => sprintf( - '%s', - esc_url('https://t.me/M_Viper04'), - esc_html__('Telegram Support', 'wp-multi') - ), - ); - $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(); - ?> - -
    - - - - - -
    -

    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 ); - - -/* - * Verbessertes Auto-Tag-Plugin mit optimierter Sicherheit, Performance und Benutzerfreundlichkeit - */ - -define('WP_MULTI_AUTO_TAGS_OPTION', 'wp_multi_custom_stopwords'); -define('WP_MULTI_AUTO_TAGS_QUEUE', 'wp_multi_auto_tags_queue'); -define('WP_MULTI_AUTO_TAGS_NONCE', 'wp_multi_auto_tags_nonce'); - -/** - * Fügt automatische Tags zu einem Beitrag hinzu. - * - * @param int $post_id ID des Beitrags. - */ -function wp_multi_auto_add_tags($post_id) { - if (get_post_type($post_id) !== 'post') { - return; - } - - $existing_tags = wp_get_post_tags($post_id, ['fields' => 'names']); - if (!empty($existing_tags)) { - return; - } - - $post = get_post($post_id); - if (!$post) { - error_log("WP Multi Auto Tags: Beitrag $post_id nicht gefunden."); - return; - } - - $content = strip_tags($post->post_content); - $content = mb_strtolower($content, 'UTF-8'); - - // Stopwörter laden - $stopwords = wp_multi_get_stopwords(); - $words = wp_multi_extract_words($content, $stopwords); - - if (empty($words)) { - return; - } - - $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, $top_tags, true); - } -} - -/** - * Extrahiert relevante Wörter aus dem Inhalt. - * - * @param string $content Der Inhalt des Beitrags. - * @param array $stopwords Liste der Stopwörter. - * @return array Liste der extrahierten Wörter. - */ -function wp_multi_extract_words($content, $stopwords) { - preg_match_all('/\b[a-zäöüß]{4,}\b/u', $content, $matches); - return array_unique(array_diff($matches[0], $stopwords)); -} - -/** - * Lädt die kombinierten Stopwörter (Standard + benutzerdefiniert). - * - * @return array Liste der Stopwörter. - */ -function wp_multi_get_stopwords() { - $cache_key = 'wp_multi_stopwords'; - $stopwords = get_transient($cache_key); - - if ($stopwords !== false) { - return $stopwords; - } - - $custom_stopwords = get_option(WP_MULTI_AUTO_TAGS_OPTION, ''); - $custom_stopwords = array_filter(array_map('trim', explode(',', sanitize_text_field($custom_stopwords)))); - - $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' - ]; - - $stopwords = array_merge($default_stopwords, $custom_stopwords); - set_transient($cache_key, $stopwords, DAY_IN_SECONDS); - return $stopwords; -} - -/** - * Fügt das Admin-Menü für automatische Tags hinzu. - */ -function wp_multi_admin_menu() { - add_submenu_page( - 'edit.php', - __('Automatische Tags', 'wp-multi'), - __('Automatische Tags', 'wp-multi'), - 'manage_options', - 'wp-multi-auto-tags', - 'wp_multi_auto_tags_page' - ); -} -add_action('admin_menu', 'wp_multi_admin_menu'); - -/** - * Rendert die Admin-Seite für automatische Tags. - */ -function wp_multi_auto_tags_page() { - if (!current_user_can('manage_options')) { - wp_die(__('Zugriff verweigert.', 'wp-multi')); - } - - ?> -
    -
    - M_Viper Logo -

    -
    - -

    - -
    - -

    -
    - -
    - -

    -

    -
    - - -
    -
    0%
    -
    -

    -
    - - admin_url('admin-ajax.php'), - 'nonce' => wp_create_nonce(WP_MULTI_AUTO_TAGS_NONCE), - 'messages' => [ - 'processing' => __('Wird verarbeitet...', 'wp-multi'), - 'run' => __('Jetzt ausführen', 'wp-multi'), - 'loading' => __('Lade...', 'wp-multi'), - 'no_posts' => __('Keine Beiträge gefunden.', 'wp-multi'), - 'success' => __('Automatische Tags erfolgreich hinzugefügt!', 'wp-multi'), - 'error' => __('Fehler bei der Verarbeitung.', 'wp-multi'), - 'start_error' => __('Fehler beim Starten der Verarbeitung.', 'wp-multi'), - ], - ]); - ?> - - function($input) { - $input = sanitize_text_field($input); - return implode(',', array_map('trim', explode(',', $input))); - }, - ]); -} -add_action('admin_init', 'wp_multi_auto_tags_settings_init'); - -/** - * Verarbeitet die Initialisierung der Auto-Tag-Verarbeitung via AJAX. - */ -function wp_multi_process_auto_tags() { - check_ajax_referer(WP_MULTI_AUTO_TAGS_NONCE, 'nonce'); - - $args = [ - 'post_type' => 'post', - 'posts_per_page' => 100, - 'fields' => 'ids', - 'no_found_rows' => true, // Optimierung - ]; - - $posts = get_posts($args); - if (empty($posts)) { - wp_send_json_success(['total' => 0]); - } - - set_transient(WP_MULTI_AUTO_TAGS_QUEUE, $posts, 300); - wp_send_json_success(['total' => count($posts)]); -} -add_action('wp_ajax_wp_multi_process_auto_tags', 'wp_multi_process_auto_tags'); - -/** - * Verarbeitet einen Batch von Beiträgen für die Auto-Tag-Verarbeitung. - */ -function wp_multi_process_auto_tags_step() { - check_ajax_referer(WP_MULTI_AUTO_TAGS_NONCE, 'nonce'); - - $queue = get_transient(WP_MULTI_AUTO_TAGS_QUEUE); - $batchSize = isset($_POST['batchSize']) ? absint($_POST['batchSize']) : 10; - $batchSize = max(1, min($batchSize, 50)); - - if (!$queue || empty($queue)) { - wp_send_json_success(['done' => false]); - } - - set_time_limit(30); // Timeout verhindern - $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_success(['done' => true]); -} -add_action('wp_ajax_wp_multi_process_auto_tags_step', 'wp_multi_process_auto_tags_step'); - -/** - * Fügt Tags automatisch bei neuen oder aktualisierten Beiträgen hinzu. - * - * @param int $post_id ID des Beitrags. - */ -function wp_multi_auto_tag_on_save($post_id) { - if (wp_is_post_autosave($post_id) || wp_is_post_revision($post_id)) { - return; - } - - wp_multi_auto_add_tags($post_id); -} -add_action('save_post', 'wp_multi_auto_tag_on_save', 10, 1); - - - -/* -* 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

    -
    - -
    - - - - - - - - - - - - - - - - - - - - - - - - - -
    StatistikWert
    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'; - $user = get_user_by('login', $username); - $max_attempts = 3; - $block_threshold = 5; - - $row = $wpdb->get_row($wpdb->prepare("SELECT * FROM $table_name WHERE ip = %s", $ip)); - - if ($row) { - $wpdb->update( - $table_name, - array( - 'attempts' => $row->attempts + 1, - 'last_attempt' => current_time('mysql'), - ), - array('ip' => $ip), - array('%d', '%s'), - array('%s') - ); - $attempts = $row->attempts + 1; - } else { - $wpdb->insert( - $table_name, - array( - 'ip' => $ip, - 'attempts' => 1, - 'last_attempt' => current_time('mysql'), - ), - array('%s', '%d', '%s') - ); - $attempts = 1; - } - - if ($attempts >= $block_threshold) { - $email_sent = (int) get_option('failed_login_email_sent_' . $ip, 0); - - if ($email_sent < $max_attempts) { - if ($user) { - wp_mail( - $user->user_email, - __('Deine IP-Adresse wurde gesperrt', 'wp-multi'), - sprintf( - __("Hallo %s,\n\nDeine IP-Adresse wurde aufgrund zu vieler fehlgeschlagener Anmeldeversuche gesperrt. Bitte kontaktiere den Administrator.", 'wp-multi'), - $user->user_login - ), - array('Content-Type: text/plain; charset=UTF-8') - ); - } - update_option('failed_login_email_sent_' . $ip, $email_sent + 1); - } - - wp_die( - __('Deine IP-Adresse wurde aufgrund zu vieler Fehlversuche gesperrt. Bitte versuche es später noch einmal.', 'wp-multi'), - __('Zugriff gesperrt', 'wp-multi'), - array('response' => 403) - ); - } -} - -// Hook für fehlgeschlagene Anmeldungen -add_action('wp_login_failed', 'wp_multi_log_failed_login', 10, 1); - -// Funktion zur Erstellung der Tabelle für blockierte IPs -function wp_multi_create_blocked_ips_table() { - global $wpdb; - - $table_name = $wpdb->prefix . 'blocked_ips'; - $charset_collate = $wpdb->get_charset_collate(); - $version = get_option('wp_multi_blocked_ips_version', '1.0'); - - if (version_compare($version, '1.1', '<')) { - $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), - KEY ip (ip) - ) $charset_collate;"; - - require_once ABSPATH . 'wp-admin/includes/upgrade.php'; - dbDelta($sql); - update_option('wp_multi_blocked_ips_version', '1.1'); - } -} -register_activation_hook(__FILE__, 'wp_multi_create_blocked_ips_table'); - -// Wöchentliche Zusammenfassung -function wp_multi_send_weekly_summary() { - global $wpdb; - $table_name = $wpdb->prefix . 'blocked_ips'; - - $last_email_time = get_option('wp_multi_last_summary_email', 0); - $current_time = time(); - - // Prüfen, ob eine Woche vergangen ist (7 Tage = 604800 Sekunden) - if (($current_time - $last_email_time) < 604800) { - return; - } - - // Zeitraum für die Zusammenfassung (letzte Woche) - $week_ago = date('Y-m-d H:i:s', strtotime('-7 days')); - $now = date('Y-m-d H:i:s'); - - // Gesamtzahl der Angriffe - $total_attacks = $wpdb->get_var( - $wpdb->prepare( - "SELECT SUM(attempts) FROM $table_name WHERE last_attempt >= %s", - $week_ago - ) - ); - $total_attacks = $total_attacks ? $total_attacks : 0; - - // Top 10 IPs mit den meisten Angriffen - $top_ips = $wpdb->get_results( - $wpdb->prepare( - "SELECT ip, attempts, last_attempt - FROM $table_name - WHERE last_attempt >= %s - ORDER BY attempts DESC - LIMIT 10", - $week_ago - ) - ); - - // E-Mail-Inhalt - $message = __("Wöchentliche Brute-Force-Zusammenfassung\n\n", 'wp-multi'); - $message .= sprintf(__("Zeitraum: %s bis %s\n\n", 'wp-multi'), $week_ago, $now); - $message .= sprintf(__("Gesamtzahl der Angriffe: %d\n\n", 'wp-multi'), $total_attacks); - $message .= __("Top 10 IPs mit den meisten Angriffen:\n", 'wp-multi'); - - if ($top_ips) { - foreach ($top_ips as $index => $ip) { - $message .= sprintf( - __("%d. IP: %s, Versuche: %d, Letzter Versuch: %s\n", 'wp-multi'), - $index + 1, - $ip->ip, - $ip->attempts, - $ip->last_attempt - ); - } - } else { - $message .= __("Keine IPs mit Angriffen in diesem Zeitraum.\n", 'wp-multi'); - } - - // E-Mail an Admin senden - $admin_email = get_option('admin_email'); - wp_mail( - $admin_email, - __('Wöchentliche Brute-Force-Zusammenfassung', 'wp-multi'), - $message, - array('Content-Type: text/plain; charset=UTF-8') - ); - - // Aktualisiere den Zeitstempel der letzten E-Mail - update_option('wp_multi_last_summary_email', $current_time); -} - -// Planen der wöchentlichen Zusammenfassung (jeden Montag um 8:00 Uhr) -function wp_multi_schedule_weekly_summary() { - if (!wp_next_scheduled('wp_multi_weekly_summary_event')) { - wp_schedule_event(strtotime('next Monday 08:00'), 'weekly', 'wp_multi_weekly_summary_event'); - } -} -add_action('wp', 'wp_multi_schedule_weekly_summary'); - -// Hook für die Ausführung der Zusammenfassung -add_action('wp_multi_weekly_summary_event', 'wp_multi_send_weekly_summary'); - -// Menüpunkt für blockierte IPs -function wp_multi_blocked_ips_menu() { - add_submenu_page( - 'wp-multi-security', - __('Blockierte IPs', 'wp-multi'), - __('Blockierte IPs', 'wp-multi'), - 'manage_options', - 'wp_multi_blocked_ips', - 'wp_multi_display_blocked_ips' - ); -} -add_action('admin_menu', 'wp_multi_blocked_ips_menu'); - -// Anzeige der blockierten IPs im Admin-Bereich -function wp_multi_display_blocked_ips() { - global $wpdb; - $table_name = $wpdb->prefix . 'blocked_ips'; - - $five_days_ago = date('Y-m-d H:i:s', strtotime('-5 days')); - $per_page = 50; - $page = max(1, isset($_GET['paged']) ? intval($_GET['paged']) : 1); - $offset = ($page - 1) * $per_page; - - $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 - ) - ); - - $total_ips = $wpdb->get_var($wpdb->prepare("SELECT COUNT(*) FROM $table_name WHERE last_attempt >= %s", $five_days_ago)); - $total_pages = ceil($total_ips / $per_page); - - ?> -
    -

    - -

    - - - - - - - - - - - - - - - - - - - - - - -
    id); ?>ip); ?>attempts); ?>last_attempt); ?> - - - -
    - - 1) : ?> -
    -
    - add_query_arg('paged', '%#%'), - 'format' => '', - 'prev_text' => __('«'), - 'next_text' => __('»'), - 'total' => $total_pages, - 'current' => $page, - )); - ?> -
    -
    - - - - query( - $wpdb->prepare( - "DELETE FROM $table_name WHERE attempts < 10 AND last_attempt < %s", - $three_days_ago - ) - ); - ?> -
    - 403)); - } - - global $wpdb; - $id = isset($_GET['id']) ? intval($_GET['id']) : 0; - - if ($id > 0) { - $table_name = $wpdb->prefix . 'blocked_ips'; - $wpdb->delete($table_name, array('id' => $id), array('%d')); - } - - wp_safe_redirect(admin_url('admin.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 mit verbesserten Sicherheits-, Performance- und Benutzerfreundlichkeits-Features - */ - - -define('WP_MULTI_ANALYTICS_TABLE', $wpdb->prefix . 'wp_multi_user_analytics'); - -/** - * Erstellt die Datenbanktabelle für Benutzer-Analytics. - */ -function wp_multi_create_analytics_table() { - global $wpdb; - $table_name = WP_MULTI_ANALYTICS_TABLE; - $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), - INDEX idx_timestamp (timestamp), - INDEX idx_action (action) - ) $charset_collate;"; - - require_once ABSPATH . 'wp-admin/includes/upgrade.php'; - dbDelta($sql); -} -register_activation_hook(__FILE__, 'wp_multi_create_analytics_table'); - -/** - * Verfolgt Benutzerinteraktionen (Kommentare und Beitragsaufrufe). - * - * @param int $user_id Benutzer-ID. - * @param string $action Aktion (z. B. 'view', 'comment'). - * @param int $post_id Beitrag-ID (optional). - * @return bool Erfolg der Operation. - */ -function wp_multi_track_user_activity($user_id, $action, $post_id = null) { - global $wpdb; - $table_name = WP_MULTI_ANALYTICS_TABLE; - - $user_id = absint($user_id); - $action = sanitize_text_field($action); - $post_id = $post_id ? absint($post_id) : null; - - if ($action === 'view' && is_single()) { - $post_id = get_the_ID(); - } - - if (!$user_id || !$action) { - return false; - } - - return $wpdb->insert( - $table_name, - array( - 'user_id' => $user_id, - 'action' => $action, - 'post_id' => $post_id, - ), - array('%d', '%s', '%d') - ); -} - -/** - * Verfolgt Kommentar-Aktivitäten. - * - * @param int $comment_id Kommentar-ID. - */ -function wp_multi_comment_activity($comment_id) { - $comment = get_comment($comment_id); - $user_id = absint($comment->user_id); - if ($user_id) { - wp_multi_track_user_activity($user_id, 'comment', $comment->comment_post_ID); - } -} -add_action('comment_post', 'wp_multi_comment_activity'); - -/** - * Verfolgt Beitragsaufrufe. - */ -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'); - -/** - * Ruft rohe Analytics-Daten aus der Datenbank ab. - * - * @param string $date_query Datum für die Abfrage. - * @return array Rohe Analytics-Daten. - */ -function wp_multi_fetch_raw_analytics($date_query = 'CURDATE() - INTERVAL 7 DAY') { - global $wpdb; - return $wpdb->get_results( - $wpdb->prepare( - "SELECT DATE(timestamp) AS date, action, post_id, COUNT(*) AS count, user_id, timestamp - FROM " . WP_MULTI_ANALYTICS_TABLE . " - WHERE timestamp >= %s - GROUP BY date, action, post_id, user_id, timestamp - ORDER BY date ASC", - date('Y-m-d H:i:s', strtotime($date_query)) - ) - ); -} - -/** - * Verarbeitet rohe Analytics-Daten für Diagramm und Tabelle. - * - * @param array $results Rohe Analytics-Daten. - * @return array Verarbeitete Daten. - */ -function wp_multi_process_analytics_data($results) { - $dates = []; - $comment_counts = []; - $view_counts = []; - - foreach ($results as $result) { - $date = $result->date; - if (!in_array($date, $dates)) { - $dates[] = $date; - } - if ($result->action === 'comment') { - $comment_counts[$date] = ($comment_counts[$date] ?? 0) + $result->count; - } elseif ($result->action === 'view') { - $view_counts[$date] = ($view_counts[$date] ?? 0) + $result->count; - } - } - - $all_dates = []; - $datasets = ['comments' => [], 'views' => []]; - - for ($i = 6; $i >= 0; $i--) { - $date = date('Y-m-d', strtotime("-$i day")); - $all_dates[] = $date; - $datasets['comments'][] = $comment_counts[$date] ?? 0; - $datasets['views'][] = $view_counts[$date] ?? 0; - } - - return [ - 'dates' => array_reverse($all_dates), - 'datasets' => [ - [ - 'label' => __('Kommentare', 'wp-multi'), - 'data' => array_reverse($datasets['comments']), - 'borderColor' => 'rgba(75, 192, 192, 1)', - 'borderWidth' => 1, - 'fill' => false, - ], - [ - 'label' => __('Beitragsaufrufe', 'wp-multi'), - 'data' => array_reverse($datasets['views']), - 'borderColor' => 'rgba(153, 102, 255, 1)', - 'borderWidth' => 1, - 'fill' => false, - ] - ], - 'data' => $results - ]; -} - -/** - * Ruft Analytics-Daten mit Caching ab. - * - * @param string $date_query Datum für die Abfrage. - * @return array Analytics-Daten. - */ -function wp_multi_get_analytics_data($date_query = 'CURDATE() - INTERVAL 7 DAY') { - $cache_key = 'wp_multi_analytics_data_' . md5($date_query); - $cached_data = get_transient($cache_key); - - if ($cached_data !== false) { - return $cached_data; - } - - $results = wp_multi_fetch_raw_analytics($date_query); - $data = wp_multi_process_analytics_data($results); - - set_transient($cache_key, $data, HOUR_IN_SECONDS); - return $data; -} - -/** - * Zeigt die Benutzer-Analytics-Seite im Admin-Bereich an. - */ -function wp_multi_display_user_analytics() { - global $wpdb; - - if (!$wpdb->get_var("SHOW TABLES LIKE '" . WP_MULTI_ANALYTICS_TABLE . "'")) { - echo '

    ' . esc_html__('Die Analytics-Tabelle existiert nicht. Bitte aktiviere das Plugin erneut.', 'wp-multi') . '

    '; - return; - } - - $time_range = isset($_GET['time_range']) ? sanitize_text_field($_GET['time_range']) : '7days'; - $date_query = 'CURDATE() - INTERVAL 7 DAY'; - if ($time_range === '30days') { - $date_query = 'CURDATE() - INTERVAL 30 DAY'; - } elseif ($time_range === 'custom' && isset($_GET['start_date'], $_GET['end_date'])) { - $start_date = sanitize_text_field($_GET['start_date']); - $end_date = sanitize_text_field($_GET['end_date']); - $date_query = "$start_date AND $end_date"; - } - - $results = wp_multi_get_analytics_data($date_query); - - ?> -
    -
    - Logo -

    -
    - -
    - - - - - - - -
    - - -

    - - - - - - - - - - - - - - - - - $row) : ?> - - - - - - - - - -
    user_id); ?>action); ?> - post_id) { - $post_title = get_the_title($row->post_id); - echo esc_html($post_title ?: __('Kein Titel verfügbar', 'wp-multi')); - } else { - echo esc_html__('Kein Beitrag', 'wp-multi'); - } - ?> - post_id ?: '-'); ?>timestamp); ?>
    - -
    - 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' ); - -function wp_multi_block_user($username = '', $email = '', $ip_address = '') { - global $wpdb; - if (empty($username) && empty($email) && empty($ip_address)) { - return false; - } - $result = $wpdb->insert( - $wpdb->prefix . 'blocked_users', - [ - 'username' => $username, - 'email' => $email, - 'ip_address' => $ip_address - ] - ); - return $result !== false; -} - -function wp_multi_delete_blocked_user($id) { - global $wpdb; - return $wpdb->delete($wpdb->prefix . 'blocked_users', ['id' => $id], ['%d']); -} - -function wp_multi_register_blocked_users_page() { - add_menu_page( - 'Gesperrte Benutzer', - 'Gesperrte Benutzer', - 'manage_options', - 'wp-multi-blocked-users', - 'wp_multi_blocked_users_page', - 'dashicons-shield', - 80 - ); -} -add_action('admin_menu', 'wp_multi_register_blocked_users_page'); - -function wp_multi_blocked_users_page() { - global $wpdb; - - if (isset($_POST['block_username']) || isset($_POST['block_email']) || isset($_POST['block_ip'])) { - check_admin_referer('wp_multi_block_user'); - $username = sanitize_text_field($_POST['block_username']); - $email = sanitize_email($_POST['block_email']); - $ip_address = sanitize_text_field($_POST['block_ip']); - if (wp_multi_block_user($username, $email, $ip_address)) { - echo '

    Benutzer wurde gesperrt!

    '; - } else { - echo '

    Fehler beim Sperren des Benutzers!

    '; - } - } - - if (isset($_GET['delete']) && isset($_GET['_wpnonce'])) { - if (wp_verify_nonce($_GET['_wpnonce'], 'wp_multi_delete_user_' . $_GET['delete'])) { - $user_id = intval($_GET['delete']); - if ($user_id > 0 && wp_multi_delete_blocked_user($user_id)) { - echo '

    Benutzer wurde gelöscht!

    '; - } else { - echo '

    Fehler beim Löschen des Benutzers!

    '; - } - } - } - - $search_query = ''; - if (isset($_GET['search'])) { - $search_query = sanitize_text_field($_GET['search']); - } - - $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

    -
    - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - -
    BenutzernameE-Mail-AdresseIP-AdresseAktionen
    username); ?>email); ?>ip_address); ?> - Löschen -
    Keine gesperrten Benutzer gefunden.
    -
    - 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'); - - -/* -* 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 -
    - -
    -

    -

    - -

    -

    -
      -
    1. -
    2. -
    3. -
    - -

    -

    -
      -
    1. -
    2. -
    3. -
    -
    -
    - -
    -

    - -
    - M_Viper Logo -
    -

    -

    -
      -
    1. -
    2. -
    3. -
    -
    - - .wp-multi-admin-page { - background-color: #f9f9f9; - padding: 20px; - border-radius: 8px; - } - .wp-multi-banner { - background-color: #0073aa; - 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)); - $content = get_post_field('post_content', $ID); - $excerpt = wp_trim_words($content, 60, '...'); - $role_id = get_option('wp_multi_discord_role_id'); - $mention_role = (!empty($role_id) && is_numeric($role_id)) ? "<@&" . esc_attr($role_id) . ">" : ''; - $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 - ) : ''; - - $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 - ); - $message .= "\n\n" . $excerpt . "\n\n" . $footer; - - $data = json_encode([ - 'username' => $bot_name, - 'avatar_url' => $avatar_url, - 'content' => $mention_role . "\n" . $message - ]); - - $response = wp_remote_post($webhook_url, [ - 'method' => 'POST', - 'body' => $data, - 'headers' => ['Content-Type' => 'application/json'] - ]); - - if (!is_wp_error($response)) { - wp_multi_increment_discord_message_count(); - } else { - error_log('Discord Webhook Fehler: ' . $response->get_error_message()); - } -} -add_action('publish_post', 'wp_multi_send_discord_notification', 10, 2); - -// 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); -} - -// Funktion, um die Checkbox in der Sidebar des Beitrag Editors hinzuzufügen -function wp_multi_add_checkbox_to_sidebar() { - global $post; - wp_nonce_field('wp_multi_checkbox_nonce', 'wp_multi_checkbox_nonce_field'); - $value = get_post_meta($post->ID, '_wp_multi_checkbox', true); - ?> -
    - -
    - -
    -

    -
    - -
    -
    - - '; -} -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) { - $guest_author = get_post_meta($post->ID, '_guest_author', true); - ?> - - - ID, '_guest_author', true); - if (!empty($guest_author)) { - $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'); - -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); - echo !empty($guest_author) ? esc_html($guest_author) : __('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() { - // Sortierparameter aus URL lesen - $orderby = isset($_GET['orderby']) ? sanitize_key($_GET['orderby']) : 'guest_author'; - $order = isset($_GET['order']) && in_array(strtoupper($_GET['order']), ['ASC', 'DESC']) ? strtoupper($_GET['order']) : 'ASC'; - - // Gültige Sortierfelder - $valid_orderby = ['guest_author' => 'pm.meta_value', 'posts' => 'post_count']; - $sql_orderby = isset($valid_orderby[$orderby]) ? $valid_orderby[$orderby] : 'pm.meta_value'; - $sql_order = $order; - - // Basis-URL für Sortier-Links - $base_url = add_query_arg(['page' => 'guest_author_overview'], admin_url('users.php')); - - ?> -
    -

    - - - - - - - - - posts} p - INNER JOIN {$wpdb->postmeta} pm ON p.ID = pm.post_id - WHERE pm.meta_key = '_guest_author' - AND pm.meta_value != '' - AND p.post_status = 'publish' - GROUP BY pm.meta_value - ORDER BY {$sql_orderby} {$sql_order} - "; - $guest_authors = $wpdb->get_results($query); - - - - if ($guest_authors) { - foreach ($guest_authors as $author) { - ?> - - - - - '; - } - ?> - -
    - - - - - - - - - - - - - -
    guest_author); ?>post_count); ?>
    ' . __('Keine Gast-Autoren gefunden.', 'wp-multi') . '
    -
    - - - - - $page_title, - 'post_name' => $page_slug, - 'post_content' => '[guest_author_posts]', - 'post_status' => 'publish', - 'post_type' => 'page', - )); - - if ($page_id && !is_wp_error($page_id)) { - update_option('wp_multi_guest_author_page_id', $page_id); - } - } else { - update_option('wp_multi_guest_author_page_id', $page->ID); - } -} -add_action('init', 'wp_multi_create_guest_author_page'); - -// Shortcode für Gastautoren-Liste -function wp_multi_guest_author_shortcode() { - ob_start(); - global $wpdb; - - // Alle Gastautoren mit Beitragsanzahl abrufen - $query = " - SELECT pm.meta_value AS guest_author, COUNT(*) AS post_count - FROM {$wpdb->posts} p - INNER JOIN {$wpdb->postmeta} pm ON p.ID = pm.post_id - WHERE pm.meta_key = '_guest_author' - AND pm.meta_value != '' - AND p.post_status = 'publish' - GROUP BY pm.meta_value - ORDER BY pm.meta_value ASC - "; - $guest_authors = $wpdb->get_results($query); - - // URL der Gastautoren-Beitragsseite - $guest_author_page_id = get_option('wp_multi_guest_author_page_id'); - $guest_author_page_url = $guest_author_page_id ? get_permalink($guest_author_page_id) : '#'; - - ?> -
    - -
    - - - -

    guest_author); ?>

    -

    post_count); ?>

    -
    - - -

    - -
    -
    - - - - -
    -

    - -

    -
    - Debug: Kategorie mit Slug "series" wurde nicht gefunden. Bitte überprüfe den Kategorie-Slug.

    '; - } - - $args = array( - 'post_type' => ['post', 'page', 'dein_custom_post_type'], - 'post_status' => 'publish', - 'meta_query' => array( - array( - 'key' => '_guest_author', - 'value' => $guest_author, - 'compare' => '=' - ) - ), - 'tax_query' => array( - array( - 'taxonomy' => 'category', - 'field' => 'slug', - 'terms' => 'series', - 'operator' => 'NOT IN' - ) - ), - 'posts_per_page' => -1 - ); - - $query = new WP_Query($args); - - - - if ($query->have_posts()) { - while ($query->have_posts()) { - $query->the_post(); - // Beitragsinhalt abrufen und kürzen - $content = get_the_content(); - $content = wp_strip_all_tags($content); // HTML-Tags entfernen - $trimmed_content = wp_trim_words($content, 30, '...'); - ?> -
    -

    - -

    -

    -
    - -

    - -

    - -
    -
    - - - - -
    -
    -
    - -

    Custom Text verwalten

    -
    -
    -
    - - - - - - - - - - - - - - -
    - /> -

    -
    - -

    -
    - -

    -
    - -
    -
    - - ID, 'guest_author', true); - $author_name = !empty($guest_author_name) ? $guest_author_name : get_the_author(); - $custom_texts = get_option('wp_multi_custom_texts', ''); - $second_custom_texts = get_option('wp_multi_second_custom_text', ''); - $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))); - $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); - - if (empty($custom_texts_array) && empty($second_custom_texts_array)) { - return $content; - } - - $output = '
    '; - $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]); - } - $output .= '

    '; - 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) { - $custom_texts = get_option('wp_multi_custom_texts'); - $custom_texts_array = array_filter(array_map('trim', explode("\n", $custom_texts))); - $second_custom_text = get_option('wp_multi_second_custom_text'); - $second_custom_text_array = array_filter(array_map('trim', explode("\n", $second_custom_text))); - $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); - ?> - - - - -

    ' . __('Keine benutzerdefinierten Seiten gefunden.', 'wp-stat-notice') . '

    '; - return; - } - - foreach ($custom_pages as $page) { - if ($page['slug'] === $current_slug) { - if (isset($page['url']) && filter_var($page['url'], FILTER_VALIDATE_URL)) { - // Externe URL in neuem Fenster öffnen - echo ''; - echo '

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

    '; - echo '

    ' . __('Die externe Seite wird in einem neuen Fenster geöffnet.', 'wp-stat-notice') . '

    '; - } else { - // Interne Seite anzeigen - echo '

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

    '; - echo '

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

    '; - } - return; - } - } - - echo '

    ' . __('Seite nicht gefunden.', 'wp-stat-notice') . '

    '; -} - -// Funktion zum Hinzufügen und Verwalten benutzerdefinierter Seiten -function wp_stat_notice_add_custom_page_form() { - $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' - ]; - - ?> -
    -

    - - -
    - - - - - - - - - - - - - - - - - - -
    - -
    -
    -

    -
    - -

    ' . __('Titel und Slug sind erforderlich.', 'wp-stat-notice') . '

    '; - } else { - $custom_pages = get_option('wp_stat_notice_custom_pages', []); - $slugs = array_column($custom_pages, 'slug'); - if (in_array($slug, $slugs)) { - echo '

    ' . __('Dieser Slug wird bereits verwendet.', 'wp-stat-notice') . '

    '; - } else { - $custom_pages[] = ['title' => $title, 'url' => $url, 'slug' => $slug, 'icon' => $icon]; - update_option('wp_stat_notice_custom_pages', $custom_pages); - echo '

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

    '; - } - } - } - - // Verwaltung der Seiten - $custom_pages = get_option('wp_stat_notice_custom_pages', []); - if (!empty($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') . '' . __('Slug', 'wp-stat-notice') . '' . __('Aktionen', 'wp-stat-notice') . '
    ' . esc_html($page['title']) . '' . esc_html($page['url'] ?: '-') . '' . esc_html($page['slug']) . '' . __('Bearbeiten', 'wp-stat-notice') . ' | '; - echo '' . __('Löschen', 'wp-stat-notice') . '
    '; - } - - // Bearbeiten - if (isset($_GET['edit']) && isset($custom_pages[$_GET['edit']])) { - $edit_index = (int)$_GET['edit']; - $edit_page = $custom_pages[$edit_index]; - - echo '

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

    '; - ?> -
    - - - - - - - - - - - - - - - - - - -
    - -
    -
    -

    -
    -

    ' . __('Titel und Slug sind erforderlich.', 'wp-stat-notice') . '

    '; - } else { - $custom_pages[$edit_index] = ['title' => $title, 'url' => $url, 'slug' => $slug, 'icon' => $icon]; - update_option('wp_stat_notice_custom_pages', $custom_pages); - echo '

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

    '; - } - } - } - - // Löschen - if (isset($_GET['delete']) && isset($custom_pages[$_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); ?> - - - - - - - - - - -
    BeitragDatumNameGrundStatusAktionen
    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'); - - -/* - * Verbessertes Gast-Lesezeichen-Plugin mit erhöhter Sicherheit und Benutzerfreundlichkeit - */ - - -define('STATISTIK_MANAGER_BOOKMARK_POST_TYPE', 'bookmark'); -define('STATISTIK_MANAGER_COOKIE_NAME', 'guest_token'); -define('STATISTIK_MANAGER_COOKIE_DURATION', 30 * DAY_IN_SECONDS); -define('STATISTIK_MANAGER_BOOKMARKS_CACHE_KEY', 'statistik_manager_bookmarks_'); - -/** - * Erstellt den benutzerdefinierten Post-Typ für Lesezeichen. - */ -function statistik_manager_create_bookmark_post_type() { - register_post_type(STATISTIK_MANAGER_BOOKMARK_POST_TYPE, [ - 'labels' => [ - 'name' => __('Lesezeichen', 'statistik-manager'), - 'singular_name' => __('Lesezeichen', 'statistik-manager'), - ], - 'public' => false, - 'show_ui' => false, - 'show_in_menu' => false, - 'supports' => ['title', 'custom-fields'], - ]); -} -add_action('init', 'statistik_manager_create_bookmark_post_type'); - -/** - * Generiert oder holt den Gast-Token. - * - * @return string Der Gast-Token. - */ -function statistik_manager_get_guest_token() { - $guest_token = isset($_COOKIE[STATISTIK_MANAGER_COOKIE_NAME]) ? sanitize_text_field($_COOKIE[STATISTIK_MANAGER_COOKIE_NAME]) : null; - - if (!$guest_token) { - $guest_token = wp_generate_uuid4(); - setcookie( - STATISTIK_MANAGER_COOKIE_NAME, - $guest_token, - time() + STATISTIK_MANAGER_COOKIE_DURATION, - COOKIEPATH, - COOKIE_DOMAIN, - is_ssl(), // Secure - true // HttpOnly - ); - } - - return $guest_token; -} - -/** - * Speichert ein Lesezeichen für einen Gast. - * - * @param int $post_id Post-ID des Lesezeichens. - */ -function statistik_manager_save_bookmark($post_id) { - $guest_token = statistik_manager_get_guest_token(); - update_post_meta($post_id, '_guest_token', $guest_token); -} - -/** - * Ruft die Lesezeichen eines Gastes ab. - * - * @return array Liste der Lesezeichen. - */ -function statistik_manager_get_guest_bookmarks() { - $guest_token = statistik_manager_get_guest_token(); - $cache_key = STATISTIK_MANAGER_BOOKMARKS_CACHE_KEY . md5($guest_token); - $bookmarks = get_transient($cache_key); - - if ($bookmarks !== false) { - return $bookmarks; - } - - $args = [ - 'post_type' => STATISTIK_MANAGER_BOOKMARK_POST_TYPE, - 'meta_query' => [ - [ - 'key' => '_guest_token', - 'value' => $guest_token, - ], - ], - 'posts_per_page' => -1, - 'post_status' => 'publish', - 'orderby' => 'date', - 'order' => 'DESC', - ]; - - $bookmarks_query = new WP_Query($args); - $bookmarks = $bookmarks_query->posts; - - set_transient($cache_key, $bookmarks, HOUR_IN_SECONDS); - return $bookmarks; -} - -/** - * Löscht ein Lesezeichen via AJAX. - */ -function statistik_manager_delete_bookmark() { - check_ajax_referer('statistik_manager_bookmark_nonce', 'nonce'); - - if (!isset($_POST['bookmark_id']) || !isset($_COOKIE[STATISTIK_MANAGER_COOKIE_NAME])) { - wp_send_json_error(['message' => __('Ungültige Anfrage.', 'statistik-manager')]); - } - - $bookmark_id = absint($_POST['bookmark_id']); - $guest_token = sanitize_text_field($_COOKIE[STATISTIK_MANAGER_COOKIE_NAME]); - $stored_token = get_post_meta($bookmark_id, '_guest_token', true); - - if ($stored_token !== $guest_token) { - wp_send_json_error(['message' => __('Du kannst nur deine eigenen Lesezeichen löschen.', 'statistik-manager')]); - } - - wp_delete_post($bookmark_id, true); - delete_transient(STATISTIK_MANAGER_BOOKMARKS_CACHE_KEY . md5($guest_token)); - wp_send_json_success(['message' => __('Lesezeichen erfolgreich gelöscht.', 'statistik-manager')]); -} -add_action('wp_ajax_delete_bookmark', 'statistik_manager_delete_bookmark'); -add_action('wp_ajax_nopriv_delete_bookmark', 'statistik_manager_delete_bookmark'); - -/** - * Fügt ein Lesezeichen via AJAX hinzu. - */ -function statistik_manager_add_bookmark_ajax() { - check_ajax_referer('statistik_manager_bookmark_nonce', 'nonce'); - - if (!isset($_POST['bookmark_url']) || !isset($_POST['bookmark_name'])) { - wp_send_json_error(['message' => __('Bitte alle Felder ausfüllen.', 'statistik-manager')]); - } - - $bookmark_url = esc_url_raw($_POST['bookmark_url']); - $bookmark_name = sanitize_text_field($_POST['bookmark_name']); - - if (empty($bookmark_url) || empty($bookmark_name)) { - wp_send_json_error(['message' => __('Ungültige URL oder Name.', 'statistik-manager')]); - } - - // Prüfen, ob die URL bereits existiert - $guest_token = statistik_manager_get_guest_token(); - $args = [ - 'post_type' => STATISTIK_MANAGER_BOOKMARK_POST_TYPE, - 'meta_query' => [ - 'relation' => 'AND', - [ - 'key' => '_guest_token', - 'value' => $guest_token, - ], - [ - 'key' => '_bookmark_url', - 'value' => $bookmark_url, - ], - ], - 'posts_per_page' => 1, - ]; - - $existing = new WP_Query($args); - if ($existing->have_posts()) { - wp_send_json_error(['message' => __('Diese URL ist bereits ein Lesezeichen.', 'statistik-manager')]); - } - - // Neues Lesezeichen erstellen - $post_id = wp_insert_post([ - 'post_type' => STATISTIK_MANAGER_BOOKMARK_POST_TYPE, - 'post_title' => $bookmark_name, - 'post_status' => 'publish', - 'meta_input' => [ - '_bookmark_url' => $bookmark_url, - '_guest_token' => $guest_token, - ], - ]); - - if (is_wp_error($post_id)) { - wp_send_json_error(['message' => __('Fehler beim Hinzufügen des Lesezeichens.', 'statistik-manager')]); - } - - delete_transient(STATISTIK_MANAGER_BOOKMARKS_CACHE_KEY . md5($guest_token)); - wp_send_json_success([ - 'message' => __('Lesezeichen erfolgreich hinzugefügt.', 'statistik-manager'), - 'html' => '
  • ' . esc_html($bookmark_name) . '
  • ', - ]); -} -add_action('wp_ajax_add_bookmark', 'statistik_manager_add_bookmark_ajax'); -add_action('wp_ajax_nopriv_add_bookmark', 'statistik_manager_add_bookmark_ajax'); - -/** - * Zeigt die Lesezeichen eines Gastes an. - * - * @return string HTML-Ausgabe der Lesezeichen. - */ -function statistik_manager_display_bookmarks() { - $bookmarks = statistik_manager_get_guest_bookmarks(); - - ob_start(); - ?> -
    -

    - -

    - - - -
    - -
    - -
    - - -
    -
    - - -
    -
    - -
    -
    -
    - - - - - - 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. -
    3. 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.
      • -
      -
    4. -
    5. 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.
    6. -
    7. 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.
    8. -
    9. 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).
    10. -
    -

    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. -
    3. 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.
    4. -
    5. 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.
    6. -
    -

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

    -
    - -
    -
    - +
    +

    + + + + +

    +
    +