Скрыть язык WPML

Я использую язык WPML и не могу найти решения для следующей вещи:

В переключателе языков я хочу скрыть язык, скажем, например, «он», если текущий язык скажем, например, «ар», поэтому, когда мы на арабском сайте, мы не увидим в селекторе иврит, и то же самое если мы на иврите, арабский не будет отображаться.

Сокращенно: я хочу - если мы на арабском сайте - флаг на иврите будет скрыт.

Что я пробовал:

function language_selector_flags(){
    $languages = icl_get_languages('skip_missing=0');
    if(!empty($languages)){
       if(ICL_LANGUAGE_CODE=='en') 
       {
$order = array('ar'); //Specify your sort order here
       }
elseif(ICL_LANGUAGE_CODE=='he')
{
$order = array('en', 'ar'); //Specify your sort order here
}

        foreach ($order as $l) {
            if (isset($languages[$l])) {
                $l = $languages[$l]; //grab this language from the unsorted array that is returned by icl_get_languages()

                //Display whatever way you want -- I'm just displaying flags in anchors  (CSS: a {float:left; display:block;width:18px;height:12px;margin:0 2px;overflow:hidden;line-height:100px;})
                if($l['active']) { $class = "active"; $url=""; } else { $class = ''; $url = 'href="'.$l['url'].'"'; }
                echo '<a '.$url.' style="background:url('.$l['country_flag_url'].') no-repeat;" class="flag '.$class.'">';
                echo $l['language_code'].'';
            }
        }
    }
}

Это никак не влияет на селектор.


person Oshrib    schedule 03.12.2013    source источник
comment
так что вы хотите, чтобы отображался только текущий язык/флаг?   -  person birgire    schedule 23.12.2013


Ответы (4)


function language_selector_flags(){
    $languages = icl_get_languages('skip_missing=0');
    if(!empty($languages)){
        $filter = array();
        $filter['ar'] = array( 'he' );
        // set your other filters here

        $active_language = null;
        foreach ($languages as $l)
            if($l['active']) {
                $active_language = $l['language_code'];
                break;
            }

        $filter = $active_language && isset( $filter[$active_language] ) ? $filter[$active_language] : array();
        foreach ($languages as $l) {

                //Display whatever way you want -- I'm just displaying flags in anchors  (CSS: a {float:left; display:block;width:18px;height:12px;margin:0 2px;overflow:hidden;line-height:100px;})
                if( in_array( $l['language_code'], $filter) )
                    continue;
                if($l['active']) { $class = "active"; $url=""; } else { $class = ''; $url = 'href="'.$l['url'].'"'; }
                echo '<a '.$url.' class="flag '.$class.'"><img src="', $l['country_flag_url'], '" alt="', esc_attr( $l['language_code'] ), '" /></a>';
            }
        }
    }

РЕДАКТИРОВАТЬ: Если я правильно понимаю, ваш клиент (я полагаю) не хочет, чтобы его клиенты (особенно израильтяне) знали, что он предлагает услуги также арабоязычным клиентам. Если это так, вы можете проанализировать заголовок Accept-Language и отфильтровать селектор языка в соответствии с результатом.

person Boris Belenski    schedule 09.01.2014
comment
Мой клиент не хочет, чтобы арабский язык отображал кнопку израильского языка... Вы поняли. - person Oshrib; 09.01.2014
comment
ммм, это начало выглядеть так, как хочет мой клиент, за исключением ошибки и того, как выглядят флаги: hotel7777.com /?lang=ar - person Oshrib; 09.01.2014
comment
Теперь я удалил ошибку, но все еще вижу название языка на флаге.. как я могу это исправить? - person Oshrib; 09.01.2014
comment
Вы можете увидеть это в футере - person Oshrib; 09.01.2014
comment
Я отредактировал код в своем ответе, чтобы изменить имя языка на флаг языка. - person Boris Belenski; 09.01.2014

Вы можете проверить плагин флаг WPML в меню.

Вы можете использовать функцию plugin_wpml_flag_in_menu() из подключаемого модуля (см. исходный код здесь ) и заменить:

// Exclude current viewing language             
if( $l['language_code'] != ICL_LANGUAGE_CODE )
{
    // ...
}

с

// Include only the current language                
if( $l['language_code'] == ICL_LANGUAGE_CODE )
{
    // ...
}

показывать только текущий язык/флаг, если я вас правильно понял.

ps: Если вам нужна дополнительная помощь, вы можете, например, показать нам вывод этой функции отладки для активного языка:

function debug_icl_active_language()
{
    $languages = icl_get_languages( 'skip_missing=0' );
    foreach( (array) $languages as $l )
    {
        if( $l['active'] )
        { 
            printf( '<pre> Total languages: %d - Active: %s </pre>', 
                    count( $languages ), 
                    print_r( $l, TRUE ) );
        }
    }
}
person birgire    schedule 23.12.2013
comment
Эй, я хочу поднять этот вопрос... что я получаю сейчас, так это то, что текущий флаг не отображается... я хочу - если мы на арабском сайте - флаг на иврите будет скрыт hotel7777.com - person Oshrib; 06.01.2014
comment
@Bside Вы можете попробовать выполнить отладку с помощью функции debug_icl_active_language() - person birgire; 06.01.2014
comment
Можете ли вы поделиться результатом функции отладки? - person birgire; 09.01.2014


У меня похожая проблема/проблема:

На этом сайте: https://neu.member-diving.com/

У меня есть языки, которые мне не нужны в переключателе. Я попробовал код выше, но пока ничего не изменилось.

Итак, что я хотел бы сделать, так это то, что когда клиент находится на одной «немецкой» странице, другие немецкие языки в переключателе не должны быть там, только английский и настоящий немецкий.

Где мне нужно поместить код, например

function language_selector_flags(){
    $languages = icl_get_languages('skip_missing=0');
    if(!empty($languages)){
        $filter = array();
        $filter['ar'] = array( 'he' );
        // set your other filters here

        $active_language = null;
        foreach ($languages as $l)
            if($l['active']) {
                $active_language = $l['language_code'];
                break;
            }

        $filter = $active_language && isset( $filter[$active_language] ) ? $filter[$active_language] : array();
        foreach ($languages as $l) {

                //Display whatever way you want -- I'm just displaying flags in anchors  (CSS: a {float:left; display:block;width:18px;height:12px;margin:0 2px;overflow:hidden;line-height:100px;})
                if( in_array( $l['language_code'], $filter) )
                    continue;
                if($l['active']) { $class = "active"; $url=""; } else { $class = ''; $url = 'href="'.$l['url'].'"'; }
                echo '<a '.$url.' class="flag '.$class.'"><img src="', $l['country_flag_url'], '" alt="', esc_attr( $l['language_code'] ), '" /></a>';
            }
        }
    }
person Simon Vetterli    schedule 15.07.2018