Скрыть язык WPML
Я использую WPML язык, и не могу найти решение для следующей вещи:
на переключателе языков я хочу скрыть язык, скажем, например - "он", если текущий язык позволяет сказать, например," ar", поэтому, когда мы на арабском сайте мы не увидим на селекторе иврит, и то же самое, если мы на иврите, арабский не будет отображаться.
на сокращенных словах: то, что я хочу, - если мы на арабском сайте - еврейский флаг будет скрыт.
что я попробовал:
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'].'';
}
}
}
}
Это не влияет на селектор.
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>';
}
}
}
EDIT: если я правильно понял, ваш клиент(я полагаю) не хочет, чтобы его клиенты (израильтяне especiay) знали, что он предлагает услуги также арабоязычным cusomers. Если это так, то вы можете разобрать Accept-Language
заголовок и фильтр селектора языка в соответствии с результатом.
вы можете проверить плагин флаг 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: если вам нужна дополнительная помощь, то вы смогли для exampe показать нам выход этой функции отладки для active язык:
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 ) );
}
}
}
У меня есть полезная ссылка для Вас, пожалуйста, пройдите через нее первый:
http://wpml.org/forums/topic/hide-language-vs-display-hidden-languages-in-your-profile-not-working/
http://wpml.org/forums/topic/hide-one-language/
http://wpml.org/forums/topic/hiding-active-language-in-menu/
http://wpml.org/forums/topic/language-selector-how-to-hide-one-language/
спасибо
У меня есть аналогичная проблема/проблема:
на этом веб-сайте: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>';
}
}
}