Отключение уведомления по email после смены пароля

23 окт. 2015 г., 11:42:43
Просмотры: 60.8K
Голосов: 24

Я хочу отключить email-уведомления, если пользователь или администратор меняет пароль пользователя.

После поиска в Google я обнаружил, что мне нужно создать плагин и переопределить функцию wp_password_change_notification, которая находится в pluggable.php.

Вот плагин и функция:

<?php
/*
Plugin Name: Stop email change password
Description: Whatever
*/

if ( !function_exists( 'wp_password_change_notification' ) ) {
    function wp_password_change_notification() {}
}
?>

Я загрузил файл в папку с плагинами и активировал его в панели администратора!

Это нужно делать через плагин, потому что файл pluggable.php загружается раньше файла functions.php.

Однако у меня это не работает.

Пользователь все равно получает email.

Я отключил все плагины и запустил плагин на чистой установке, чтобы исключить конфликты

WP_DEBUG также не показывает никаких ошибок!

Может кто-нибудь подсказать, что изменить или как исправить это другим способом (кроме модификации ядра :-))

M.

1
Комментарии

Я тоже долго мучился и пробовал создавать/использовать кастомный плагин, отключая WordPress-фильтры, но ничего не помогало... И только сегодня я наткнулся на плагин Manage Notification E-mails, и он сработал :)

Leander Leander
26 февр. 2016 г. 11:40:14
Все ответы на вопрос 9
0
37

Чтобы отключить уведомление пользователя по электронной почте, добавьте это в плагин или тему:

add_filter( 'send_password_change_email', '__return_false' );

Для справки: функция wp_password_change_notification() управляет уведомлением администратора по электронной почте, когда пользователь изменяет свой пароль.

23 окт. 2015 г. 22:58:04
3
33

Чтобы отключить уведомление администратора при сбросе пароля пользователем, создайте плагин (или Must Use Plugin) со следующим кодом:

/**
 * Отключаем уведомление администратора о смене пароля пользователя
 *
 * @see pluggable.php
 */
if ( ! function_exists( 'wp_password_change_notification' ) ) {
    function wp_password_change_notification( $user ) {
        return;
    }
}

Это предотвратит отправку следующего письма на email администратора из Настроек > Общие:

От: WordPress <wordpress@example.com>
Кому: admin@example.com
Тема: [WordPress] Пароль изменён

Пароль изменён для пользователя: username

Отключение этого уведомления должно обрабатываться плагином, потому что pluggable.php загружается раньше, чем файл functions.php темы.


Если вы хотите отключить уведомление пользователя об успешном изменении его пароля, используйте следующий фильтр в файле functions.php:

/**
 * Отключаем уведомление пользователя о подтверждении смены пароля
 */
add_filter( 'send_password_change_email', '__return_false' );

Это подавит отправку следующего письма:

От: WordPress <wordpress@example.com>
Кому: username@example.com
Тема: [WordPress] Пароль изменён

Привет username,

Это уведомление подтверждает, что ваш пароль был изменён в WordPress.

Если вы не меняли пароль, пожалуйста, свяжитесь с администратором сайта admin@example.com

Это письмо отправлено на username@example.com

С уважением,
Команда WordPress
http://example.com/

5 мая 2017 г. 21:03:59
Комментарии

В этом ответе есть серьезная ошибка. Название фильтра — "send_password_change_email", а не "send_email_change_email".

https://codex.wordpress.org/Plugin_API/Filter_Reference/send_password_change_email

Tristan CHARBONNIER Tristan CHARBONNIER
6 апр. 2018 г. 11:29:40

Замечено. Для справки, эти два фильтра связаны и могут использоваться для отключения уведомлений пользователя при изменении email или пароля пользователем. Использование того или иного зависит от того, какое уведомление вы хотите подавить — изменение email или изменение пароля. Для ясности обратитесь к функции WordPress wp_update_user() в wp-includes/user.php: https://core.trac.wordpress.org/browser/tags/4.9.5/src/wp-includes/user.php#L1795

rjb rjb
6 апр. 2018 г. 19:15:04

Привет, почему функция wp_password_change_notification будет выполняться, если уже существует функция с таким же именем?

danny danny
13 мар. 2023 г. 22:05:02
4

Если вы используете WooCommerce:

Начиная с версии WC 3.8.0 (ноябрь 2019), появился специальный фильтр-хук для этого:

add_filter('woocommerce_disable_password_change_notification', '__return_true');

Должен отключить уведомления об изменении пароля.

22 апр. 2020 г. 14:00:50
Комментарии

этот хук работает только при использовании WooCommerce (версии 3.8, а не WordPress 3.8)

Rafa Rafa
13 мая 2020 г. 12:22:59

@Rafa Ой, точно, я так много работал с разработкой под WC + WP, что границы стёрлись. Спасибо, поправил ответ.

Mikepote Mikepote
14 мая 2020 г. 15:25:42

Учтите, что это отключит письмо сброса пароля для пользователей (см. /woocommerce/includes/shortcodes/class-wc-shortcode-my-account.php) и не связано с уведомлениями для администраторов...

Leander Leander
4 окт. 2022 г. 21:35:53

