2013-12-03 3 views
14

Я использую 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'].''; 
      } 
     } 
    } 
} 

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

+0

так что вы хотите, чтобы отображался текущий язык/флаг? – birgire

ответ

3
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>'; 
      } 
     } 
    } 

EDIT: Если я получаю это право, ваш клиент (я предполагаю) не хочет, чтобы его клиенты (израильтяне especiay), чтобы знать, что он предлагает услугу также арабские говорящие кузомеры. Если это так, вы можете проанализировать заголовок Accept-Language и отфильтровать селектор языка в соответствии с результатом.

+0

Мой клиент не хочет, чтобы арабский язык видел язык израильского языка ... у вас появилась идея. – Oshrib

+0

mmm его начало выглядеть как мой клиент, за исключением ошибки и того, как выглядят флаги: http://www.hotel7777.com/?lang=ar – Oshrib

+0

Теперь я удалил ошибку, но все же я вижу имя lang, на флаге ..как я могу это исправить? – Oshrib

6

Вы можете проверить плагин WPML Flag In Menu.

Вы можете использовать функцию plugin_wpml_flag_in_menu() из плагина (see source code here) и заменить:

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

с

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

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

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

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)); 
     } 
    } 
} 
+0

Эй, я хочу ответить на этот вопрос ... то, что я получаю сейчас, это текущий флаг, который не отображается ... что я хочу - если мы на арабском сайте - иврит флаг будет скрыт http: // www. hotel7777.com/ – Oshrib

+0

@Bside Вы можете попробовать отладить функцию 'debug_icl_active_language()' – birgire

+0

Не могу получить результат, который я хочу ... – Oshrib

Смежные вопросы