我想获得WPML插件中包含的所有语言的完整列表,无论它们是否处于活动状态。函数icl_get_languages()
仅返回在站点上处于活动状态的语言,因此在此处不起作用。语言列表应以当前语言环境的语言返回,并应按照特定语言对单词进行排序(例如英语:A - > Z,日语:ア - >オ)。
我做了“回答你自己的问题”,解决方案如下。完全归功于以下(我的解决方案基本上只是这三个一起):
答案 0 :(得分:0)
如果有人找到了更清洁的方法,请分享。
<?php
function get_all_langs_names( $lang ) {
global $wpdb;
$lang_data = array();
$languages = $wpdb -> get_results(
$wpdb -> prepare( "
SELECT code, english_name, active, tag, name
FROM {$wpdb -> prefix}icl_languages lang
INNER JOIN {$wpdb -> prefix}icl_languages_translations trans
ON lang.code = trans.language_code
AND trans.display_language_code=%s",
$lang )
);
foreach( $languages as $l ) {
$lang_data[$l -> code] = array(
'english_name' => $l -> english_name,
'active' => $l -> active,
'tag' => $l -> tag,
'name' => $l -> name,
);
}
return $lang_data;
}
// get language tag of current site locale...
$code = ICL_LANGUAGE_CODE;
$lang_tag = $wpdb -> get_var("
SELECT tag
FROM {$wpdb -> prefix}icl_languages
WHERE code='{$code}'"
);
// ... and then get language names associated with that tag
$languages = get_all_langs_names( $lang_tag );
// sort language array alphabetically, or however current language orders words
function sort_languages( $a, $b ) {
return strcmp( $a['name'], $b['name'] );
}
usort( $languages, 'sort_languages' );
print_r( $languages );