In vielen Themes werden Beiträge, Seiten und Kategorien auf besondere Weise angezeigt, meistens basierend auf IDs. Ein Abschnitt mit ‚Featured‘-Posts auf der Startseite zum Beispiel oder hervorgehobene Kategorien.

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.

Um korrekt angezeigt zu werden, muss das Theme die IDs pro Sprache auswählen. In WPML ändern sich die IDs für 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, mit denen dies erzielt werden kann.

Sie können entweder die automatische ID-Anpassung aktivieren oder die wpml_object_id manuell in Ihrem Theme nutzen.

Welche Option sollten Sie verwenden?

Bei der automatischen ID-Anpassung sind keine Änderungen in Ihrem Code nötig. Sie können sie mit jedem Theme verwenden und alles „funktioniert einfach“. Der Nachteil liegt in einer etwas langsameren Verarbeitungszeit und im DB-Zugriff, da WPML sich in viele Funktionen einhängt und prüft, ob die Ausgabe für die aktive Sprache korrekt ist.

Mit der manuellen Anpassung über die Funktion wpml_object_id erzielen Sie dieselben Ergebnisse mit meist effizienteren Verarbeitungszeiten. Dafür muss jedoch im Theme einiges an Code geändert werden.

Wenn Sie ein Theme von der Pike auf erstellen, sollten Sie darüber nachdenken, wpml_object_id für die manuelle Anpassung zu verwenden. Wenn Sie mit einem schon vorhandenen Theme starten, ist es eventuell nicht realistisch, das Theme zu hacken und zu modifizieren, die automatische ID-Anpassung ist dann wahrscheinlich der bessere Weg.

Auf jeden Fall reduziert sich die Auswirkung auf die Leistung dieser Funktion auf null, wenn Sie ein Caching-Plugin benutzen. Caching wird immer empfohlen, für Seiten aller Größen. WPML läuft perfekt mit WP Super Cache und W3 Total Cache (welche wir auch auf verschiedenen Seiten nutzen).

1) Automatische Anpassung der IDs

WPML kann sich in die WordPress-API-Funktionen einhaken, erkennen, wann bestimmte Elemente geladen werden, und die IDs so einstellen, dass die Ergebnisse für die aktive Sprache angepasst werden.

Diese Funktion wird standardmäßig aktiviert und ist über WPML ->Sprachen zugänglich:

Anpassen der IDs für die mehrsprachige Funktion

Dies wird automatisch alle IDs anpassen und kann in jedem WordPress-Theme eingesetzt werden, das die API korrekt verwendet (fast jedes Theme, das Sie finden).

2) Manuelle Anpassung mit der Funktion wpml_object_id

Alternativ können Sie, wenn die automatische ID-Anpassung ausgeschaltet ist, die Funktion wpml_object_id verwenden, um das Gleiche manuell zu erzielen.

apply_filters( ‚wpml_object_id‘, int $element_id, string $element_type, bool $return_original_if_missing, mixed $ulanguage_code )

Hinweis: Für WPML-Versionen >=3.2 nutzen Sie bitte den wpml_object_id Filterhaken. Ab 3.3 wurde die Funktion icl_object_id als veraltet markiert und in 3.3 komplett entfernt.

Beispiele für die Verwendung

echo apply_filters( 'wpml_object_id', 4, 'category', TRUE  );

Geben Sie die Kategorie-ID in der aktuellen Sprache für die Kategorie-ID 4 aus. Wenn die Übersetzung fehlt, wird das Original ausgegeben (hier: Kategorie-ID 4).

Bitte lesen Sie unsere API-Seite, um weitere Beispiele und detailliertere Informationen zur Anwendung zu finden.

Übersetzung von ID-Arrays

Oft müssen Sie eine ganze Reihe an Objekt-IDs umwandeln (am häufigsten Kategorien-IDs). Dazu können Sie die folgende Funktion benutzen:

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.

Wenn wir zum Beispiel eine Reihe von Kategorien-IDs für die Kategorien 1,3 und 6 erhalten wollen, rufen wir so auf:

lang_object_ids(array(1,3,6),'category')

Anzeige von Seitenelementen in verschiedenen Sprachen

Der Parameter ulanguage_code ermöglicht das Mischen von Seitenelementen in verschiedenen Sprachen.

Wenn Sie beispielsweise eine Bildgalerie haben und die Bilder nicht für jede Sprache einzeln duplizieren wollen, machen Sie Folgendes:

  1. Rufen Sie die ID der Seite der Sprache ab, in der die Galerie existiert.
  2. Schalten Sie eine Schleife auf die Bilder für diese Seite und zeigen Sie sie an.

Eine Antwort zu “Sprachabhängige IDs”

  1. 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.