EffortLess Maintenance Mode
EffortLess Maintenance Mode
Description
EffortLess Maintenance Mode allows you to easily enable and customize a maintenance page while your site is under development or maintenance. This plugin provides a simple interface for adding custom HTML content to your maintenance page, ensuring that visitors know your site is temporarily unavailable. The maintenance page will show if the current user is not logged in or does not have admin capabilities.
Reviews
We appreciate your feedback! Please leave a review.
Installation
Installation from within WordPress
- Visit Plugins > Add New.
- Search for EffortLess Maintenance Mode.
- Click Install Now, then Activate.
Manual installation
- Upload the entire
effortless-maintenance-modefolder to the/wp-content/plugins/directory. - Visit Plugins.
- Activate EffortLess Maintenance Mode.
Setting it up
- Go to Settings > Maintenance Mode.
- Write the message visitors should see in the editor, or press one of the three template buttons to start from a ready-made one. Leaving it empty shows a built-in default notice.
- Choose the response code: 503 Service Unavailable tells search engines the outage is temporary and is the right choice for a planned window; 200 OK suits a “coming soon” page on a site that is not published yet.
- Under Access, optionally list IP addresses that should always reach the site, tick roles that may bypass the page, and tick any pages that must stay reachable (a contact or status page, for instance).
- Flip the switch at the top of the screen to turn maintenance mode on. It saves immediately, without submitting the form.
Administrators always see the real site with a small banner reminding them maintenance mode is on, so you can check your work while visitors see the notice.
On a multisite network
The switch, the message and everything under Access are network-wide: one setting covers every site on the network, and only a network administrator can change them. Manage them under Network Admin > Settings > Maintenance Mode. An administrator of an individual site sees the same screen read-only under Settings > Maintenance Mode.
Allowed pages are the exception. Page IDs only mean something on the site they belong to, so each site keeps its own list and a site administrator can edit it. Choose the allowed pages for a site from that site’s own Settings > Maintenance Mode screen, not from Network Admin.
Faq
Go to Settings > Maintenance Mode and edit the content in the editor. On a multisite network, use Network Admin > Settings > Maintenance Mode instead — the message is shared by the whole network.
Any published Page can be ticked in the Allowed pages list, and it will load normally while the rest of the site shows the maintenance notice. A Page you have assigned as the Posts page under Settings > Reading works too, and is marked as such in the list. Only Pages appear in the list — posts and custom post types cannot be allowed through individually.
On a site with a great many pages, the list shows the first 200 alphabetically plus anything already ticked, so a selection is never lost just because it fell outside the list.
Yes! The plugin allows you to enter any HTML code to create a personalized maintenance message.
No, this plugin is lightweight and will not significantly impact your site’s performance. It is designed to be efficient and effective.
To deactivate maintenance mode, simply go back to Settings > Maintenance Mode and uncheck the “Enable Maintenance Mode” option, then save your changes.
Reviews
Changelog
1.1.12
- Fix: the floating “Maintenance Mode is active” notice shown to administrators browsing the live site lost its styling — it rendered as plain unstyled text instead of the peach floating banner. The 1.1.8 fix that stopped loading the full maintenance-page stylesheet for administrators (correctly, since that stylesheet also resets page layout) removed the notice’s own styling along with it, as both shared one file. The notice now has its own small stylesheet that always loads for administrators while maintenance mode is active.
1.1.11
- Change: the submit button at the bottom of the settings screen read “Save custom HTML” from when that was the only thing it saved. It has saved every setting on the screen — access rules, schedule, response code, background image — since 1.1.1, so it is now labelled “Save Settings”.
1.1.10
- Fix: the maintenance toggle could silently stop responding. Its click handler only attached on the browser’s
DOMContentLoadedevent; a caching or asset-optimisation plugin that loadsscripts.jslate (deferred, asynchronous, or moved to the page footer after it has already parsed) meant that event had already fired, so the toggle — and the background-image picker and template buttons alongside it — never received a click handler at all, with nothing shown anywhere to explain why. The script now runs immediately if the page has already finished parsing by the time it loads. - Fix: a failed save — most commonly an expired nonce, from leaving the settings screen open a long time before clicking — showed a generic error but left the switch showing the state you had just clicked, even though nothing was actually saved. It was only being reverted on a network failure, not on this kind of rejected request. It now reverts correctly whenever the save did not succeed.
1.1.9
- Fix: the maintenance background image was stored as an attachment ID, which only identifies an image on the site it was uploaded to. Every other site on a network showed a different image or none at all. The image address is now stored alongside the ID, so the same background appears everywhere. Backgrounds chosen before this release keep working; re-pick the image once to correct it across the network.
- Fix: saving the settings from a site that does not have every role defined quietly removed the missing ones from the bypass list. A role that only exists on one site of a network — a shop manager, for instance — no longer disappears when someone saves from elsewhere.
- Fix: a Page set as the Posts page under Settings > Reading can now be allowed through maintenance. Ticking it previously appeared to do nothing, because WordPress treats that address as the blog index rather than as that Page. It is now labelled in the list so it is clear which one it is.
- Fix: the Allowed pages list appeared in Network Admin, where it silently listed and edited only the main site’s pages. It is replaced there with a note pointing to the individual site’s own screen, and saving from Network Admin no longer clears that site’s selection.
- Change: the Allowed pages list now shows the first 200 pages alphabetically instead of loading every page on the site, with anything already ticked always included so no selection can be lost.
1.1.8
- Fix: on a multisite network with a persistent object cache, switching maintenance mode on or off only took effect on the site it was switched from. Every other site carried on with the previous state for up to an hour — leaving the network reachable during a maintenance window, or sites stuck showing the maintenance page after it was switched off. The plugin’s cached values are now shared across the network as they always should have been.
- Fix: an administrator of a single site could change the maintenance message, schedule, response code, IP list and role bypasses for every site on the network. Those settings are network-wide, so on multisite only a network administrator can change them now. The screen still opens for a site administrator, showing the network settings read-only alongside the allowed-pages list, which stays theirs to manage.
- Fix: a page allowed through during maintenance still loaded the maintenance stylesheet, which applies a global spacing reset and sizes
.wrapperto the full window — so the one page meant to stay usable often rendered broken. The stylesheet is now loaded only for visitors actually seeing the maintenance page. The same fix applies to whitelisted IP addresses, bypass roles and administrators browsing the site. - Fix: uninstalling the plugin left the allowed-pages setting behind on every site, so reinstalling silently restored old page bypasses. It is now removed, and on multisite the cleanup runs across all sites rather than only the one the plugin was deleted from.
- Fix: the bundled donate-notice class had no plugin prefix, so a second plugin shipping its own copy could win the name and break this one’s settings page. It is now
ELMMP_Donate_Notice. - Fix: the installation instructions described a different plugin entirely, and pointed at a “Tools” menu the plugin does not use. Rewritten, with the settings actually documented — including which settings are network-wide on multisite and which are per-site.
- Change: added the minimum WordPress version to the plugin header. It was declared in readme.txt but missing from the plugin file itself.
1.1.7
- Change: tested against WordPress 7.1 and the “Tested up to” header updated to 7.1. No functional changes.
- Change: the donate notice’s outbound link no longer includes the site address as a query parameter. It still identifies the plugin and version so support requests can be matched to a release, but not which installation was viewing it.
1.1.6
- Feature: Allowed pages — pick specific Pages that stay accessible to visitors while maintenance mode is active.
1.1.5
- Fix: maintenance page now intercepts 404s and redirect-candidate URLs by running at template_redirect priority 1, before WordPress canonical redirect processing.
1.1.4
- Fix: update plugin name casing to EffortLess; add plugin identifier to donate link.
1.1.3
- Fix: settings page now registers in every subsite admin on multisite, not only in the Network Admin — resolves “not allowed” error when clicking the admin-bar link from any frontend page or subsite.
1.1.2
- Fix: admin-bar indicator now updates live when the toggle is switched (no page reload required).
- Feature: maintenance toggle replaced by a CSS toggle switch for a cleaner settings page UI.
1.1.1
- Feature: admin-bar indicator shows Maintenance ON/OFF on every admin and frontend screen.
- Feature: TinyMCE rich-text editor replaces raw HTML textarea.
- Feature: three starter templates (Maintenance, Coming Soon, Under Construction).
- Feature: IP whitelist — configured IPs always see the live site during maintenance.
- Feature: role bypass — selected roles bypass the maintenance page.
- Feature: scheduled activation window with start/end datetime (site timezone).
- Feature: REST API — GET /wp-json/elmmp/v1/status and POST /wp-json/elmmp/v1/toggle.
- Feature: coming-soon mode — serve HTTP 200 instead of 503 for SEO-friendly pages.
- Feature: background image uploader for the maintenance page.
- Fix: uninstall.php now correctly removes all elmmp_* options.
- Refactor: internal prefix renamed from emmp_ to elmmp_ throughout the codebase.
1.0.34
- Feature: admin-bar indicator shows Maintenance ON/OFF on every screen.
- Feature: TinyMCE rich-text editor replaces raw HTML textarea.
- Feature: three starter templates (Maintenance, Coming Soon, Under Construction).
- Feature: IP whitelist — configured IPs always see the live site.
- Feature: role bypass — selected roles bypass the maintenance page.
- Feature: scheduled activation window (start/end datetime, site timezone).
- Feature: REST API GET /wp-json/elmmp/v1/status and POST /wp-json/elmmp/v1/toggle.
- Feature: coming-soon mode — serve HTTP 200 instead of 503.
- Fix: uninstall.php now removes all elmmp_* options correctly.
- Feature: background image uploader for the maintenance page.
- Refactor: renamed all internal prefixes from emmp_ to elmmp_ for consistency.
1.1.0
- Improvement: New versioning for new version
1.0.33
- Feature: “Enable Maintenance Mode” checkbox now auto-saves via AJAX on click — no page reload required.
- Feature: “Save Changes” button renamed to “Save custom HTML” and only persists the custom HTML textarea.
1.0.32
- Feature: donate notice now renders inline at the top of the settings page (below the title) instead of in the generic admin-notice area.
1.0.31
- Fix: PHPCS — correct file comment style in index.php stubs; add docblock header to scripts.js; end all inline JS comments with full stops.
1.0.30
- Fix: donate notice now also hooks network_admin_notices so it appears on Network Admin pages (multisite).
1.0.29
- Feature: multisite network support — one toggle now controls all sites; settings stored as network options.
- Feature: menu moved from Tools to Settings (single site) and Network Admin > Settings (multisite).
- Fix: object-cache layer now correctly distinguishes a cache miss from a stored falsy value using the $found parameter.
- Fix: cache is now invalidated immediately on save — the Settings API was bypassing the cache wrapper on every option update.
- Fix: wp_cache_flush() replaced with targeted key deletion to avoid evicting other plugins’ cached data.
- Fix: admin JS now loads only on the plugin’s own settings page, not on every admin screen.
- Fix: REST API, XML-RPC, and WP-Cron requests now bypass the maintenance page so background jobs and authenticated tooling are not disrupted.
- Fix: removed redundant unverified nonce field; settings form now uses a single nonce verified manually.
- Code: removed dead functions emmp_enqueue_styles(), emmp_update_cached_option(), emmp_clear_cache() and unused EMMP_COMPANY constant.
1.0.28
- Improvement: added dismissible donate notice on the plugin settings screen.
- Improvement: added Donate link header field and includes/class-donate-notice.php.
1.0.27
- Fix: Remove deprecated load_plugin_textdomain() call (not needed for wordpress.org-hosted plugins since WP 4.6)
- Fix: Add Requires PHP header to plugin file to match readme.txt
- Fix: Prefix global variables in uninstall.php with emmp_ to meet naming conventions
1.0.25
- Minor update
1.0.24
- Fix some issues
1.0.22
- Update cache fonctionnality
1.0.21
- Not showing maintenance page if you’re logged as administrator
- Add a notice for logged administrator
1.0.20
- Add cache purge after change
1.0.19
- Optimize the css file
- Fix the alert message not working
1.0.18
- Changes emm_ to emmp_ to comply wordpress.org advice
1.0.17
- Fix minor bugs
1.0.16
- Add languages Italian and Portuguese
1.0.16
- Add default maintenance message if the textarea is empty
1.0.15
- Improved Naming Consistency: Renamed get_cached_option() to cmm_get_cached_option() for better consistency and conflict prevention.
- Escaping and Sanitization: Used esc_html__(), esc_textarea(), and esc_js() functions more consistently.
- Commenting: Added comments before each function for clarity.
- Spacing and Alignment: Reformatted spacing and alignment to match WordPress coding standards, such as placing spaces before function parameters and between operators.
1.0.14
- Fix uninstall.php
1.0.13
- Add company variable
- Fix issue with variables
1.0.12
- New versioning