WPML - 获取所有插件语言的排序列表,包括活动和非活动

时间:2017-03-30 04:11:38

标签: php wordpress wpml

我想获得WPML插件中包含的所有语言的完整列表,无论它们是否处于活动状态。函数icl_get_languages()仅返回在站点上处于活动状态的语言,因此在此处不起作用。语言列表应以当前语言环境的语言返回,并应按照特定语言对单词进行排序(例如英语:A - > Z,日语:ア - >オ)。

我做了“回答你自己的问题”,解决方案如下。完全归功于以下(我的解决方案基本上只是这三个一起):

1 个答案:

答案 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 );