Title: Adminkeep – Email Log, Custom CSS, Disable Comments, Site Lockdown &amp; Admin Enhancements
Author: Shazzad Hossain Khan
Published: <strong>19 Ctember 2026</strong>
Last modified: 22 Ctember 2026

---

Search plugins

![](https://ps.w.org/adminkeep/assets/banner-772x250.png?rev=3703401)

![](https://ps.w.org/adminkeep/assets/icon.svg?rev=3703401)

# Adminkeep – Email Log, Custom CSS, Disable Comments, Site Lockdown & Admin Enhancements

 By [Shazzad Hossain Khan](https://profiles.wordpress.org/sajib1223/)

[Download](https://downloads.wordpress.org/plugin/adminkeep.1.8.0.zip)

 * [Details](https://kab.wordpress.org/plugins/adminkeep/#description)
 * [Reviews](https://kab.wordpress.org/plugins/adminkeep/#reviews)
 *  [Installation](https://kab.wordpress.org/plugins/adminkeep/#installation)
 * [Development](https://kab.wordpress.org/plugins/adminkeep/#developers)

 [Support](https://wordpress.org/support/plugin/adminkeep/)

## Description

You decide what changes on this site.

Adminkeep is a set of tools under that one idea. **Site Lock** stops things changing
behind
 your back — no new comment, no new plugin, no new user. **Content** makes
the changes you do want safe to make.

Every feature is a single switch, off until you turn it on. **Switching one off 
never leaves you
 repair work
: the locks work purely through WordPress filters,
so your site is exactly as it was,
 and what you made with the Content features 
stays where you put it.

#### Site Lock

 * **Disable Comments** — comments off everywhere, including direct POSTs from spam
   bots and the REST API. Nothing is written to your database, so switching it off
   brings every comment back. An optional cleanup button deletes spam and trashed
   comments, after showing you the exact count. [Guide](https://adminkeep.com/guides/disable-comments-wordpress/)
 * **Registration Lockdown** — stops new accounts being created, and refuses creation
   of or promotion to administrator. Blocked attempts are logged. [Guide](https://adminkeep.com/guides/stop-spam-user-registration-wordpress/)
 * **Disable XML-RPC** — closes `xmlrpc.php` completely, including pingbacks and`
   system.multicall`. [Guide](https://adminkeep.com/guides/disable-xmlrpc-wordpress/)
 * **Disable File Editing** — removes the built-in plugin and theme file editors,
   reversibly.
 * **Installation Lockdown** — no new plugins or themes, from WordPress.org or a
   ZIP, and no replacing one by uploading a ZIP, for anyone. Updates keep working,
   so security releases still reach your site. [Guide](https://adminkeep.com/guides/block-plugin-installs-wordpress/)

#### Content

 * **Duplicate** — copy any post or page as a draft. Custom fields, taxonomies, 
   the featured image and page builder layouts (Elementor, ACF) come along intact,
   and the original is never modified. [Guide](https://adminkeep.com/guides/duplicate-page-wordpress/)
 * **Live Draft** — rework a published page in a private working copy, then publish
   it over the original. Same ID, same URL, and the old version is kept as a revision.
   [Guide](https://adminkeep.com/guides/edit-published-page-without-unpublishing/)
 * **Keep URL** — rename or move a page and its old address keeps working, child
   pages included. Fills the gaps WordPress leaves for pages and leaves posts to
   core. [Guide](https://adminkeep.com/guides/change-wordpress-slug-redirect/)
 * **Order** — drag posts into the order you want on a dedicated Sort screen, one
   post type at a time. Lists that already ask for their own order, such as WooCommerce
   products and search results, are left alone. [Guide](https://adminkeep.com/guides/reorder-wordpress-posts/)
 * **Replace Media** — upload a new version of a file over the old one. Same file
   type keeps the same URL; a different type updates the posts that use it and redirects
   the old address. [Guide](https://adminkeep.com/guides/replace-image-wordpress-same-url/)

#### Appearance

 * **Custom CSS** — CSS that belongs to your site instead of your theme. Edit it
   under Appearance with WordPress’s own code editor; it stays when you switch themes,
   and your theme’s Additional CSS is left alone.

#### Admin

 * **User Registration Date** — a sortable Registered column on the Users screen.
   WordPress records when every account was created but never shows it; this does,
   for every existing user, and newest-first sorting makes a wave of spam signups
   easy to spot. [Guide](https://adminkeep.com/guides/wordpress-user-registration-date/)

#### Email

 * **SMTP** — Send your site’s email through an SMTP server so password resets and
   form messages arrive. Presets for Amazon SES, Brevo, Mailgun, SendGrid, Postmark,
   Zoho and Gmail; a test email that shows the server’s own error; settings can 
   live in wp-config.php. [Guide](https://adminkeep.com/guides/wordpress-smtp-settings/)
 * **Email Log** — Tools  Email Log lists the email your site sends, with recipient,
   subject and whether it was sent or failed, plus filters by status and date and
   a search. Open any email to see its sender and headers, and the email itself 
   the way it looked when it went out, with remote images blocked. Content storage
   can be switched off to keep only the envelope. Password-reset and sign-in links
   are removed before an email is stored. Works with or without the SMTP feature,
   and with other SMTP plugins too.

#### Performance

A feature you have not enabled registers zero hooks and loads zero assets.

#### Links

 * [Website](https://adminkeep.com/)
 * [Documentation](https://adminkeep.com/docs/)
 * [Guides](https://adminkeep.com/guides/)

### WP-CLI

Everything on the Adminkeep settings screen, plus the Custom CSS and SMTP screens,
can be done from a shell with `wp adminkeep`.

    ```
    wp adminkeep feature list — every feature and whether it is on
    wp adminkeep feature enable disable_comments — switch a feature on (or `disable` it)
    wp adminkeep feature set order post_types=post,page — change a feature's settings
    wp adminkeep comments purge — delete spam and trashed comments, in batches
    wp adminkeep css set site.css — replace the Custom CSS from a file
    wp adminkeep smtp set --host=smtp.example.com --port=587 — configure SMTP
    wp adminkeep smtp test you@example.com — send a test email and see the server's reply
    ```

Run `wp help adminkeep` for the full reference. A change made here is cleaned and
checked exactly as it is on the screen, and a mistyped value is refused rather than
guessed at.

## Screenshots

[⌊Five groups, fourteen features, one switch each. Turn on only what you need.⌉⌊
Five groups, fourteen features, one switch each. Turn on only what you need.⌉[

Five groups, fourteen features, one switch each. Turn on only what you need.

[⌊Nothing is deleted until you have seen the exact count. Order notes and reviews
are excluded unless you say otherwise.⌉⌊Nothing is deleted until you have seen the
exact count. Order notes and reviews are excluded unless you say otherwise.⌉[

Nothing is deleted until you have seen the exact count. Order notes and reviews 
are excluded unless you say otherwise.

[⌊Duplicate and Live Draft where you already work — the row actions, not a new menu.⌉⌊
Duplicate and Live Draft where you already work — the row actions, not a new menu
.⌉[

Duplicate and Live Draft where you already work — the row actions, not a new menu.

[⌊Swapping a file for a different format tells you what references it first, then
keeps the old URL redirecting.⌉⌊Swapping a file for a different format tells you
what references it first, then keeps the old URL redirecting.⌉[

Swapping a file for a different format tells you what references it first, then 
keeps the old URL redirecting.

[⌊Sorting gets a screen of its own: drag a row where you want it — and the order
applies to your front-end queries too.⌉⌊Sorting gets a screen of its own: drag a
row where you want it — and the order applies to your front-end queries too.⌉[

Sorting gets a screen of its own: drag a row where you want it — and the order applies
to your front-end queries too.

[⌊Rewrite a published page while it stays published. Merge back into the same post,
same URL.⌉⌊Rewrite a published page while it stays published. Merge back into the
same post, same URL.⌉[

Rewrite a published page while it stays published. Merge back into the same post,
same URL.

[⌊The administrator guard is on by default. Blocking plugin-created accounts is 
opt-in, because it breaks WooCommerce checkout.⌉⌊The administrator guard is on by
default. Blocking plugin-created accounts is opt-in, because it breaks WooCommerce
checkout.⌉[

The administrator guard is on by default. Blocking plugin-created accounts is opt-
in, because it breaks WooCommerce checkout.

[⌊Stop plugin and theme installs and uploads, while updates keep working — and switch
it back off from this same screen.⌉⌊Stop plugin and theme installs and uploads, 
while updates keep working — and switch it back off from this same screen.⌉[

Stop plugin and theme installs and uploads, while updates keep working — and switch
it back off from this same screen.

[⌊The redirects WordPress core skips: hierarchical pages, and posts moved to a new
parent.⌉⌊The redirects WordPress core skips: hierarchical pages, and posts moved
to a new parent.⌉[

The redirects WordPress core skips: hierarchical pages, and posts moved to a new
parent.

[⌊Custom CSS lives under Appearance, in WordPress's own code editor, and stays when
you switch themes.⌉⌊Custom CSS lives under Appearance, in WordPress's own code editor,
and stays when you switch themes.⌉[

Custom CSS lives under Appearance, in WordPress’s own code editor, and stays when
you switch themes.

[⌊SMTP under Settings: pick a provider, save, and send a test email that shows what
the server said.⌉⌊SMTP under Settings: pick a provider, save, and send a test email
that shows what the server said.⌉[

SMTP under Settings: pick a provider, save, and send a test email that shows what
the server said.

[⌊Email Log under Tools: every email your site sends, whether it went out, and filters
for status, period and search.⌉⌊Email Log under Tools: every email your site sends,
whether it went out, and filters for status, period and search.⌉[

Email Log under Tools: every email your site sends, whether it went out, and filters
for status, period and search.

[⌊Open any logged email as it was sent, with its source a tab away. Scripts and 
remote images are blocked in the preview.⌉⌊Open any logged email as it was sent,
with its source a tab away. Scripts and remote images are blocked in the preview
.⌉[

Open any logged email as it was sent, with its source a tab away. Scripts and remote
images are blocked in the preview.

## Installation

 1. In your WordPress admin, go to **Plugins  Add New Plugin**, search for « Adminkeep»
    and click **Install Now**, then **Activate**.
 2. Open **Settings  Adminkeep**, or the **Settings** link under Adminkeep on the Plugins
    screen. Every feature starts **off**; switch on only the ones you want.
 3. To remove the plugin, deactivate and delete it as usual. Uninstalling removes its
    settings and its own redirect table. Nothing it changed while enabled outlives 
    switching the feature off.

Or with WP-CLI:

    ```
    wp plugin install adminkeep --activate
    ```

## FAQ

### Will this delete my comments?

Not unless you ask it to. Turning Disable Comments on only hides them — a test asserts
the comment
 rows are untouched after a full enable-and-disable cycle.

There is a separate cleanup button that does delete, and it deletes **spam and trashed
comments
 only
 unless you tick the box to include approved ones. It shows the exact
count, asks you to
 confirm, and cannot be undone.

### Can I turn it back off?

Yes, instantly. There is never a migration to run or a repair step to find.

The locks work purely through WordPress filters, so nothing was written to your 
database to undo —
 switch one off and your site is exactly as it was. The Content
features are deliberately different: they write the things you asked them to write.
A copy you made, an order you saved, a file you replaced, a redirect recorded when
you renamed a page — switching the feature off stops it doing any more, and leaves
what it already did alone. Work you did on purpose should not disappear because 
you unticked a checkbox.

### Does this actually stop comment spam bots?

Yes. Bots usually POST straight to `wp-comments-post.php` without ever loading your
page, so
 hiding the comment form does nothing. Adminkeep refuses those requests
with a 403 before WordPress processes them, and refuses comment creation through
the REST API as well.

### Is Installation Lockdown a security feature?

Not exactly, and it would be dishonest to say otherwise. It is enforced in PHP, 
so anyone with
 filesystem, database or WP-CLI access can bypass it. It reliably
stops accidents and casual changes — a client uploading a plugin zip from who knows
where, or overwriting an installed plugin with one. Treat it as a policy guard, 
not a security boundary.

### Why not just use the DISALLOW_FILE_MODS constant?

Because it cannot be switched off from the admin. Once it is in `wp-config.php` 
you need file
 access to undo it, which strands people. Installation Lockdown filters
capabilities instead, so you can always turn it off from the settings screen. If
you want the harder version, the constant is still there and this plugin does not
interfere with it.

### Does the SMTP feature work with Gmail or Microsoft 365?

Gmail and Google Workspace: yes, with an app password. Microsoft 365 and Outlook.
com: no — Microsoft now requires signing in through Microsoft (OAuth) for SMTP, 
which this feature does not support. A dedicated SMTP plugin is the better choice
there.

### Where is my SMTP password kept?

Encrypted in your site’s database, which protects it in database backups. For the
strongest setup define ADMINKEEP_SMTP_PASS (and the other ADMINKEEP_SMTP_* constants)
in wp-config.php: values set there are not saved to the database, and the settings
form does not display them.

### Does the email log store password-reset links?

They are removed before an email is stored, along with sign-in and account-activation
links. The
 common link formats are covered, not every possible one, so treat it
as a safeguard rather than a guarantee. If you would rather not store email content
at all, Email Log has a setting to keep only the envelope — sender, recipient, subject
and status — and switch content storage off.

### What happens to the email log if I switch the feature off?

Switching it off stops logging. What is already logged stays until you switch it
back on, delete
 it, or uninstall. While it is off nothing new is recorded and the
entries are not aged out, so if you want the log emptied, empty it first — from 
Tools  Email Log, or with wp adminkeep email-log purge –all — and then switch the
feature off.

### Can I manage Adminkeep with WP-CLI?

Yes, since 1.5.0. `wp adminkeep feature list` shows every feature, and `wp help 
adminkeep` lists the commands for switching features, changing their settings, cleaning
up comments, replacing the Custom CSS, configuring SMTP and choosing whether the
settings screen hides unused features for a user. If Installation Lockdown has locked
you out of the admin, `wp adminkeep feature disable install_lock` is the way back
in.

## Reviews

There are no reviews for this plugin.

## Contributors & Developers

“Adminkeep – Email Log, Custom CSS, Disable Comments, Site Lockdown & Admin Enhancements”
is open source software. The following people have contributed to this plugin.

Contributors

 *   [ Shazzad Hossain Khan ](https://profiles.wordpress.org/sajib1223/)

[Translate “Adminkeep – Email Log, Custom CSS, Disable Comments, Site Lockdown & Admin Enhancements” into your language.](https://translate.wordpress.org/projects/wp-plugins/adminkeep)

### Interested in development?

[Browse the code](https://plugins.trac.wordpress.org/browser/adminkeep/), check 
out the [SVN repository](https://plugins.svn.wordpress.org/adminkeep/), or subscribe
to the [development log](https://plugins.trac.wordpress.org/log/adminkeep/) by [RSS](https://plugins.trac.wordpress.org/log/adminkeep/?limit=100&mode=stop_on_copy&format=rss).

## Changelog

#### 1.8.0

 * Fixed: with Installation Lockdown on, « View details » for a plugin (from an 
   update notice or a « Requires: » line) opened on an error. It now opens; installing
   from it is still blocked.
 * New WP-CLI commands: `wp adminkeep view get|hide-unused|show-all --user=<user
   >` read and set whether the settings screen hides unused features for that user.

#### 1.7.0

 * New: Email Log. Tools  Email Log lists the email your site sends, with recipient,
   subject and whether it was sent or failed, plus filters by status and date and
   a search; the sender, headers and content are one click away in the preview.
 * New: Email Log filters sit in the list’s top bar, with a Period filter (1 hour
   to 30 days, or a custom date range), and Screen Options shows or hides columns,
   including a From column that starts hidden.
 * New: Preview a logged email in a window, rendered as it was sent, with its source
   a tab away. Scripts and remote images are blocked in the preview. Emails that
   carry both HTML and plain text show each in its own tab.
 * The log records the sender an SMTP plugin really used, even one that sets it 
   at send time such as FluentSMTP, with the sender’s name.
 * Password-reset, sign-in and activation links are removed before an email is stored,
   and you can switch content storage off.
 * Old entries are deleted automatically (30 days by default; choose from 7 days
   up to 2 years) and the log is trimmed to the newest 10,000.
 * New WP-CLI commands: `wp adminkeep email-log list|get|count|purge`.
 * New: bring your history across from the Email Log plugin with `wp adminkeep email-
   log import email-log`. Emails are stored the way Adminkeep would have stored 
   them (links removed, the retention setting respected), running it again only 
   adds what is new, and the other plugin’s log is left as it was.
 * New: while the Email Log plugin is active, Tools  Email Log shows a « Copy from
   Email Log » button that does the same import from the screen, and says how many
   emails it copied and skipped.
 * Works with or without the SMTP feature, and only administrators can open the 
   log.
 * Changed: Adminkeep’s settings moved from their own top-level menu to **Settings
   Adminkeep**. Old links and bookmarks still work, and the Plugins screen now has
   a Settings link.
 * Fixed: saving the SMTP screen while ADMINKEEP_SMTP_* constants were set in wp-
   config.php cleared the saved values for those fields, so removing the constants
   later left SMTP without a host or password. The saved values are now kept, as`
   wp adminkeep smtp set` already did.

#### 1.6.0

 * New: « Hide unused features » on the settings page. Switch it on and the menu
   lists only the features you use. Search still finds the rest, and each administrator
   has their own setting.
 * Improved: the Overview lists the features you have switched on first, and its«
   features enabled » count updates as soon as you save.
 * Improved: the Registered column on the Users screen is narrower and shows a short
   month (Jan 10, 2024).
 * Fixed: the SMTP test email was sent twice.
 * Fixed: notices from other plugins were squeezed into the Adminkeep header on 
   the settings page. They now sit above it.
 * Fixed: after switching on Custom CSS or SMTP, the link to its screen appears 
   as soon as you save, without reloading.
 * Fixed: the settings filter only searched the first group.

#### 1.5.0

 * New: WP-CLI. `wp adminkeep` switches features on and off, changes their settings,
   cleans up comments, replaces the Custom CSS, configures SMTP and sends a test
   email. Run `wp help adminkeep` to see every command.

#### 1.4.0

 * New: SMTP, in a new Email group. Send your site’s email through any SMTP server,
   with provider presets, a test email that shows the server’s own reply, and settings
   that can live in wp-config.php.
 * Changed: screens Adminkeep adds elsewhere in the admin (SMTP, Custom CSS, Order,
   Replace file) now carry a small Adminkeep mark at the start of the heading, linking
   to the Adminkeep settings. The settings page shows the mark too.

#### 1.3.0

 * New: User Registration Date — a sortable Registered column on the Users screen,
   in a new Admin group. It uses the date WordPress already stores, so every existing
   user has one.
 * Changed: the switch on each panel now reads « Enable this feature ».
 * Removed: the Overview note about Version Lock leaving in 1.1.0.

#### 1.2.0

 * New: Custom CSS — site-level front-end CSS under Appearance  Custom CSS. It belongs
   to the site, not the theme, so it stays when you switch themes.
 * Changed: internal names now match the plugin name. Settings and redirects are
   carried over automatically.
 * Changed: plugin and author links now point to adminkeep.com.

#### 1.1.0

 * Initial release.

## Meta

 *  Version **1.8.0**
 *  Last updated **1 n wass ago**
 *  Active installations **30+**
 *  WordPress version ** 6.9 or higher **
 *  Tested up to **7.1.2**
 *  PHP version ** 7.4 or higher **
 *  Language
 * [English (US)](https://wordpress.org/plugins/adminkeep/)
 * Tags
 * [custom css](https://kab.wordpress.org/plugins/tags/custom-css/)[disable comments](https://kab.wordpress.org/plugins/tags/disable-comments/)
   [email log](https://kab.wordpress.org/plugins/tags/email-log/)[enhancements](https://kab.wordpress.org/plugins/tags/enhancements/)
   [lockdown](https://kab.wordpress.org/plugins/tags/lockdown/)
 *  [Advanced View](https://kab.wordpress.org/plugins/adminkeep/advanced/)

## Ratings

No reviews have been submitted yet.

[Your review](https://wordpress.org/support/plugin/adminkeep/reviews/#new-post)

[See all reviews](https://wordpress.org/support/plugin/adminkeep/reviews/)

## Contributors

 *   [ Shazzad Hossain Khan ](https://profiles.wordpress.org/sajib1223/)

## Support

Got something to say? Need help?

 [View support forum](https://wordpress.org/support/plugin/adminkeep/)