Um ein zweisprachiges Blog mit WordPress betreiben zu können, verwende ich das Language Switcher Plug-in. Dieses erlaubt es, durch die Verwendung spezieller Tags in den üblichen Titel und Inhaltsfeldern zu deklarieren, welche Teile in welcher Sprache geschrieben sind (z.B. “[ lang_en]Hello World[ /lang_en][ lang_de]Hallo Welt[ /lang_de]”). Wenn ein solcher Beitrag im Browser angezeigt wird entfernt das Plug-in diese Tags sowie die Inhalte in den nichtausgewählten Sprachen.
Ich verwende das DD Sitemap Generator Plug-in für WordPress zur automatischen Erzeugung einer Sitemap basierend auf den Beiträge und Kategorien meines Blogs. Auf dieser generierten Sitemap werden jedoch bei den Kategorienamen und Beitragstiteln die Übersetzungen in allen Sprachen auf einmal angezeigt inklusive der speziellen Tags.
Um dies zu beheben habe ich mich etwas im Code von WordPress und dem Language Switcher Plug-in umgesehen. Das Language Switcher Plug-in entfernt die Tags und überflüssigen Übersetzungen indem es sich der Filters API bedient – eine Art ereignisbasierter RückrufmMechanismus. Plug-ins können Ihr Interesse an bestimmten Textfilterereignissen signalisieren indem sie die Funktion add_filter(the_event_id, the_name_of_a_function_to_callback) unter Angabe der ID eines Filterereignisses und des Namens der aufzurufenden Funktion im Falle des Auftretens des entsprechenden Ereignis. Neben dem Registrieren für Filterereignisse können Plug-ins auch selbst solche Textfilterereignisse auslösen indem sie Funktion apply_filters(the_event_id, the_text_to_be_filtered) unter Angabe einer ID des Filterereignisses und des zu filternden Textes aufrufen. WordPress führt dann alle für dieses Ereignis registrier Filtermethoden auf dem übergebenen Text aus und die apply_filters Funktion gibt als Ergebnis den “gefilterten” text zurück. Wenn WordPress beispielsweise die Titel von Beiträgen oder Seiten darstellt löst es ein Filterereignis mit der ID “the_title” aus. Dies ermöglicht Plug-ins den Titel zu prozessieren/modifizieren bevor er dargestellt wird. Das Language Switcher Plug-in registriert sich daher selbst für dieses und eine Reihe anderer Filterereignisse um mehrsprachig eingegebene Texte vor der Darstellung um die Sprachtags und die nicht relevanten Übersetzungen zu entfernen.
Leider löst das DD Sitemap Generator Plug-in die entsprechenden Filterereignisse bei der Erstellung der Sitemap nicht aus. Daher ist auch das Language Switcher Plug-in nicht in der Lage die Kategorienamen und Beitragstitel zu bearbeiten.
Um das Problem zu lösen habe ich daher den Quellcode des DD Sitemap Generator Plug-in analysiert und die fehlenden apply_filters Aufrufe an den entsprechenden Stellen hinzugefügt. Wer ebenfalls von diesem Problem betroffen ist kann sich wie folgt behelfen:
- Die Datei <wordpress_root>/wp-content/plugins/sitemap-generator/sitemap-generator.php (oder <wordpress_root>/wp-content/plugins/dd-sitemap-gen/dd-sitemap-gen.php) in einem Editor öffnen
- Den folgenden Text lokalisieren
$tmp_array[‘title’] = $pages[$k]->post_title;
und ersetzen durch
$tmp_array[‘title’] = apply_filters(‘the_title’, $pages[$k]->post_title); - Den folgenden Text lokalisieren
$tmp_array[‘title’] = $cat_data[$c][‘cat_name’];
und ersetzen durch
$tmp_array[‘title’] = apply_filters(‘the_category’, $cat_data[$c][‘cat_name’]); - Den folgenden Text lokalisieren
$tmp_array[‘title’] = $posts[$k]->post_title;
und ersetzen durch
$tmp_array[‘title’] = apply_filters(‘the_title’, $posts[$k]->post_title); - Die Änderungen speichern. Das sollte es gewesen sein.
Mit diesem Verfahren kann man auch andere Plug-ins für ein gutes Zusammenspiel mit dem Language Switcher Plug-in korrigieren.
Good post.
If you have the time and feel like helping me, here the link :
http://wordpress.org/support/topic/189461?replies=1#post-805561
for me i make it work with : $tmp_array[‘title’] = apply_filters(‘widget_title’, $pages[$k]->post_title);