获取 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。
算法的工作方式如下:
- 通过选择给定文章 ID(列
element_id)的行,找出当前文章的翻译 ID(列trid) - 找出具有相同翻译 ID 的所有行
- 仅选择源语言为
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_id 为 NULL。查询失败的主要原因是 wp_icl_translations 表中没有给定文章 ID 的条目。
如果当前文章是源文章,$orig_lang_id 与 get_the_ID() 相同,即文章的当前 ID。
在我的测试中,即使创建没有任何翻译的全新条目,代码仍然有效(即返回正确的文章 ID)。
Check out similar posts by category:
Wordpress
If this post helped you, please consider buying me a coffee or donating via PayPal to support research & publishing of new posts on TechOverflow