function rss_crawler_generate_summary($content, $title) { mb_internal_encoding('UTF-8'); // API-Key Check if (!defined('OPENAI_API_KEY') || empty(OPENAI_API_KEY)) { if (function_exists('rss_crawler_log')) { rss_crawler_log("FEHLER: OPENAI_API_KEY nicht definiert - POST ÜBERSPRUNGEN", 'ERROR'); } throw new Exception("SKIP_THIS_POST"); } // Nur den Originaltext für den Prompt auf 8000 Zeichen beschränken $prepared_content = mb_substr( preg_replace('/\s+/u', ' ', wp_strip_all_tags( html_entity_decode($content) ) ), 0, 8000 ); $system_prompt = 'Originaltext 1:1 → stilgetreu in einen literarisch-satirischen Text mit klarer Struktur, durchgängiger Ich-Erzählung und 11 festen Figuren (Barbara Schöneberger, Maxi Biewer, Bertolt Brecht, Albert Einstein, Sigmund Freud, Günther Jauch, Klaus Kinski, Franz Kafka, Lothar Matthäus, Dieter Nuhr, Quentin Tarantino). Der Text ist humorvoll, kritisch, subjektiv und nutzt Alltagserlebnisse als Ausgangspunkt für popkulturell aufgeladene Gesellschaftsbetrachtungen. [FIGUREN-REGELN] – Die 11 Figuren treten ausschließlich in [H2-ABSATZ] auf. – Jede Figur erscheint exakt zweimal im gesamten Text, immer mit vollem Namen und direkter Rede. – Jede dieser Szenen enthält genau zwei dieser Figuren. Keine Figur tritt im [FAZIT-ABSATZ] auf. – Die Aussagen der Figuren müssen charaktertypisch, situationsbezogen und erzählerisch eingebunden sein. [STILVORGABE] – Der Stil ist nahbar, subjektiv, überzeichnet – als roher „Stream-of-Consciousness" mit alltäglichen Sinneseindrücken, medialen Bezügen und ironischer Kommentierung. – Fachbegriffe müssen mit je einer satirischen (3-Wort-Erklärung) in Klammer versehen sein, z B. KI (Frisst-dein-Job). – Die Sprache muss pointiert sein. [STRUKTUR – VERBINDLICH] 1.) [H1] Title max. 70 Zeichen. Muss suchstark formuliert sein und Klicks auslösen – nur reiner Text, keine Emojis oder Bilder. 2.) [INTRO] Abschnitt mit 6 Sätzen, subjektiver Einstieg mit 2–3 (ironische-3-Wort-Erklärungen) nach der Klammern-Regel. 3.) [H2] = Überschrift mit exakt 3 Keywords + 1 Emoji. 4.) [H2-ABSATZ] = exakt 15 Sätze, Stil wie [INTRO], enthält exakt 2 Figuren (mit direkter Rede) + passende Popkultur-Elemente. 5.) Erstelle exakt 12 Blöcke mit je 1× [H2] + 1× [H2-ABSATZ]. Jeder Block enthält: - [H2] mit exakt 3 Keywords + 1 Emoji, - [H2-ABSATZ] mit exakt 15 Sätzen, - exakt 2 Figuren (direkte Rede, keine Interaktion), - exakt 2 Fachbegriffe mit Klammerregel. 6.) [FAZIT] mit klarer Überschrift + 1 Emoji. 7.) [FAZIT-ABSATZ] = 25+ Sätze als subjektiver Monolog. Keine Figuren. Enthält eine Frage an die Lesenden + Reflexion + Impuls zum Nachdenken + Dank + Aufforderung zum Teilen auf Social Media. 8.) [HASHTAGS] = Eine Zeile mit 13–16 Hashtags, zusammengesetzt aus relevanten Begriffen, Figuren und Themen – keine Leerzeichen. Z. B.: #Popkultur #RealityTV #KlausKinski #TarantinoStil. [TECHNIK] – Verwende ausschließlich diese Tags: [H1], [INTRO], [H2], [H2-ABSATZ], [FAZIT], [FAZIT-ABSATZ], [HASHTAGS] – Kein Markdown, kein HTML, keine Links, keine Bilder, keine Emojis außerhalb [H2]/[FAZIT]. [BEGINN] Beginne den Text mit: „Ich wache auf…" und baue Club-Mate, Nokia-Handy und die Disco „Ziegelei Groß Weeden" als Popkultur-Referenzen mit ein. Der Einstieg soll atmosphärisch, bildhaft und leicht überdreht wirken – subjektiv, körperlich und mediennah.'; $prompt = << 'gpt-4o-mini', 'messages' => [ [ 'role' => 'system', 'content' => $system_prompt ], [ 'role' => 'user', 'content' => $prompt ] ], 'temperature' => 0.99, 'top_p' => 0.99, 'max_tokens' => 8000, ], JSON_UNESCAPED_UNICODE); // ERSTE METHODE: WordPress wp_remote_post (Standard) $response = wp_remote_post('https://api.openai.com/v1/chat/completions', [ 'headers' => [ 'Authorization' => 'Bearer ' . OPENAI_API_KEY, 'Content-Type' => 'application/json; charset=utf-8' ], 'body' => $request_body, 'timeout' => 120 ]); // Bei cURL-Problemen: ALTERNATIVE METHODE mit file_get_contents if (is_wp_error($response) && strpos($response->get_error_message(), 'cURL') !== false) { if (function_exists('rss_crawler_log')) { rss_crawler_log("cURL-Fehler erkannt - versuche Alternative mit file_get_contents", 'INFO'); } $context = stream_context_create([ 'http' => [ 'method' => 'POST', 'header' => "Content-Type: application/json\r\n" . "Authorization: Bearer " . OPENAI_API_KEY . "\r\n", 'content' => $request_body, 'timeout' => 120 ] ]); $result = @file_get_contents('https://api.openai.com/v1/chat/completions', false, $context); if ($result !== false && isset($http_response_header)) { // Simuliere wp_remote_post Response-Format $response = [ 'body' => $result, 'response' => [ 'code' => 200 ] ]; // Setze HTTP-Code basierend auf Response-Header foreach ($http_response_header as $header) { if (preg_match('/HTTP\/\d\.\d\s+(\d+)/', $header, $matches)) { $response['response']['code'] = intval($matches[1]); break; } } } else { $response = new WP_Error('http_request_failed', 'file_get_contents() fehlgeschlagen'); } } // Prüfe auf Fehler oder HTTP-Codes if (is_wp_error($response) || wp_remote_retrieve_response_code($response) !== 200) { if (function_exists('rss_crawler_log')) { $error_msg = is_wp_error($response) ? $response->get_error_message() : 'HTTP ' . wp_remote_retrieve_response_code($response); rss_crawler_log("Versuch " . $attempt . " fehlgeschlagen: " . $error_msg, 'ERROR'); } if ($attempt < $max_attempts) { if (function_exists('rss_crawler_log')) { rss_crawler_log("Warte 1 Sekunde vor nächstem Versuch...", 'INFO'); } sleep(1); $response = false; } continue; } // Prüfe Response-Body auf Ablehnungen $response_body = wp_remote_retrieve_body($response); $response_data = json_decode($response_body, true); if (json_last_error() === JSON_ERROR_NONE && isset($response_data['choices'][0]['message']['content'])) { $generated_content = $response_data['choices'][0]['message']['content']; // LOG: Erste 120 Zeichen der API-Antwort if (function_exists('rss_crawler_log')) { $api_preview = substr($generated_content, 0, 120); rss_crawler_log("API-Antwort (erste 120 Zeichen): " . $api_preview, 'INFO'); } // Prüfe auf Ablehnungen (erste 120 Zeichen) $content_preview = substr($generated_content, 0, 100); $has_rejection = (stripos($content_preview, 'sorry') !== false || stripos($content_preview, 'cannot') !== false || stripos($content_preview, 'es tut mir leid') !== false || stripos($content_preview, 'i apologize') !== false || stripos($content_preview, 'i can\'t') !== false); if ($has_rejection) { if (function_exists('rss_crawler_log')) { rss_crawler_log("Ablehnung " . $attempt . "/" . $max_attempts . " - OpenAI verweigert: " . $content_preview, 'ERROR'); } if ($attempt < $max_attempts) { if (function_exists('rss_crawler_log')) { rss_crawler_log("Warte 2 Sekunden vor nächstem Versuch...", 'INFO'); } sleep(2); $response = false; } } else { // Erfolgreiche Response ohne Ablehnung if (function_exists('rss_crawler_log')) { rss_crawler_log("OpenAI API erfolgreich bei Versuch " . $attempt, 'INFO'); } break; } } else { if (function_exists('rss_crawler_log')) { rss_crawler_log("Versuch " . $attempt . " - JSON Decode Fehler", 'ERROR'); } if ($attempt < $max_attempts) { if (function_exists('rss_crawler_log')) { rss_crawler_log("Warte 1 Sekunde vor nächstem Versuch...", 'INFO'); } sleep(1); $response = false; } } } // Nach 10 Versuchen: Überspringen ohne DB-Eintrag if (!$response || is_wp_error($response)) { if (function_exists('rss_crawler_log')) { rss_crawler_log("POST ÜBERSPRUNGEN nach " . $max_attempts . " erfolglosen Versuchen - kein DB-Eintrag", 'ERROR'); } throw new Exception("SKIP_THIS_POST"); } // Weitere Fehlerbehandlung (bereits von Retry abgedeckt) $response_code = wp_remote_retrieve_response_code($response); if ($response_code !== 200) { if (function_exists('rss_crawler_log')) { rss_crawler_log("RSS-Crawler API HTTP FEHLER: " . $response_code, 'ERROR'); } throw new Exception("SKIP_THIS_POST"); } // Response auswerten (bereits von Retry verarbeitet) $response_body = wp_remote_retrieve_body($response); $response_data = json_decode($response_body, true); if (json_last_error() !== JSON_ERROR_NONE) { if (function_exists('rss_crawler_log')) { rss_crawler_log("RSS-Crawler JSON FEHLER: " . json_last_error_msg(), 'ERROR'); } throw new Exception("SKIP_THIS_POST"); } if (!isset($response_data['choices'][0]['message']['content'])) { if (function_exists('rss_crawler_log')) { rss_crawler_log("RSS-Crawler RESPONSE FEHLER: Ungültiges Response-Format", 'ERROR'); } throw new Exception("SKIP_THIS_POST"); } // Content-Filter-Prüfung if (isset($response_data['choices'][0]['finish_reason']) && $response_data['choices'][0]['finish_reason'] === 'content_filter') { if (function_exists('rss_crawler_log')) { rss_crawler_log("OpenAI Content-Filter blockiert", 'ERROR'); } throw new Exception("SKIP_THIS_POST"); } // Generierter Content holen und bereinigen $generated = $response_data['choices'][0]['message']['content']; // Für Debugging: Speichere den originalen generierten Inhalt if (function_exists('rss_crawler_log')) { rss_crawler_log("ORIGINAL GENERIERTER INHALT: " . substr($generated, 0, 300) . "...", 'DEBUG'); // Prüfen, ob Inhalt leer oder Ablehnungsmeldung ist if (empty(trim($generated)) || stripos($generated, 'sorry') !== false || stripos($generated, 'apologize') !== false || stripos($generated, 'cannot') !== false || stripos($generated, 'es tut mir leid') !== false) { rss_crawler_log("API-ABLEHNUNG: " . substr(str_replace(["\n", "\r"], " ", $generated), 0, 150) . "...", 'ERROR'); } else { rss_crawler_log("API: " . substr(str_replace(["\n", "\r"], " ", $generated), 0, 150) . "...", 'DEBUG'); } } // SCHRITT 1: Formatierungsfehler korrigieren $generated = preg_replace('/\n{2,}/', "\n", $generated); $generated = preg_replace('/\r\n|\r|\n/', "\n", $generated); $generated = preg_replace('/#{1,3}\s*\[H1\]/i', '[H1]', $generated); $generated = preg_replace('/#{1,3}\s*\[H2\]/i', '[H2]', $generated); $generated = preg_replace('/#{1,3}\s*\[INTRO\]/i', '[INTRO]', $generated); $generated = preg_replace('/#{1,3}\s*\[H2-ABSATZ\]/i', '[H2-ABSATZ]', $generated); $generated = preg_replace('/#{1,3}\s*\[FAZIT\]/i', '[FAZIT]', $generated); $generated = preg_replace('/#{1,3}\s*\[FAZIT-ABSATZ\]/i', '[FAZIT-ABSATZ]', $generated); $generated = preg_replace('/#{1,3}\s*\[HASHTAGS\]/i', '[HASHTAGS]', $generated); // SCHRITT 2: Zählen und analysieren $h2_count = substr_count(strtolower($generated), '[h2]'); $h2_absatz_count = substr_count(strtolower($generated), '[h2-absatz]'); if (function_exists('rss_crawler_log')) { rss_crawler_log("H2 Tags: " . $h2_count . ", H2-ABSATZ Tags: " . $h2_absatz_count, 'INFO'); } // SCHRITT 3: Inhalte parsen und strukturieren $lines = explode("\n", $generated); $h1 = ""; $intro = ""; $h2 = ""; $h2_content = ""; $fazit_title = ""; $fazit_content = ""; $hashtags = ""; $content_sections = []; $current_section = null; $parsing_mode = null; // Inhalt parsen mit verbesserter Logik foreach ($lines as $line) { $line = trim($line); if (empty($line)) { continue; } // Debugging-Ausgabe für jede Zeile - ENTFERNT! // if (function_exists('rss_crawler_log')) { // rss_crawler_log("Parsing Zeile: " . $line, 'DEBUG'); // } // Tags erkennen und Inhalte extrahieren if (preg_match('/^\s*\[H1\]\s*(.+)$/i', $line, $matches)) { $h1 = $matches[1]; $parsing_mode = 'h1'; } elseif (preg_match('/^\s*\[INTRO\]\s*(.+)$/i', $line, $matches)) { $intro = $matches[1]; $parsing_mode = 'intro'; } elseif (preg_match('/^\s*\[H2\]\s*(.+)$/i', $line, $matches)) { // Vorherigen Abschnitt speichern if ($current_section) { $content_sections[] = $current_section; } // Neuen Abschnitt anlegen $current_section = [ 'title' => $matches[1], 'content' => '' ]; $parsing_mode = 'h2'; } elseif (preg_match('/^\s*\[H2-ABSATZ\]\s*(.*?)$/i', $line, $matches)) { if ($current_section) { $parsing_mode = 'h2_content'; if (!empty($matches[1])) { $current_section['content'] = $matches[1]; } } } elseif (preg_match('/^\s*\[FAZIT\]\s*(.*)$/i', $line, $matches)) { $fazit_title = trim($matches[1]); $parsing_mode = 'fazit_title'; } elseif (preg_match('/^\s*\[FAZIT-ABSATZ\]\s*(.*?)$/i', $line, $matches)) { $parsing_mode = 'fazit_content'; if (!empty($matches[1])) { $fazit_content = trim($matches[1]); } } elseif (preg_match('/^\s*\[HASHTAGS\]\s*(.+)$/i', $line, $matches)) { $hashtags = $matches[1]; $parsing_mode = 'hashtags'; } elseif (!empty($line) && $parsing_mode !== null) { // Fortsetzen des aktuellen Inhalts switch ($parsing_mode) { case 'h1': $h1 .= ' ' . $line; break; case 'intro': $intro .= ' ' . $line; break; case 'h2': if ($current_section) { $current_section['title'] .= ' ' . $line; } break; case 'h2_content': if ($current_section) { $current_section['content'] .= ' ' . $line; } break; case 'fazit_title': $fazit_title .= ' ' . $line; break; case 'fazit_content': $fazit_content .= ' ' . $line; break; case 'hashtags': $hashtags .= ' ' . $line; break; } } } // Letzten Abschnitt speichern if ($current_section) { $content_sections[] = $current_section; } // Debugging-Ausgabe für die content_sections - ENTFERNT! // if (function_exists('rss_crawler_log')) { // rss_crawler_log("Content Sections: " . print_r($content_sections, true), 'DEBUG'); // } // SCHRITT 4: Inhaltsmengen-Prüfung $section_count = count($content_sections); $total_content_length = 0; $non_empty_sections = 0; foreach ($content_sections as $section) { if (!empty($section['content'])) { $total_content_length += mb_strlen($section['content']); $non_empty_sections++; } } $avg_content_length = $non_empty_sections > 0 ? $total_content_length / $non_empty_sections : 0; // Debugging Info - ALLE ENTFERNT! // if (function_exists('rss_crawler_log')) { // rss_crawler_log("Anzahl content_sections: " . $section_count, 'DEBUG'); // rss_crawler_log("H1 gefunden: " . (!empty($h1) ? "JA" : "NEIN") . " (" . mb_strlen($h1) . " Zeichen)", 'DEBUG'); // rss_crawler_log("INTRO gefunden: " . (!empty($intro) ? "JA" : "NEIN") . " (" . mb_strlen($intro) . " Zeichen)", 'DEBUG'); // rss_crawler_log("H2 gefunden: " . (!empty($h2) ? "JA" : "NEIN") . " (" . mb_strlen($h2) . " Zeichen)", 'DEBUG'); // rss_crawler_log("H2-CONTENT gefunden: " . (!empty($h2_content) ? "JA" : "NEIN") . " (" . mb_strlen($h2_content) . " Zeichen)", 'DEBUG'); // rss_crawler_log("FAZIT-TITEL gefunden: " . (!empty($fazit_title) ? "JA" : "NEIN") . " (" . mb_strlen($fazit_title) . " Zeichen)", 'DEBUG'); // rss_crawler_log("FAZIT-CONTENT gefunden: " . (!empty($fazit_content) ? "JA" : "NEIN") . " (" . mb_strlen($fazit_content) . " Zeichen)", 'DEBUG'); // rss_crawler_log("HASHTAGS gefunden: " . (!empty($hashtags) ? "JA" : "NEIN") . " (" . mb_strlen($hashtags) . " Zeichen)", 'DEBUG'); // } // KRITISCHE PRÜFUNG: Bei unzureichenden Inhalten Fehler werfen - flexibler if ($h2_count < 12 || $h2_absatz_count < 12 || $section_count < 12 || (empty($h1) && empty($intro)) || ($avg_content_length < 200 && !defined('RSS_CRAWLER_DEBUG')) || stripos($generated, 'es tut mir leid') === 0 || stripos($generated, 'i apologize') === 0 || stripos($generated, 'sorry') === 0) { if (function_exists('rss_crawler_log')) { rss_crawler_log("UNZUREICHENDE INHALTE: H2=" . $h2_count . ", H2-ABSATZ=" . $h2_absatz_count . ", Sections=" . $section_count . ", H1=" . (!empty($h1) ? "OK" : "FEHLT") . ", INTRO=" . (!empty($intro) ? "OK" : "FEHLT") . ", Avg Length=" . round($avg_content_length), 'ERROR'); } // Fehler werfen, der vom RSS Crawler abgefangen wird throw new Exception("SKIP_THIS_POST"); } // SCHRITT 5: HTML erstellen - robuster $formatted_content = ''; // H1 als Titel verwenden (falls vorhanden) if (!empty($h1)) { $clean_h1 = preg_replace('/\[H1\]|\[H2\]|\[H2-ABSATZ\]|\[INTRO\]|\[FAZIT\]|\[FAZIT-ABSATZ\]|\[HASHTAGS\]/', '', $h1); $formatted_content .= '

' . esc_html($clean_h1) . '

'; } // Intro hinzufügen if (!empty($intro)) { $clean_intro = preg_replace('/\[H1\]|\[H2\]|\[H2-ABSATZ\]|\[INTRO\]|\[FAZIT\]|\[FAZIT-ABSATZ\]|\[HASHTAGS\]/', '', $intro); $formatted_content .= '

' . esc_html($clean_intro) . '

'; } // H2 Abschnitte foreach ($content_sections as $section) { if (!empty($section['title'])) { $clean_title = preg_replace('/\[H1\]|\[H2\]|\[H2-ABSATZ\]|\[INTRO\]|\[FAZIT\]|\[FAZIT-ABSATZ\]|\[HASHTAGS\]/', '', $section['title']); $formatted_content .= '

' . esc_html($clean_title) . '

'; } if (!empty($section['content'])) { $clean_content = preg_replace('/\[H1\]|\[H2\]|\[H2-ABSATZ\]|\[INTRO\]|\[FAZIT\]|\[FAZIT-ABSATZ\]|\[HASHTAGS\]/', '', $section['content']); $formatted_content .= '

' . esc_html($clean_content) . '

'; } } // FAZIT - automatische Trennung wenn kein [FAZIT-ABSATZ] vorhanden if (!empty($fazit_title)) { // Prüfe ob FAZIT-Titel verdächtig lang ist (enthält wahrscheinlich Content) if (mb_strlen($fazit_title) > 200) { // Teile bei erstem Satzende nach dem ersten Satz if (preg_match('/^([^.!?]+[.!?])\s*(.+)$/s', $fazit_title, $matches)) { $fazit_title = trim($matches[1]); $fazit_content = trim($matches[2]); } } if (!empty($fazit_title)) { $clean_fazit_title = preg_replace('/\[H1\]|\[H2\]|\[H2-ABSATZ\]|\[INTRO\]|\[FAZIT\]|\[FAZIT-ABSATZ\]|\[HASHTAGS\]/', '', $fazit_title); $formatted_content .= '

' . esc_html($clean_fazit_title) . '

'; if (!empty($fazit_content)) { $clean_fazit_content = preg_replace('/\[H1\]|\[H2\]|\[H2-ABSATZ\]|\[INTRO\]|\[FAZIT\]|\[FAZIT-ABSATZ\]|\[HASHTAGS\]/', '', $fazit_content); $formatted_content .= '

' . esc_html($clean_fazit_content) . '

'; } } } // Hashtags if (!empty($hashtags)) { $clean_hashtags = preg_replace('/\[H1\]|\[H2\]|\[H2-ABSATZ\]|\[INTRO\]|\[FAZIT\]|\[HASHTAGS\]/', '', $hashtags); $formatted_content .= '

Hashtags: ' . esc_html($clean_hashtags) . '

'; } // SCHRITT 6: Finale Verarbeitung - NUR WICHTIGE LOGS if (function_exists('rss_crawler_log')) { rss_crawler_log("HTML generiert, Länge: " . mb_strlen($formatted_content) . " Zeichen", 'INFO'); } // Überprüfe auf minimale Inhaltslänge - erhöht if (mb_strlen($formatted_content) < 200) { if (function_exists('rss_crawler_log')) { rss_crawler_log("FEHLER: Generierter HTML-Inhalt zu kurz! Länge: " . mb_strlen($formatted_content), 'ERROR'); } throw new Exception("SKIP_THIS_POST"); } // Nutze direkt den formatierten Content ohne weitere Zeichensetzungsanpassungen $transformed_content = $formatted_content; $transformed_excerpt = $intro; $transformed_title = $h1; // Finale statistische Logs if (function_exists('rss_crawler_log')) { rss_crawler_log("Fertig. Titel: " . substr($transformed_title, 0, 50), 'INFO'); rss_crawler_log("Anzahl Abschnitte: " . $section_count, 'INFO'); rss_crawler_log("Gesamte HTML-Länge: " . mb_strlen($transformed_content) . " Zeichen", 'INFO'); // API-Nutzungsstatistiken if (isset($response_data['usage'])) { rss_crawler_log("Prompt Tokens: " . $response_data['usage']['prompt_tokens'], 'INFO'); rss_crawler_log("Completion Tokens: " . $response_data['usage']['completion_tokens'], 'INFO'); rss_crawler_log("Total Tokens: " . $response_data['usage']['total_tokens'], 'INFO'); } } // HIER ANSETZEN FÜR BILDIMPORTABSCHNITTE-PLUGIN if (function_exists('process_content_with_section_images')) { $transformed_content = process_content_with_section_images($transformed_content); } // Kurze Verzögerung if (function_exists('rss_crawler_log')) { rss_crawler_log("=== WARTE 2 SEKUNDEN VOR RETURN ===", 'INFO'); } sleep(2); // Shutdown-Handler registrieren register_shutdown_function(function() { if (function_exists('rss_crawler_log')) { rss_crawler_log("=== WARTE 3 SEKUNDEN NACH RETURN ===", 'INFO'); } sleep(1); }); // Ergebnis zurückgeben return [ 'content' => $transformed_content, 'excerpt' => '', // KEIN Excerpt zurückgeben! 'title' => $transformed_title ]; }
Warning: Cannot modify header information - headers already sent by (output started at /var/customers/webs/Muhsin/muhsin.de/wp-content/plugins/rss-crawler/rss-crawler.php:1) in /var/customers/webs/Muhsin/muhsin.de/wp-includes/pluggable.php on line 1450

Warning: Cannot modify header information - headers already sent by (output started at /var/customers/webs/Muhsin/muhsin.de/wp-content/plugins/rss-crawler/rss-crawler.php:1) in /var/customers/webs/Muhsin/muhsin.de/wp-includes/pluggable.php on line 1453