If you manage a WordPress site with more than a handful of registered users, you already know this specific headache.
Someone forgets their password, they hit the reset link, and WordPress immediately fires an email straight to your admin inbox to let you know.
Why do you need to know? You don’t.
When you are running a membership site, a busy WooCommerce store, or a lively community forum, those automated notifications turn into a relentless flood of inbox clutter.
You don’t need a ping every time someone can’t remember their login credentials. You just need the noise to stop.
Fortunately, shutting this feature off is straightforward if you use the right hook.
The Clean Fix: Use a PHP Filter (Recommended)
The smartest and safest way to kill this notification is by hijacking the email right before the system tries to send it.
WordPress introduced a specific filter (wp_password_change_notification_email) back in version 4.9 exactly for this kind of manipulation.
Instead of wrestling with core files, we just use a snippet to empty the recipient address. When WordPress sees a blank ‘to’ field, it quietly aborts the email and moves on.
Drop this into your child theme’s functions.php file or your preferred snippet manager:
// Disable admin notification for user password resets (PHP 8 Safe)
add_filter( 'wp_password_change_notification_email', function( $email_data ) {
// Empty the recipient address so wp_mail() safely aborts
$email_data['to'] = '';
return $email_data;
} );
A quick warning on outdated advice: You might find older tutorials floating around forums telling you to just use __return_false for this filter. Don’t do that.
Modern servers running PHP 8.0 or higher will throw fatal array offset warnings if you try that shortcut. The snippet above is the safe, modern route.
The Legacy Fix: Overriding the Pluggable Function
If you are digging through ten-year-old developer threads, you might see a method suggesting you completely override the core pluggable function instead. It usually looks like this:
if ( ! function_exists( 'wp_password_change_notification' ) ) {
function wp_password_change_notification() {}
}
Skip this method.
Because WordPress loads pluggable.php before it even looks at your theme’s functions.php file, dropping this into your theme will just trigger errors.
You would have to manually access your server and build a custom “mu-plugin” (must-use plugin) just to force the load order.
Furthermore, overriding a core pluggable function entirely locks out any other plugin that might legitimately need to interact with it.
That creates silent conflicts that are an absolute nightmare to debug later.
Stick to the filter method. It takes two seconds, won’t break your site on the next PHP update, and keeps your inbox clear.
If you are a visual learner, this quick walkthrough demonstrates exactly how to navigate your WordPress dashboard to implement these email notification changes safely.