问题描述
我正在使用WPML和他的切换器来更改网站的语言。到目前为止,一切都运行良好,只是活动语言标记未更改为显示当前语言。
这是我到目前为止编写的代码。它只是始终显示第一个标志,而不会将其更改为活动标志。
<?php
if(function_exists('icl_get_languages')):
$languages = icl_get_languages('skip_missing=0');
if(count($languages) >= 1):
?>
<div class="topbar-lang-switcher">
<ul class="lang-switcher-polylang">
<?php
foreach((array)$languages as $language):
?>
<li class="current-lang">
<a rel="alternate" hreflang="<?php echo $language['language_code']; ?>" href="<?php echo $language['url']; ?>">
<img src="<?php echo $language['country_flag_url']; ?>" alt="<?php echo $language['native_name']; ?>" title="<?php echo $language['native_name']; ?>" />
<span><?php echo $language['language_code']; ?> </span>
</a>
</li>
<?php
endforeach;
?>
</ul>
</div>
<?php
endif;
endif;
?>
有人可以帮助您将标志更改为当前使用的语言吗?
解决方法
根据WPML的官方documentation,icl_get_languages()
函数返回具有以下格式的语言数组:
Array
(
[en] => Array
(
[id] => 1
[active] => 1
[native_name] => English
[missing] => 0
[translated_name] => English
[language_code] => en
[country_flag_url] => http://yourdomain/wpmlpath/res/flags/en.png
[url] => http://yourdomain/about
)
[fr] => Array
(
[id] => 4
[active] => 0
[native_name] => Français
[missing] => 0
[translated_name] => French
[language_code] => fr
[country_flag_url] => http://yourdomain/wpmlpath/res/flags/fr.png
[url] => http://yourdomain/fr/a-propos
)
[it] => Array
(
[id] => 27
[active] => 0
[native_name] => Italiano
[missing] => 0
[translated_name] => Italian
[language_code] => it
[country_flag_url] => http://yourdomain/wpmlpath/res/flags/it.png
[url] => http://yourdomain/it/circa
)
)
有一个active
字段,用于说明当前语言。这样您就可以拥有类似的内容:
...
foreach((array)$languages as $language):
?>
<li <?php echo ($language['active'] == 1) ? 'class="current-lang"' : '' ?>>
<a rel="alternate" hreflang="<?php echo $language['language_code']; ?>" href="<?php echo $language['url']; ?>">
<img src="<?php echo $language['country_flag_url']; ?>" alt="<?php echo $language['native_name']; ?>" title="<?php echo $language['native_name']; ?>" />
<span><?php echo $language['language_code']; ?> </span>
</a>
</li>
<?php
endforeach;
...
这样,仅活动(当前)语言的<li>
将具有current-lang
类。之后,您所需要做的就是应用正确的CSS。