Viele Themes zeigen spezielle Beiträge, Seiten und Kategorien speziell an, in der Regel auf der Grundlage von IDs. Zum Beispiel eine Rubrik ‚Featured‘ Beiträge auf der Startseite oder hervorgehobene Kategorien.
In einigen Fällen sind diese IDs fest in das PHP des Themes codiert, in anderen Fällen wählt der Benutzer sie in den Einstellungen des Themes aus.
Um korrekt angezeigt zu werden, muss das Theme die IDs pro Sprache auswählen. In WPML ändern sich die IDs für Beiträge, Seiten, Kategorien und Tags, wenn sich die Sprache ändert. Daher muss das Theme die korrekten IDs der aktiven Sprache verwenden.
WPML enthält zwei Optionen, um dies zu erreichen.
Sie können entweder die automatische ID-Anpassung aktivieren oder die wpml_object_id manuell in Ihrem Theme verwenden.
Welche Option soll ich verwenden?
Die automatische ID-Anpassung erfordert keine Änderungen in Ihrem Code. Sie können es mit jedem Theme verwenden und alles „funktioniert“ einfach. Die Kehrseite der Medaille ist eine leicht erhöhte Verarbeitungszeit und ein erhöhter DB-Zugriff, da WPML auf viele Funktionen zugreift und überprüft, ob die Ausgabe für die aktive Sprache korrekt ist.
Die manuelle ID-Anpassung mit der Funktion wpml_object_id führt zu den gleichen Ergebnissen und kann in Bezug auf die Verarbeitung effizienter sein. Allerdings ist dafür eine umfangreiche Programmierung im Theme erforderlich.
Wenn Sie ein Theme von Grund auf neu erstellen, sollten Sie erwägen, wpml_object_id zu verwenden, um dies manuell zu tun. Wenn Sie mit einem bestehenden Theme beginnen, ist das Hacken und Ändern des Themes möglicherweise nicht realistisch und die automatische ID-Anpassung ist wahrscheinlich der richtige Weg.
Wenn Sie ein Cache Plugin verwenden, werden die Auswirkungen dieses Vorgangs auf die Leistung in jedem Fall auf Null reduziert. Caching wird für Websites jeder Größe immer empfohlen. WPML läuft problemlos mit WP Super Cache und W3 Total Cache (die wir auch auf anderen Websites verwenden).
1) Automatisch IDs anpassen
WPML kann sich in die WordPress API-Funktionen einklinken, erkennen, wenn bestimmte Elemente geladen werden, und die IDs so anpassen, dass die Ergebnisse an die aktive Sprache angepasst werden.
Diese Funktion ist standardmäßig aktiviert und kann über WPML → Sprachen aufgerufen werden:
Dies passt automatisch alle IDs an und kann in jedem WordPress Theme verwendet werden, das die API korrekt verwendet (fast jedes Theme, das Sie finden können).
2) Manuell, mit der Funktion wpml_object_id
Wenn die automatische ID-Anpassung deaktiviert ist, können Sie alternativ die Funktion wpml_object_id verwenden, um das Gleiche manuell zu erreichen.
apply_filters( ‚wpml_object_id‘, int $element_id, string $element_type, bool $return_original_if_missing, mixed $ulanguage_code )
Beispiel Verwendung
echo apply_filters( 'wpml_object_id', 4, 'category', TRUE );
Gibt die Kategorie-ID in der aktuellen Sprache für die Kategorie-ID 4 zurück. Wenn die Übersetzung fehlt, wird das Original zurückgegeben (hier: Kategorie ID 4).
Sehen Sie sich unsere API Seite an, um weitere Beispiele und detaillierte Informationen über die Verwendung zu erhalten.
Arrays von IDs übersetzen
Oftmals müssen Sie ein ganzes Array von Objekt-IDs (meist Kategorie-IDs) konvertieren. Dazu können Sie die folgende Funktion verwenden:
function lang_object_ids($object_id, $type) { if( is_array( $object_id ) ){ $translated_object_ids = array(); foreach ( $object_id as $id ) { $translated_object_ids[] = apply_filters( 'wpml_object_id', $id, $type, true, $current_language ); } return $translated_object_ids; } else { return apply_filters( 'wpml_object_id', $object_id, $type, true, $current_language ); } }
Diese Funktion akzeptiert auch den Objekttyp als Argument.
Um beispielsweise ein Array von Kategorie-IDs für die Kategorien 1, 3 und 6 zu erhalten, rufen wir auf:
lang_object_ids(array(1,3,6),'category')
Anzeige von Seitenelementen in verschiedenen Sprachen
Mit dem optionalen Parameter ulanguage_code können Sie Seitenelemente in verschiedenen Sprachen mischen.
Wenn Sie zum Beispiel eine Bildergalerie haben und die Bilder nicht pro Sprache duplizieren möchten, gehen Sie wie folgt vor:
- Ermittelt die ID der Seite in der Sprache, in der die Galerie existiert.
- Schleifen Sie die Bilder für diese Seite ab und zeigen Sie sie an.
In einigen Fällen sind diese IDs in die PHP des Themes hartkodiert und in anderen wählt der Benutzer sie im Einstellungsbildschirm des Themes aus.