获取 WPML 翻译文章的原始语言文章 ID

问题:

你有一篇使用 WPML 翻译成多种语言的文章。 你想找出原始文章的 ID,即源语言中的等效文章。

解决方案

据我所知,没有 WPML API 用于此目的。但是,你可以使用 $wpdb 直接查询数据库。

以下是 SQL 语句:

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

其中 #myid# 是你当前(可能已翻译)文章的 ID。

算法的工作方式如下:

  1. 通过选择给定文章 ID(列 element_id)的行,找出当前文章的翻译 ID(列 trid
  2. 找出具有相同翻译 ID 的所有行
  3. 仅选择源语言为 NULL 的行 - 这是原始文章。

你可以这样使用它:

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");

然后在需要的地方使用 $orig_lang_id。注意如果查询失败,$orig_lang_idNULL。查询失败的主要原因是 wp_icl_translations 表中没有给定文章 ID 的条目。

如果当前文章是源文章,$orig_lang_idget_the_ID() 相同,即文章的当前 ID。

在我的测试中,即使创建没有任何翻译的全新条目,代码仍然有效(即返回正确的文章 ID)。


Check out similar posts by category: Wordpress