WP_Application_Passwords::create_new_application_password( int $user_id, array $args = array() ): array|WP_Error

Creates a new application password.


Parameters

$user_id int Required
User ID.
$args array Optional
Arguments used to create the application password.
  • namestring
    The name of the application password.
  • app_idstring
    A UUID provided by the application to uniquely identify it.

Default: array()


Top ↑

Return

array|WP_Error The first key in the array is the new password, the second is its detailed information.
A WP_Error instance is returned on error.


Top ↑

Source

File: wp-includes/class-wp-application-passwords.php. View all references

public static function create_new_application_password( $user_id, $args = array() ) {
	if ( ! empty( $args['name'] ) ) {
		$args['name'] = sanitize_text_field( $args['name'] );
	}

	if ( empty( $args['name'] ) ) {
		return new WP_Error( 'application_password_empty_name', __( 'An application name is required to create an application password.' ), array( 'status' => 400 ) );
	}

	if ( self::application_name_exists_for_user( $user_id, $args['name'] ) ) {
		return new WP_Error( 'application_password_duplicate_name', __( 'Each application name should be unique.' ), array( 'status' => 409 ) );
	}

	$new_password    = wp_generate_password( static::PW_LENGTH, false );
	$hashed_password = wp_hash_password( $new_password );

	$new_item = array(
		'uuid'      => wp_generate_uuid4(),
		'app_id'    => empty( $args['app_id'] ) ? '' : $args['app_id'],
		'name'      => $args['name'],
		'password'  => $hashed_password,
		'created'   => time(),
		'last_used' => null,
		'last_ip'   => null,
	);

	$passwords   = static::get_user_application_passwords( $user_id );
	$passwords[] = $new_item;
	$saved       = static::set_user_application_passwords( $user_id, $passwords );

	if ( ! $saved ) {
		return new WP_Error( 'db_error', __( 'Could not save application password.' ) );
	}

	$network_id = get_main_network_id();
	if ( ! get_network_option( $network_id, self::OPTION_KEY_IN_USE ) ) {
		update_network_option( $network_id, self::OPTION_KEY_IN_USE, true );
	}

	/**
	 * Fires when an application password is created.
	 *
	 * @since 5.6.0
	 *
	 * @param int    $user_id      The user ID.
	 * @param array  $new_item     {
	 *     The details about the created password.
	 *
	 *     @type string $uuid      The unique identifier for the application password.
	 *     @type string $app_id    A UUID provided by the application to uniquely identify it.
	 *     @type string $name      The name of the application password.
	 *     @type string $password  A one-way hash of the password.
	 *     @type int    $created   Unix timestamp of when the password was created.
	 *     @type null   $last_used Null.
	 *     @type null   $last_ip   Null.
	 * }
	 * @param string $new_password The unhashed generated application password.
	 * @param array  $args         {
	 *     Arguments used to create the application password.
	 *
	 *     @type string $name   The name of the application password.
	 *     @type string $app_id A UUID provided by the application to uniquely identify it.
	 * }
	 */
	do_action( 'wp_create_application_password', $user_id, $new_item, $new_password, $args );

	return array( $new_password, $new_item );
}

Top ↑

Hooks



Top ↑

Changelog

Changelog
Version Description
5.7.0 Returns WP_Error if application name already exists.
5.6.0 Introduced.

Top ↑

User Contributed Notes

  1. Skip to note 1 content
    Contributed by Danish Ali Malik

    Basic Usage
    Generate the application password for the logged-in users if not already exists.

    $user_id = get_current_user_id();
    $app_exists = WP_Application_Passwords::application_name_exists_for_user( $user_id, 'your-app-name' );
    
    if ( ! $app_exists ) {
    	$app_pass = WP_Application_Passwords::create_new_application_password( $user_id, array( 'name' => 'your-app-name' ) );
    }

You must log in before being able to contribute a note or feedback.