# Функция 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()- Хеширует пароль.