Originalsprachen-Beitrags-ID für WPML-übersetzte Beiträge ermitteln

English Deutsch

Problem:

Du hast einen Beitrag, der mit WPML in mehrere Sprachen übersetzt wurde. Du möchtest die ID des Originalbeitrags herausfinden, d.h. des äquivalenten Beitrags in der Quellsprache.

Lösung

Soweit ich weiß, gibt es dafür keine WPML-API. Du kannst jedoch $wpdb verwenden, um die Datenbank direkt abzufragen.

Hier ist die SQL-Anweisung:

wpml_original_post.sql
SELECT trans2.element_id
FROM wp_icl_translations AS trans1
INNER JOIN wp_icl_translations AS trans2
ON trans2.trid = trans1.trid
WHERE trans1.element_id = #myid#
AND trans2.source_language_code IS NULLs

wobei #myid# die ID deines aktuellen (möglicherweise übersetzten) Beitrags ist.

Der Algorithmus funktioniert so:

  1. Finde die Übersetzungs-ID (Spalte trid) für den aktuellen Beitrag, indem du die Zeile für die gegebene Beitrags-ID (Spalte element_id) auswählst
  2. Finde alle Zeilen mit derselben Übersetzungs-ID
  3. Wähle nur die Zeile, in der die Quellsprache NULL ist — dies ist der Originalbeitrag.

Du kannst es so verwenden:

wpml_get_orig.php
global $wpdb;
$orig_lang_id = $wpdb->get_var("SELECT trans2.element_id FROM wp_icl_translations AS trans1 INNER JOIN wp_icl_translations AS trans2 ON trans2.trid = trans1.trid WHERE trans1.element_id = ".get_the_ID()." AND trans2.source_language_code IS NULL");

und dann $orig_lang_id verwenden, wo erforderlich. Beachte, dass $orig_lang_id NULL ist, wenn die Abfrage fehlschlägt. Der Hauptgrund für das Fehlschlagen der Abfrage ist, dass es keinen Eintrag für die gegebene Beitrags-ID in der Tabelle wp_icl_translations gibt.

Wenn der aktuelle Beitrag der Originalbeitrag ist, ist $orig_lang_id gleich get_the_ID(), d.h. die aktuelle ID des Beitrags.

In meinem Test funktioniert der Code weiterhin (d.h. liefert die richtige Beitrags-ID) auch beim Erstellen eines brandneuen Eintrags ohne vorhandene Übersetzungen.


Check out similar posts by category: Wordpress