Функция WP_SET_PASSWORD() в WordPress: синтаксис, примеры использования, связанные функции

# Функция WP_SET_PASSWORD() в WordPress

Функция wp_set_password() используется для обновления пароля пользователя на новый, зашифрованный. Она обновляет указанный пароль в базе данных и сбрасывает кэш пользователя.

> **Важно:** Эту функцию следует использовать с осторожностью. Она предназначена для одноразового применения. Неправильное её использование в плагине или теме может привести к бесконечному циклу сброса пароля, если не будут приняты меры предосторожности.

## Понятие "плагин"

Функция wp_set_password() является "плагиновой" функцией, что означает, что её можно заменить из плагина. Это значит, что функция определяется (работает) только после загрузки всех плагинов, а до этого момента она не определена. Следовательно, вы не можете вызывать её и другие функции, зависимые от неё, напрямую из кода плагина. Их нужно вызывать на хуке plugins_loaded или позже, например, на хуке init.

Если вы хотите переопределить эту функцию, вы можете создать функцию с тем же именем в постоянном или обычном плагине. Тогда она заменит оригинальную.

## Использование функции

Синтаксис функции:

```php
wp_set_password( $password, $user_id );

Параметры

  • $password (строка, обязательный) - новый пароль пользователя в открытом виде.
  • $user_id (целое число, обязательный) - ID пользователя.

Пример 1: Сброс пароля через PHP

Вставьте следующий код в файл functions.php вашей темы. Затем перейдите на любую страницу сайта и добавьте к URL ?set_pass_for=mylogin, чтобы активировать функцию. В результате пароль пользователя mylogin будет изменен на resetpass. После этого вы можете удалить код.

if( isset($_GET['set_pass_for']) ){
    add_action('init', function () {
        $user = get_user_by( 'login', $_GET['set_pass_for'] );
        wp_set_password( 'resetpass', $user->ID ); 
    });
}

Пример 2: Изменение пароля пользователя программно

Этот код должен вызываться из функции, которая изменяет пароль.

$new_pass = trim( wp_unslash( $_POST['new_pass'] ) );
$user_id = 1;

wp_set_password( $new_pass, $user_id );

Заметки

  • Глобальный объект: $wpdb — объект абстракции базы данных WordPress.

Изменения в версии

  • С версии 2.5.0 — функция была внедрена.

Внутренний код функции

Вот как выглядит внутренняя реализация функции wp_set_password():

function wp_set_password( $password, $user_id ) {
    global $wpdb;

    $old_user_data = get_userdata( $user_id );

    $hash = wp_hash_password( $password );
    $wpdb->update(
        $wpdb->users,
        array(
            'user_pass'           => $hash,
            'user_activation_key' => '',
        ),
        array( 'ID' => $user_id )
    );

    clean_user_cache( $user_id );

    /**
     * Действие, выполняемое после установки пароля пользователя.
     */
    do_action( 'wp_set_password', $password, $user_id, $old_user_data );
}

Связанные функции

  • check_password_reset_key() - Проверяет ключ сброса пароля.
  • get_password_reset_key() - Получает ключ сброса пароля.
  • wp_check_password() - Проверяет правильность пароля пользователя.
  • wp_generate_password() - Генерирует новый пароль.
  • wp_hash_password() - Хеширует пароль.

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *