mu_dropdown_languages()
云策文档标注
概述
mu_dropdown_languages() 函数用于生成并显示一个可用语言的下拉菜单,适用于 WordPress 多站点环境。它处理语言文件数组,生成带翻译名称的 HTML 选项,并支持过滤钩子。
关键要点
- 函数接受两个可选参数:$lang_files(语言文件数组,默认为空数组)和 $current(当前语言代码,默认为空字符串)。
- 核心逻辑遍历语言文件,基于文件名为 en_US 和 en_GB 提供特殊翻译(如“American English”),其他语言使用 format_code_lang() 获取翻译名称。
- 输出通过 uksort() 按名称排序,并应用 mu_dropdown_languages 过滤器,允许开发者自定义下拉菜单内容。
- 函数直接输出 HTML,使用 echo 和 implode() 生成下拉选项列表。
代码示例
function mu_dropdown_languages( $lang_files = array(), $current = '' ) {
$flag = false;
$output = array();
foreach ( (array) $lang_files as $val ) {
$code_lang = basename( $val, '.mo' );
if ( 'en_US' === $code_lang ) { // American English.
$flag = true;
$ae = __( 'American English' );
$output[ $ae ] = '<option value="en_US"' . selected( $current, 'en_US', false ) . '>' . esc_html( $ae ) . '</option>';
} elseif ( 'en_GB' === $code_lang ) { // British English.
$flag = true;
$be = __( 'British English' );
$output[ $be ] = '<option value="en_GB"' . selected( $current, 'en_GB', false ) . '>' . esc_html( $be ) . '</option>';
} else {
$translated = format_code_lang( $code_lang );
$output[ $translated ] = '<option value="' . esc_attr( $code_lang ) . '"' . selected( $current, $code_lang, false ) . '>' . esc_html( $translated ) . '</option>';
}
}
if ( false === $flag ) { // WordPress English.
$output[] = '<option value="en"' . selected( $current, 'en', false ) . '>' . __( 'English' ) . '</option>';
}
// Order by name.
uksort( $output, 'strnatcasecmp' );
/**
* Filters the languages available in the dropdown.
*
* @since MU (3.0.0)
*
* @param string[] $output Array of HTML output for the dropdown.
* @param string[] $lang_files Array of available language files.
* @param string $current The current language code.
*/
$output = apply_filters( 'mu_dropdown_languages', $output, $lang_files, $current );
echo implode( "nt", $output );
}注意事项
- 此函数专为多站点设计,从 WordPress 3.0.0 版本引入,使用时需确保环境支持。
- 输出直接 echo,不返回字符串,适用于在模板或管理界面中直接显示下拉菜单。
- 依赖 format_code_lang()、selected()、__()、esc_attr()、esc_html() 和 apply_filters() 等辅助函数,确保这些函数可用。
- 通过 mu_dropdown_languages 过滤器,开发者可以修改输出数组,实现自定义语言选项或样式。
原文内容
Generates and displays a drop-down of available languages.
Parameters
$lang_filesstring[]optional-
An array of the language files.
Default:
array() $currentstringoptional-
The current language code. Default empty.
Source
function mu_dropdown_languages( $lang_files = array(), $current = '' ) {
$flag = false;
$output = array();
foreach ( (array) $lang_files as $val ) {
$code_lang = basename( $val, '.mo' );
if ( 'en_US' === $code_lang ) { // American English.
$flag = true;
$ae = __( 'American English' );
$output[ $ae ] = '<option value="' . esc_attr( $code_lang ) . '"' . selected( $current, $code_lang, false ) . '> ' . $ae . '</option>';
} elseif ( 'en_GB' === $code_lang ) { // British English.
$flag = true;
$be = __( 'British English' );
$output[ $be ] = '<option value="' . esc_attr( $code_lang ) . '"' . selected( $current, $code_lang, false ) . '> ' . $be . '</option>';
} else {
$translated = format_code_lang( $code_lang );
$output[ $translated ] = '<option value="' . esc_attr( $code_lang ) . '"' . selected( $current, $code_lang, false ) . '> ' . esc_html( $translated ) . '</option>';
}
}
if ( false === $flag ) { // WordPress English.
$output[] = '<option value=""' . selected( $current, '', false ) . '>' . __( 'English' ) . '</option>';
}
// Order by name.
uksort( $output, 'strnatcasecmp' );
/**
* Filters the languages available in the dropdown.
*
* @since MU (3.0.0)
*
* @param string[] $output Array of HTML output for the dropdown.
* @param string[] $lang_files Array of available language files.
* @param string $current The current language code.
*/
$output = apply_filters( 'mu_dropdown_languages', $output, $lang_files, $current );
echo implode( "nt", $output );
}
Hooks
- apply_filters( ‘mu_dropdown_languages’, string[] $output, string[] $lang_files, string $current )
-
Filters the languages available in the dropdown.
Changelog
| Version | Description |
|---|---|
| 3.0.0 | Introduced. |