coffee

Как убрать возможность восстановления и смены пароля из WordPress

Зачем убирать восстановление или смену пароля в WordPress

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

Способ первый: убираем опцию восстановления пароля через плагин

Способ с плагином проще и удобнее. Он позволяет вам настроить отмену восстановления пароля для всех пользователей. Вам надо установить и активировать плагин Reset Password Removed.

Примечание: Reset Password Removed отключает восстановление пароля для всех пользователей, включая администраторов.

После активации плагин автоматически убирает ссылку «Забыли пароль?» и блокирует возможность восстановления пароля для всех пользователей.

Способ второй: вручную убираем функцию восстановления пароля в WordPress

Если вы предпочитаете не устанавливать дополнительные плагины, или хотите точечно отключать восстановление пароля для определённых пользователей, можно использовать кастомный код. Для этого откройте любой текстовый редактор и создайте файл, например disable-password-reset.php. Вставьте в него один из ниже приведённых вариантов кода.

Отключение для всех пользователей

Вариант 1: блокировка с перенаправлением и удалением ссылки «Забыли пароль?»

Следующий код полностью блокирует возможность восстановления пароля для всех пользователей, убирает ссылку «Забыли пароль?» на странице входа и перенаправляет всех, кто попытается открыть стандартную страницу сброса пароля, обратно на страницу входа:

<?php
add_filter( 'allow_password_reset', '__return_false' );
add_action( 'login_init', function() {
    if ( isset( $_GET['action'] ) && in_array( $_GET['action'], ['lostpassword', 'retrievepassword'] ) ) {
        wp_redirect( wp_login_url(), 301 ); // Перенаправляет всех на страницу входа
        exit;
    }
});
add_filter( 'gettext', function( $text ) {
    return ( $text === 'Lost your password?' ) ? '' : $text;
});
?>

Вариант 2: блокировка с сохранением возможности восстановления для администраторов

Другой код также полностью блокирует возможность восстановления пароля для всех пользователей и убирает ссылку «Забыли пароль?» на странице входа. Администраторы смогут восстанавливать пароли через админпанель, при этом для обычных пользователей восстановление полностью недоступно:

<?php
class Password_Reset_Removed {
    function __construct() {
        add_filter('show_password_fields', array($this, 'disable'));
        add_filter('allow_password_reset', array($this, 'disable'));
        add_filter('gettext', array($this, 'remove'));
    }

    function disable() {
        $userdata = wp_get_current_user();
        $user = new WP_User($userdata->ID);
        if ( ! empty( $user->roles ) && is_array( $user->roles ) && $user->roles[0] == 'administrator' ) {
            return true; // Администраторы сохраняют возможность восстановления через админпанель
        }
        return false; // Остальные пользователи не могут
    }

    function remove($text) {
        return str_replace(array('Lost your password?', 'Lost your password'), '', trim($text, '?'));
    }
}

$pass_reset_removed = new Password_Reset_Removed();
?>

Отключение для определённых ролей или пользователей

Если нужно блокировать восстановление пароля только для конкретных ролей или отдельных пользователей, используйте код с проверкой ролей или ID пользователей:

Блокировка для всех кроме администраторов:

<?php
add_filter('allow_password_reset', function($allow, $user_id) {
    $user = get_userdata($user_id);
    if (in_array('administrator', $user->roles)) return true; // Администраторы могут сбрасывать пароль
    return false; // Все остальные пользователи не могут
}, 10, 2);
?>

Блокировка для конкретных пользователей по ID:

<?php
add_filter('allow_password_reset', function($allow, $user_id) {
    $blocked_users = [3, 7, 15]; // ID пользователей, для которых восстановление заблокировано
    if (in_array($user_id, $blocked_users)) return false;
    return true; // Остальные пользователи могут сбрасывать пароль
}, 10, 2);
?>

Сохраните ваш файл. Затем соединитесь со своим сайтом по FTP и зайдите в папку wp-content/plugins.

WordPress

Загрузите созданный вами файл в эту папку. Теперь зайдите в админку на страницу Plugins, где вы увидите новый плагин Disable Password Reset в списке установленных. Активируйте его.

WordPress

После активации восстановление пароля будет отключено в соответствии с выбранным вариантом: полностью для всех пользователей, только для обычных пользователей, или для выбранных ролей и конкретных пользователей.


Наша специальность — разработка и поддержка сайтов на WordPress. Контакты для бесплатной консультации — [email protected], +371 29394520


0 ответы

Ответить

Хотите присоединиться к обсуждению?
Не стесняйтесь вносить свой вклад!

Добавить комментарий