函数文档

wp_download_language_pack()

💡 云策文档标注

概述

wp_download_language_pack() 函数用于下载 WordPress 语言包。它检查语言包是否已安装,验证下载权限和可用性,并使用 Language_Pack_Upgrader 执行下载操作。

关键要点

  • 函数接受一个必需参数 $download,表示要下载的语言代码。
  • 返回值为字符串(成功下载或已安装的语言代码)或 false(失败)。
  • 内部逻辑包括检查语言包是否已存在于 get_available_languages() 中。
  • 使用 wp_is_file_mod_allowed() 验证文件修改权限。
  • 通过 wp_get_available_translations() 确认语言包可下载。
  • 依赖 Automatic_Upgrader_Skin 和 Language_Pack_Upgrader 类执行升级过程。
  • 错误处理使用 is_wp_error() 检查结果。

代码示例

function wp_download_language_pack( $download ) {
	// Check if the translation is already installed.
	if ( in_array( $download, get_available_languages(), true ) ) {
		return $download;
	}

	if ( ! wp_is_file_mod_allowed( 'download_language_pack' ) ) {
		return false;
	}

	// Confirm the translation is one we can download.
	$translations = wp_get_available_translations();
	if ( ! $translations ) {
		return false;
	}
	foreach ( $translations as $translation ) {
		if ( $translation['language'] === $download ) {
			$translation_to_load = true;
			break;
		}
	}

	if ( empty( $translation_to_load ) ) {
		return false;
	}
	$translation = (object) $translation;

	require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
	$skin              = new Automatic_Upgrader_Skin();
	$upgrader          = new Language_Pack_Upgrader( $skin );
	$translation->type = 'core';
	$result            = $upgrader->upgrade( $translation, array( 'clear_update_cache' => false ) );

	if ( ! $result || is_wp_error( $result ) ) {
		return false;
	}

	return $translation->language;
}

注意事项

  • 函数在 WordPress 4.0.0 版本中引入。
  • 相关函数包括 wp_is_file_mod_allowed()、wp_get_available_translations()、get_available_languages() 和 is_wp_error()。
  • 被 edit_user() 函数使用,用于基于 $_POST 内容编辑用户设置。

📄 原文内容

Download a language pack.

Description

See also

Parameters

$downloadstringrequired
Language code to download.

Return

string|false Returns the language code if successfully downloaded (or already installed), or false on failure.

Source

function wp_download_language_pack( $download ) {
	// Check if the translation is already installed.
	if ( in_array( $download, get_available_languages(), true ) ) {
		return $download;
	}

	if ( ! wp_is_file_mod_allowed( 'download_language_pack' ) ) {
		return false;
	}

	// Confirm the translation is one we can download.
	$translations = wp_get_available_translations();
	if ( ! $translations ) {
		return false;
	}
	foreach ( $translations as $translation ) {
		if ( $translation['language'] === $download ) {
			$translation_to_load = true;
			break;
		}
	}

	if ( empty( $translation_to_load ) ) {
		return false;
	}
	$translation = (object) $translation;

	require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
	$skin              = new Automatic_Upgrader_Skin();
	$upgrader          = new Language_Pack_Upgrader( $skin );
	$translation->type = 'core';
	$result            = $upgrader->upgrade( $translation, array( 'clear_update_cache' => false ) );

	if ( ! $result || is_wp_error( $result ) ) {
		return false;
	}

	return $translation->language;
}

Changelog

Version Description
4.0.0 Introduced.