Хук 'woocommerce_disable_password_change_notification' действительно отключает уведомление "Пароль изменён", которое отправляется администратору на сайтах WooCommerce. Как видно в файле /woocommerce/includes/shortcodes/class-wc-shortcode-my-account.php, он предотвращает выполнение функции wp_password_change_notification(), которая, согласно WordPress Developer Reference, "Уведомляет администратора блога об изменении пароля пользователя".

Abundant Designs Abundant Designs
10 мар. 2023 г. 20:12:07
1

Этот вариант работает для меня, просто очистите адрес электронной почты.

// Отключение уведомления об изменении пароля по email.
add_filter('wp_password_change_notification_email', function ($wp_password_change_notification_email) {
    $wp_password_change_notification_email['to'] = '';
    return $wp_password_change_notification_email;
});
10 февр. 2022 г. 17:35:23
Комментарии

Это лучший способ сделать это сейчас. Когда вопрос был задан впервые, wp_password_change_notification_email не существовало (эта функция была добавлена в WordPress 4.9).

butlerblog butlerblog
29 мар. 2022 г. 19:21:41
6

Скопируйте следующий код и сохраните как disable_email.php. Затем поместите этот файл в директорию "wp-content/plugins/". Активируйте через Админ-панель.

<?php
/*
Название плагина: Отключение уведомлений о смене пароля
Описание: Отключает email-уведомления при смене пароля пользователя
*/

if (!function_exists('wp_password_change_notification')) {
    function wp_password_change_notification($user) {
        return;
    }
}
?>
23 окт. 2015 г. 11:51:06
Комментарии

Чем это отличается от того, что я сделал?

Interactive Interactive
23 окт. 2015 г. 11:57:28

Вы создали плагин и поместили в него свой код?

Sabbir Hasan Sabbir Hasan
23 окт. 2015 г. 12:05:48

Да, именно это я и пытался описать. Обновлю вопрос, если было не понятно!

Interactive Interactive
23 окт. 2015 г. 12:09:20

Попробуйте сейчас. Я обновил ответ. Теперь должно работать!

Sabbir Hasan Sabbir Hasan
23 окт. 2015 г. 12:13:18

Ха, я только что нашел и попробовал это, но не сработало!

Interactive Interactive
23 окт. 2015 г. 12:15:59

@Interactive Сначала нужно включить плагин. У меня сработало.

Max S. Max S.
9 дек. 2019 г. 01:46:25
Показать остальные 1 комментариев
0

WordPress по умолчанию отправляет уведомление при обновлении пользователя с помощью функции wp_update_user().

Попытки переопределить это поведение с помощью фильтров, изменения pluggable.php или перезаписи пустой функцией не работают.

Вместо этого используйте wp_set_password( $password, $user_id ), если вы не хотите активировать отправку email-уведомления пользователям/администраторам при сбросе пароля.

23 февр. 2016 г. 13:55:11
2

редактирование: это отключает только уведомления администратора, когда любой другой пользователь сайта меняет свой пароль. Возможно, я неправильно понял вопрос! Извините =]

Функция wp_password_change_notification отвечает в WordPress за отправку администраторам email-уведомлений об изменении паролей пользователей (как уже упоминалось в других ответах).

Что я не увидел в обсуждении — в файле ./wp-includes/default-filters.php примерно на строке 499 (на момент написания) эта функция добавляется к действию after_password_reset.

Быстрое решение — просто удалить её из списка действий:

remove_action( 'after_password_reset', 'wp_password_change_notification' );

Вы можете полностью переопределить wp_password_change_notification, так как это одна из функций pluggable.php, но если вы хотите именно отключить эту функциональность, а не изменить её, данный вариант может быть предпочтительнее.

1 мар. 2023 г. 19:15:08
Комментарии

Добавлю, что действие after_password_reset выполняется после процедуры сброса пароля (экран входа). Отправку уведомления об изменении пароля в результате редактирования профиля можно контролировать с помощью фильтра send_password_change_email.

nmr nmr
4 мар. 2023 г. 13:16:41

Упс! Ваш комментарий заставил меня осознать, что я, возможно, неправильно понял этот вопрос. Я искал способ отключить уведомление администратора, когда любой пользователь сайта меняет свой пароль. Я отредактирую, чтобы отметить это быстро - спасибо @nmr

Rohjay Rohjay
7 мар. 2023 г. 21:03:26
1

Другие ответы неверны, потому что они отключают отправку email при изменении email-адреса, а не при изменении пароля.

Добавление следующего кода в файл functions.php вашей активной темы (или, альтернативно, в плагин) должно сработать. Проверено на версии 4.6.1

/**
 * Отключает отправку email об изменении пароля
 */
add_filter( 'send_password_change_email', '__return_false' );

Смотрите официальную документацию

14 июн. 2017 г. 07:43:59
Комментарии

Не все другие ответы могут быть неправильными, и новые ответы публикуются постоянно. Вам следует быть более конкретным в своем ответе, когда вы ссылаетесь на "другие" ответы.

Sparky Sparky
10 дек. 2019 г. 22:01:10
0

Для обновления пароля используйте функцию wp_set_password() вместо wp_update_user(), так как это не вызовет отправку уведомления по электронной почте.

17 дек. 2017 г. 10:01:52