函数文档

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.