Title: Language_Pack_Upgrader::async_upgrade
Published: April 25, 2014
Last modified: May 20, 2026

---

# Language_Pack_Upgrader::async_upgrade( false|WP_Upgrader $upgrader = false )

## In this article

 * [Description](https://developer.wordpress.org/reference/classes/language_pack_upgrader/async_upgrade/?output_format=md#description)
 * [Parameters](https://developer.wordpress.org/reference/classes/language_pack_upgrader/async_upgrade/?output_format=md#parameters)
 * [Source](https://developer.wordpress.org/reference/classes/language_pack_upgrader/async_upgrade/?output_format=md#source)
 * [Hooks](https://developer.wordpress.org/reference/classes/language_pack_upgrader/async_upgrade/?output_format=md#hooks)
 * [Related](https://developer.wordpress.org/reference/classes/language_pack_upgrader/async_upgrade/?output_format=md#related)
 * [Changelog](https://developer.wordpress.org/reference/classes/language_pack_upgrader/async_upgrade/?output_format=md#changelog)

[ Back to top](https://developer.wordpress.org/reference/classes/language_pack_upgrader/async_upgrade/?output_format=md#wp--skip-link--target)

Asynchronously upgrades language packs after other upgrades have been made.

## 󠀁[Description](https://developer.wordpress.org/reference/classes/language_pack_upgrader/async_upgrade/?output_format=md#description)󠁿

Hooked to the [‘upgrader_process_complete’](https://developer.wordpress.org/reference/hooks/upgrader_process_complete/)
action by default.

## 󠀁[Parameters](https://developer.wordpress.org/reference/classes/language_pack_upgrader/async_upgrade/?output_format=md#parameters)󠁿

 `$upgrader`false|[WP_Upgrader](https://developer.wordpress.org/reference/classes/wp_upgrader/)
optional

[WP_Upgrader](https://developer.wordpress.org/reference/classes/wp_upgrader/) instance
or false. If `$upgrader` is a [Language_Pack_Upgrader](https://developer.wordpress.org/reference/classes/language_pack_upgrader/)
instance, the method will bail to avoid recursion. Otherwise unused.

Default:`false`

## 󠀁[Source](https://developer.wordpress.org/reference/classes/language_pack_upgrader/async_upgrade/?output_format=md#source)󠁿

    ```php
    public static function async_upgrade( $upgrader = false ) {
    	// Avoid recursion.
    	if ( $upgrader && $upgrader instanceof Language_Pack_Upgrader ) {
    		return;
    	}

    	// Nothing to do?
    	$language_updates = wp_get_translation_updates();
    	if ( ! $language_updates ) {
    		return;
    	}

    	/*
    	 * Avoid messing with VCS installations, at least for now.
    	 * Noted: this is not the ideal way to accomplish this.
    	 */
    	$check_vcs = new WP_Automatic_Updater();
    	if ( $check_vcs->is_vcs_checkout( WP_CONTENT_DIR ) ) {
    		return;
    	}

    	foreach ( $language_updates as $key => $language_update ) {
    		$update = ! empty( $language_update->autoupdate );

    		/**
    		 * Filters whether to asynchronously update translation for core, a plugin, or a theme.
    		 *
    		 * @since 4.0.0
    		 *
    		 * @param bool   $update          Whether to update.
    		 * @param object $language_update The update offer.
    		 */
    		$update = apply_filters( 'async_update_translation', $update, $language_update );

    		if ( ! $update ) {
    			unset( $language_updates[ $key ] );
    		}
    	}

    	if ( empty( $language_updates ) ) {
    		return;
    	}

    	// Re-use the automatic upgrader skin if the parent upgrader is using it.
    	if ( $upgrader && $upgrader->skin instanceof Automatic_Upgrader_Skin ) {
    		$skin = $upgrader->skin;
    	} else {
    		$skin = new Language_Pack_Upgrader_Skin(
    			array(
    				'skip_header_footer' => true,
    			)
    		);
    	}

    	$lp_upgrader = new Language_Pack_Upgrader( $skin );
    	$lp_upgrader->bulk_upgrade( $language_updates );
    }
    ```

[View all references](https://developer.wordpress.org/reference/files/wp-admin/includes/class-language-pack-upgrader.php/)
[View on Trac](https://core.trac.wordpress.org/browser/tags/7.0/src/wp-admin/includes/class-language-pack-upgrader.php#L49)
[View on GitHub](https://github.com/WordPress/wordpress-develop/blob/7.0/src/wp-admin/includes/class-language-pack-upgrader.php#L49-L105)

## 󠀁[Hooks](https://developer.wordpress.org/reference/classes/language_pack_upgrader/async_upgrade/?output_format=md#hooks)󠁿

 [apply_filters( ‘async_update_translation’, bool $update, object $language_update )](https://developer.wordpress.org/reference/hooks/async_update_translation/)

Filters whether to asynchronously update translation for core, a plugin, or a theme.

## 󠀁[Related](https://developer.wordpress.org/reference/classes/language_pack_upgrader/async_upgrade/?output_format=md#related)󠁿

| Uses | Description | 
| [Language_Pack_Upgrader_Skin::__construct()](https://developer.wordpress.org/reference/classes/language_pack_upgrader_skin/__construct/)`wp-admin/includes/class-language-pack-upgrader-skin.php` |

Constructor.

  | 
| [wp_get_translation_updates()](https://developer.wordpress.org/reference/functions/wp_get_translation_updates/)`wp-includes/update.php` |

Retrieves a list of all language updates available.

  | 
| [apply_filters()](https://developer.wordpress.org/reference/functions/apply_filters/)`wp-includes/plugin.php` |

Calls the callback functions that have been added to a filter hook.

  |

[Show 1 more](https://developer.wordpress.org/reference/classes/language_pack_upgrader/async_upgrade/?output_format=md#)
[Show less](https://developer.wordpress.org/reference/classes/language_pack_upgrader/async_upgrade/?output_format=md#)

## 󠀁[Changelog](https://developer.wordpress.org/reference/classes/language_pack_upgrader/async_upgrade/?output_format=md#changelog)󠁿

| Version | Description | 
| [3.7.0](https://developer.wordpress.org/reference/since/3.7.0/) | Introduced. |

## User Contributed Notes

You must [log in](https://login.wordpress.org/?redirect_to=https%3A%2F%2Fdeveloper.wordpress.org%2Freference%2Fclasses%2Flanguage_pack_upgrader%2Fasync_upgrade%2F)
before being able to contribute a note or feedback.