Отключение уведомления по email после смены пароля
Я хочу отключить 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.

Чтобы отключить уведомление пользователя по электронной почте, добавьте это в плагин или тему:
add_filter( 'send_password_change_email', '__return_false' );
Для справки: функция wp_password_change_notification()
управляет уведомлением администратора по электронной почте, когда пользователь изменяет свой пароль.

Чтобы отключить уведомление администратора при сбросе пароля пользователем, создайте плагин (или 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/

В этом ответе есть серьезная ошибка. Название фильтра — "send_password_change_email", а не "send_email_change_email".
https://codex.wordpress.org/Plugin_API/Filter_Reference/send_password_change_email

Замечено. Для справки, эти два фильтра связаны и могут использоваться для отключения уведомлений пользователя при изменении 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

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

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

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

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

Этот вариант работает для меня, просто очистите адрес электронной почты.
// Отключение уведомления об изменении пароля по 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;
});

Скопируйте следующий код и сохраните как disable_email.php. Затем поместите этот файл в директорию "wp-content/plugins/". Активируйте через Админ-панель.
<?php
/*
Название плагина: Отключение уведомлений о смене пароля
Описание: Отключает email-уведомления при смене пароля пользователя
*/
if (!function_exists('wp_password_change_notification')) {
function wp_password_change_notification($user) {
return;
}
}
?>

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

WordPress по умолчанию отправляет уведомление при обновлении пользователя с помощью функции wp_update_user()
.
Попытки переопределить это поведение с помощью фильтров, изменения pluggable.php
или перезаписи пустой функцией не работают.
Вместо этого используйте wp_set_password( $password, $user_id )
, если вы не хотите активировать отправку email-уведомления пользователям/администраторам при сбросе пароля.

редактирование: это отключает только уведомления администратора, когда любой другой пользователь сайта меняет свой пароль. Возможно, я неправильно понял вопрос! Извините =]
Функция 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
, но если вы хотите именно отключить эту функциональность, а не изменить её, данный вариант может быть предпочтительнее.

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

Другие ответы неверны, потому что они отключают отправку email при изменении email-адреса, а не при изменении пароля.
Добавление следующего кода в файл functions.php вашей активной темы (или, альтернативно, в плагин) должно сработать. Проверено на версии 4.6.1
/**
* Отключает отправку email об изменении пароля
*/
add_filter( 'send_password_change_email', '__return_false' );
Смотрите официальную документацию

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