apply_filters( 'wpml_active_languages', mixed $empty_value, array|string $args )
- 类型
- filter
- 类别
- 全站语言信息
- WPML 版本
- 3.2
说明
过滤为网站启用的(活动的)语言列表。此过滤器通常用于创建自定义语言切换器。
仅当全局 $wp_query (在新标签页中打开) 对象实例化后,此过滤器才能工作。这意味着它应在 wp action (在新标签页中打开) 发生后调用。
WPML 将网站的活动(已启用)语言作为数组返回,并包含每种语言的信息。以下示例来自 WPML 5.0 网站。其默认语言为英语(美国),德语在 /de-de/ 提供,阿拉伯语在 /ar/ 提供:
Array ( [en-us] => Array ( [id] => 1 [active] => 1 [default_locale] => en_US [native_name] => English (United States) [missing] => 0 [translated_name] => English (United States) [language_code] => en-us [country] => US [display_code] => en-us [country_flag_url] => https://example.com/wp-content/plugins/sitepress-multilingual-cms/res/flags/country/us.svg [url] => https://example.com/about ) [de] => Array ( [id] => 3 [active] => 0 [default_locale] => de_DE [native_name] => Deutsch [missing] => 0 [translated_name] => German [language_code] => de [country] => DE [display_code] => de-de [country_flag_url] => https://example.com/wp-content/plugins/sitepress-multilingual-cms/res/flags/country/de.svg [url] => https://example.com/de-de/ueber-uns ) [ar] => Array ( [id] => 30 [active] => 0 [default_locale] => ar [native_name] => العربية [missing] => 0 [translated_name] => Arabic [language_code] => ar [country] => [display_code] => ar [country_flag_url] => https://example.com/wp-content/plugins/sitepress-multilingual-cms/res/flags/language/ar.svg [url] => https://example.com/ar/about ) )
url 读取语言地址。切勿通过 language_code 构建。上面的德语代码为 de,地址为 /de-de/。当您在同一步骤中添加同一语言的两个国家/地区时,WPML 会限定 URL 代码,网站所有者也可以编辑它,并且在域名模式下,地址为所有者输入的域名。WPML 5.0 中的键
- language_code 是存储的代码。带有国家/地区的语言会在代码中包含该国家/地区,例如
en-us或de-at。德语、西班牙语、法语、意大利语和荷兰语为其本国保留纯代码(de、es、fr、it、nl)。葡萄牙语和中文始终带有国家/地区。阿拉伯语和其他单国家/地区语言不带国家/地区。语言会保留其创建时的代码,因此升级的网站可以使用en,而新网站使用en-us。 - country 是语言的国家/地区代码。对于没有国家/地区的语言,它为空。
- display_code 是 WPML 在 URL 中使用的代码。当 WPML 限定代码或网站所有者编辑它时,它与
language_code不同。要在您自己的代码中读取相同的映射,请使用 wpml_language_codes_map 过滤器。 - country_flag_url 是旗帜的 URL。当网站显示语言代码而不是旗帜时,它是一个空字符串,因此在打印之前请测试该值。对于带有国家/地区的语言,WPML 自己的旗帜为
res/flags/country/<country>.svg;对于没有国家/地区的语言,则为res/flags/language/<code>.svg。自定义旗帜来自 uploads 文件夹。切勿自己构建路径:res/flags/sv.svg是瑞典的旗帜,res/flags/country/sv.svg是萨尔瓦多的旗帜。
在尚未完成 WPML 升级的网站上,country 可能是 NULL,并且 display_code 可能不存在。在读取它们之前,请使用 isset()。
wpml_active_languages 过滤器提供了一种方法来执行诸如重新排序语言数组之类的操作。或者更复杂的操作,例如将缺失的语言重定向到自定义 URL。
参数
- $empty_value
- (mixed) (必填) 这通常是过滤器将要修改的值。我们在这里不进行任何过滤,因此将其设置为 NULL。这是为了让过滤器函数实际接收完整的参数列表。
- $args
- (array|string) (可选) 用于过滤语言输出的参数
- skip_missing(bool) 如何处理没有翻译的语言。
1表示跳过该语言,或者0表示对于缺失翻译的语言链接到该语言的主页。 - link_empty_to(string) 与 skip_missing = 0 结合使用,允许为当前元素没有翻译的语言使用自定义链接。
{%lang}可用作语言代码的占位符。默认情况下为空。 - orderby(string) 接受
id|code|name。默认为 custom。可以在 WordPress 管理后台的 WPML » 设置 » 语言切换器 » 语言切换器选项下定义自定义顺序。 - order(string) 接受
asc|desc
- skip_missing(bool) 如何处理没有翻译的语言。
使用示例
过滤器的参数可以作为字符串传递给它,如下面的第一个示例所示。它们也可以作为数组传递,正如您在更下方的第二个示例中看到的那样。
在下面的示例中,我们显示一个仅包含旗帜的语言切换器。但是,这与您可以在管理后台的“WPML 语言设置”中配置的仅包含旗帜的语言切换器有一点小区别。
这里的区别在于,当前语言不会被包裹在锚点中。只有页面的备用语言才会带有链接。请看。
示例
function my_flag_only_language_switcher() {
$languages = apply_filters( 'wpml_active_languages', NULL, 'orderby=id&order=desc' );
if ( !empty( $languages ) ) {
foreach( $languages as $l ) {
if ( !$l['active'] ) echo ' <a href="' . esc_url( $l['url'] ) . '">';
if ( '' !== $l['country_flag_url'] ) {
echo '<img src="' . esc_url( $l['country_flag_url'] ) . '" height="12" alt="' . esc_attr( $l['language_code'] ) . '" width="18" />';
} else {
echo esc_html( $l['language_code'] );
}
if ( !$l['active'] ) echo '</a> ';
}
}
}
在您看到的下一个示例中,我们将缺失的语言重定向到一个自定义页面,在该页面上我们显示一个联系表单,以便人们通知站点管理员有关未翻译的内容。
我们还使用 PHP 的
strtoupper 函数将活动语言(即我们当前正在查看的语言)的语言名称大写。
第二个示例
function my_custom_language_switcher() {
$languages = apply_filters( 'wpml_active_languages', NULL, array( 'skip_missing' => 0, 'link_empty_to' => 'http://domain.com/missing-translation-contact-form' ) );
if( !empty( $languages ) ) {
foreach( $languages as $language ){
$native_name = $language['active'] ? strtoupper( $language['native_name'] ) : $language['native_name'];
if( !$language['active'] ) echo '<a href="' . esc_url( $language['url'] ) . '">';
echo esc_html( $native_name ) . ' ';
if( !$language['active'] ) echo '</a>';
}
}
}
相关钩子
wpml_decode_custom_field, wpml_footer_language_selector, wpml_add_language_form_field, wpml_ls_exclude_in_menu, wpml_is_rtl, wpml_alternate_hreflang, wpml_head_langs, wpml_must_translate_canonical_url, wpml_browser_redirect_language_params, wpml_encode_custom_field