Sprachabhängige IDs

In vielen Themes werden Posts, 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 Posts, Seiten, Kategorien und Tags, wenn sich die Sprache ändert, also muss das Theme die richtigen IDs der aktiven Sprache verwenden.

WPML enthält eine API-Funktion, die folgendes tut:

icl_object_id(ID, Typ, return_original_if_missing)

  • ID – die ID des Posts, der Seite, des Tags oder der Kategorie
  • Typ – ‘Post’, ‘Seite’, ‘Tag’ oder ‘Kategorie’
  • return_original_if_missing – wahr, wenn WPML die ID des Originalsprachelements wieder ausgibt, wenn die Übersetzung fehlt oder falsch, wenn WPML eine NULL ausgibt, wenn die Übersetzung fehlt.

Das ID-Argument kann die ID des Objekts in einer beliebigen Sprache sein. Die Funktion sucht die Übersetzungsgruppe für dieses Objekt und dann die ID des entsprechenden Objekts in der aktiven Sprache.

Anwendungsbeispiel

icl_object_id(3, 'category', false)

Ausgabe der ID der Kategorie, welche die Übersetzung der Kategorie 3 ist. Wenn diese fehlt, wird NULL ausgegeben.

Verwendung in Themes

Wenn Sie ein Theme schreiben, das mit WPML verwendet werden soll, aber möchten, dass es auch ohne WPML korrekt läuft, sollten Sie diese Abrufe mit function_exists()-Aufrufen umschließen. Zum Beispiel können Sie diese Funktion in Ihrer functions.php-Datei erstellen:

function lang_category_id($id){
  if(function_exists('icl_object_id')) {
    return icl_object_id($id,'category',true);
  } else {
    return $id;
  }
}

Diese Funktion wird die ID der übersetzten Kategorie ausgeben (sofern es diese gibt) oder die ID der Originalkategorie (wenn die Übersetzung fehlt). Wenn WPML nicht installiert ist, wird immer die Original-ID der Kategorie ausgegeben.

Ü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($ids_array, $type) {
 if(function_exists('icl_object_id')) {
  $res = array();
  foreach ($ids_array as $id) {
   $xlat = icl_object_id($id,$type,false);
   if(!is_null($xlat)) $res[] = $xlat;
  }
  return $res;
 } else {
  return $ids_array;
 }
}

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')

Eine Antwort hinterlassen

Bitte geben Sie hier nur Kommentare zu dieser Seite ab.
Um technische Unterstützung zu erhalten oder Vorschläge zu machen, besuchen Sie unser Forum. Wir warten dort auf Sie!

Sie können diese Tags verwenden:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="">