Disable Automatic Update Emails releasesself-updates
WordPress plugin: silence successful automatic-update emails, keep the failure ones. Self-updates from GitHub Releases.
by Randall Bruder · github.com/randallbruder/disable-wordpress-automatic-update-emails · website
Install
The author publishes release zips, so WP-CLI can install straight from GitHub:
wp plugin install https://github.com/randallbruder/disable-wordpress-automatic-update-emails/releases/download/v1.2.1/disable-automatic-update-emails.zipShips its own WordPress updater (built-in updater), so new versions show up under Dashboard → Updates.
Readme
Disable Automatic Update Emails
A tiny WordPress plugin that stops the "your site has been updated automatically" emails for core, plugins, and themes — while still emailing you when an automatic update fails. Automatic updates themselves keep running exactly as before.
Install
- Copy
disable-automatic-update-emails.phpintowp-content/plugins/(or intowp-content/mu-plugins/if you want it always on and unlistable). - Activate it under Plugins in wp-admin (not needed for mu-plugins).
There are no settings — activating it is the whole configuration.
What it does
| Behavior | |
|---|---|
| Core auto-update succeeded | Silenced |
| Core auto-update failed / critical failure | Still sent |
| Core update needs to be applied by hand | Still sent (core bypasses the filter) |
| Plugin auto-updates, all succeeded | Silenced |
| Plugin auto-updates, one or more failed | Still sent (whole batch, successes included for context) |
| Theme auto-updates | Same as plugins |
| "A new version of WordPress is available" nag (5.5+) | Silenced — delete that one line to keep it |
| Auto-update debug mail | Untouched; core only sends it on development builds |
Plugin and theme results arrive as one email per batch rather than one per item, so the decision is per batch: if anything in the run failed, the email goes out.
Requirements
WordPress 5.5+ (for the plugin/theme auto-update filters), PHP 7.0+.
Updates
Installed copies update themselves from this repo's GitHub Releases. The plugin
declares an Update URI header, which tells WordPress (5.8+) to skip
WordPress.org and ask the plugin itself — it checks the latest release and
offers the zip attached to it. The result appears on the Plugins screen like any
other update, and installs itself if auto-updates are enabled for it.
Two things this does not do: it does not update on a push to main, and it
cannot bootstrap itself. The first install on a site is always a manual zip
upload.
Shipping a new version
-
Edit the code, and bump the
Version:header indisable-automatic-update-emails.php. -
Commit and push to
main. -
Tag the release and push the tag:
git tag v1.2.1 && git push origin v1.2.1
The Release workflow lints the file, refuses the tag if it disagrees with the
Version: header, builds the correctly-structured zip, and publishes it as a
release asset. Sites pick it up within about 12 hours (the plugin caches the
release lookup for that long; deactivating and reactivating clears it).
Enabling auto-updates on a site
Plugins → find Disable Automatic Update Emails → Enable auto-updates. Fittingly, if one of its own updates ever fails, this plugin will let that failure email through.
If the auto-update controls are missing
WordPress only shows "Enable auto-updates" for plugins it has update information
about. The plugin therefore always answers core's update check with the current
release — including when that release is not newer — so it stays in core's
no_update list. If the link still isn't there, the cached update data is
simply stale: go to Dashboard → Updates → Check again.
Read the full README on GitHub →