WPML
apply_filters( 'wpml_active_languages', mixed $empty_value, array|string $args )
类型
filter
WPML 版本
3.2

说明

筛选站点的已启用(活动)语言列表。此过滤器通常用于创建自定义语言切换器。

此过滤器只有在全局 $wp_query 对象实例化后才能起作用。这意味着它应该在 wp action 发生之后调用。

WPML 将站点的活动(已启用)语言作为数组返回,其中包含每种语言的相关信息。例如,对于一个运行英语、法语和意大利语的 WordPress 站点,该钩子将返回以下内容:

Array

(

 [en] => Array

  (

   [id] => 1

   [active] => 1

   [default_locale] => en_US

   [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

   [default_locale] => fr_FR

   [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

   [default_locale] => it_IT

   [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

  )

)

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

使用示例

请记住转义任何输出。请参阅有关数据清理/转义的页面,以了解有关最佳实践的更多信息。

过滤器的参数可以作为字符串传递给它,如下面的第一个示例所示。它们也可以作为数组传递,正如您在更下方的第二个示例中看到的那样。

在下面的示例中,我们显示一个仅包含旗帜的语言切换器。但是,这与您可以在管理后台的“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'] ) . '">';
            echo '<img src="' . esc_url ( $l['country_flag_url'] ) . '" height="12" alt="' . esc_attr( $l['language_code'] ) . '" width="18" />';
            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

所有 29 个 全站语言信息 钩子 →