Title: ETBS Edit Conflict Guard
Author: ETBS (DAI)
Published: <strong>September 2, 2026</strong>
Last modified: October 1, 2026

---

Search plugins

![](https://ps.w.org/etbs-edit-conflict-guard/assets/banner-772x250.png?rev=3676958)

![](https://ps.w.org/etbs-edit-conflict-guard/assets/icon.svg?rev=3676958)

# ETBS Edit Conflict Guard

 By [ETBS (DAI)](https://profiles.wordpress.org/etbsjp/)

[Download](https://downloads.wordpress.org/plugin/etbs-edit-conflict-guard.1.2.1.zip)

 * [Details](https://vec.wordpress.org/plugins/etbs-edit-conflict-guard/#description)
 * [Reviews](https://vec.wordpress.org/plugins/etbs-edit-conflict-guard/#reviews)
 *  [Installation](https://vec.wordpress.org/plugins/etbs-edit-conflict-guard/#installation)
 * [Development](https://vec.wordpress.org/plugins/etbs-edit-conflict-guard/#developers)

 [Support](https://wordpress.org/support/plugin/etbs-edit-conflict-guard/)

## Description

WordPress already tells you when someone else is editing a post: the “currently 
editing” notice under the post title. That notice is only a warning, though. It 
does not stop the second editor from clicking Update or Publish, and it does not
stop the save. If two people edit the same post around the same time, whoever saves
last silently overwrites the other person’s changes, and nothing in WordPress core
prevents that.

ETBS Edit Conflict Guard adds a real, per-post exclusive lock on top of that notice.
While one user has a post open for editing, it blocks every other user from saving
it, and it tells them clearly why.

#### How it works

 * Opening a post’s edit screen tries to acquire a lock on that post (first person
   to open it gets the lock).
 * While the edit screen stays open, the lock is automatically extended through 
   the standard WordPress Heartbeat API.
 * Clicking Save Draft, Update, or Publish (Classic Editor or Block Editor) checks
   the lock. If someone else (including another edit screen of the same account)
   holds it, the save is blocked and a modal explains why.
 * The lock is released when you leave the edit screen, or when Heartbeat stops (
   for example the tab is closed) and the lock’s expiration time passes. A Classic
   Editor save also releases it, because the screen reloads. A Block Editor save
   keeps it, because you keep editing in the same tab.
 * Autosaves neither take nor release the lock, and the lock never blocks them.
 * The block is enforced on the server as well, on the Classic Editor’s post save
   and the Block Editor’s REST save, so the lock still holds even with JavaScript
   disabled or the connection unreliable.
 * In the Classic Editor, WordPress’s own “currently editing” dialog no longer offers“
   Take over” while this plugin holds the lock for another account, because taking
   over would not move this plugin’s lock. The dialog says who is protecting the
   post instead.

All post types that have an admin UI are covered by default (attachments are excluded);
any of them can be excluded from the Settings screen. The lock check runs at the
moment Save/Update/Publish is clicked. Opening the edit screen shows nothing extra,
except a notice when the same account already has the post open in another edit 
screen.

#### Settings

Under Settings > Edit Conflict Guard:

 * Lock expiration, in seconds.
 * Post types to exclude from locking.
 * Whether moving a locked post to trash is also blocked (off by default; when on,
   any move-to-trash of a locked post is blocked, even from the lock holder’s own
   other tab — force delete is not affected).
 * A live table of every post currently locked, with a per-row Force Release button
   for administrators.

#### Known limitations

Edit Conflict Guard is intentionally strict and, as a result, has a few rough edges
worth knowing about up front:

 1. **Block Editor trash notice.** When the “Move to trash” action is blocked, the 
    server correctly rejects it (the post stays published), but the Block Editor itself
    may briefly show a “Moved to trash” success notice anyway. This is WordPress core’s
    own optimistic UI, not a lock failure — reloading the post list confirms the post
    was never actually moved.
 2. **Bulk trash actions.** If the trash guard is enabled and a bulk “Move to Trash”
    action from the post list includes a locked post, processing stops at that post;
    posts later in the batch are left unprocessed.
 3. **Permanent deletion bypasses the trash guard.** The trash guard only covers moves
    to the trash. A permanent delete that skips the trash entirely — for example `wp.
    deletePost` over XML-RPC on a custom post type, which WordPress core deletes outright
    instead of trashing — is not blocked, even while the post is locked.
 4. **No Multisite support.** Locks are not aware of, or shared across, sites in a 
    Multisite network.
 5. **Locks apply to the holder too.** By design, even the account that holds the lock
    is blocked from saving the same post from a second tab, window or device. This 
    is deliberate, not a bug. The plugin can tell the lock is held by the same account,
    but a matching account does not prove it is the same person (accounts are sometimes
    shared), so both are treated the same way. The message says “the same account” 
    for that reason.
 6. **Autosave is not blocked.** WordPress core usually keeps an autosave away from
    the post itself by storing it as a separate, per-user revision. Two cases are different:
    a draft’s own author autosaving that draft, and one account having the same draft
    open in two tabs. There, the autosave writes to the draft directly, so it can overwrite
    what someone else saved — including while this plugin’s lock is held by another
    user. WordPress 7.0 and later narrows this by checking WordPress’s own edit lock
    first; earlier versions do not check it at all. The notice shown when a second 
    tab opens asks you not to keep editing there, which avoids the two-tab case.
 7. **Block Editor “Take over” button.** WordPress’s own “Take over” button in the 
    Block Editor cannot be removed by a plugin. Taking over moves WordPress’s lock 
    but not this plugin’s, so saving stays blocked until the other editor closes their
    screen or an administrator force-releases the lock.
 8. **Saves made without WP_ADMIN defined are not blocked.** WP-Cron, WP-CLI, XML-RPC
    and front-end code that calls `wp_update_post()` directly are let through, because
    they cannot show a message and would otherwise fail on visitors’ screens. Note 
    that `admin-post.php` and `admin-ajax.php` define `WP_ADMIN` themselves, so a front-
    end form that posts to either one is still blocked while the sender is logged in.
    A save made by a logged-out visitor is let through even there, because a logged-
    out request is exempt as well. Saves through the REST API and the admin screens(
    including Quick Edit and bulk edit) are still checked.

## Screenshots

[⌊The Edit Conflict Guard settings screen, showing the lock expiration field, the
list of post types to exclude, and the trash guard toggle.⌉⌊The Edit Conflict Guard
settings screen, showing the lock expiration field, the list of post types to exclude,
and the trash guard toggle.⌉[

The Edit Conflict Guard settings screen, showing the lock expiration field, the 
list of post types to exclude, and the trash guard toggle.

[⌊The "Currently Locked Posts" table on the settings screen, listing each locked
post with its editor, lock time, expiration, and a Force Release button.⌉⌊The "Currently
Locked Posts" table on the settings screen, listing each locked post with its editor,
lock time, expiration, and a Force Release button.⌉[

The “Currently Locked Posts” table on the settings screen, listing each locked post
with its editor, lock time, expiration, and a Force Release button.

[⌊The save-blocked modal shown in the Classic Editor when another user already holds
the lock on the post being saved.⌉⌊The save-blocked modal shown in the Classic Editor
when another user already holds the lock on the post being saved.⌉[

The save-blocked modal shown in the Classic Editor when another user already holds
the lock on the post being saved.

[⌊The save-blocked modal shown in the Block Editor (Gutenberg) when another user
already holds the lock on the post being saved.⌉⌊The save-blocked modal shown in
the Block Editor (Gutenberg) when another user already holds the lock on the post
being saved.⌉[

The save-blocked modal shown in the Block Editor (Gutenberg) when another user already
holds the lock on the post being saved.

[⌊The support links as they appear on the Plugins list row and in the footer of 
the Settings > Edit Conflict Guard screen.⌉⌊The support links as they appear on 
the Plugins list row and in the footer of the Settings > Edit Conflict Guard screen
.⌉[

The support links as they appear on the Plugins list row and in the footer of the
Settings > Edit Conflict Guard screen.

[⌊The notice shown on a second edit screen when the same account already has the
post open elsewhere, saying that this screen cannot save.⌉⌊The notice shown on a
second edit screen when the same account already has the post open elsewhere, saying
that this screen cannot save.⌉[

The notice shown on a second edit screen when the same account already has the post
open elsewhere, saying that this screen cannot save.

[⌊Core's post-locked dialog in the Classic Editor, with Edit Conflict Guard's explanation
added and the "Take over" button removed.⌉⌊Core's post-locked dialog in the Classic
Editor, with Edit Conflict Guard's explanation added and the "Take over" button 
removed.⌉[

Core’s post-locked dialog in the Classic Editor, with Edit Conflict Guard’s explanation
added and the “Take over” button removed.

## Installation

 1. Upload the plugin files to the `/wp-content/plugins/etbs-edit-conflict-guard` directory,
    or install the plugin directly through the WordPress plugins screen.
 2. Activate the plugin through the “Plugins” screen in WordPress.
 3. Go to Settings > Edit Conflict Guard to review the lock expiration, excluded post
    types, and trash guard option.

## FAQ

### How is this different from the “Someone else is editing this” notice WordPress already shows?

That built-in notice is informational only; it does not stop a second user from 
saving. This plugin adds an actual block: if someone else holds the lock, clicking
Save/Update/Publish is refused and the user sees a modal explaining why (in Quick
Edit the same reason appears inline instead), rather than silently overwriting the
other person’s changes.

### A lock seems stuck. How do I clear it?

Locks release automatically once their expiration time (set under Settings > Edit
Conflict Guard) passes without the holder’s edit screen sending a Heartbeat, for
example if their browser tab was closed without saving. If you need it cleared immediately,
an administrator can open Settings > Edit Conflict Guard and use the Force Release
button next to that post in the “Currently Locked Posts” table.

### Does this plugin work on Multisite?

Not currently. Locks are per-site; there is no cross-site awareness in a Multisite
network.

### I blocked a trash action, but the screen still said “Moved to trash”. Did it fail?

No — the post was not moved. This happens only in the Block Editor: WordPress core
shows an optimistic success notice before the server response arrives, and the server
has already rejected the request. Reloading the post list will show the post still
in its original status.

### Can the person who holds the lock still lock themselves out?

Yes, deliberately. If the same account opens the same post in a second tab, window
or device, the second one is blocked from saving just like any other user would 
be. The plugin can tell the two belong to the same account, but that does not prove
it is the same person, so it applies the same rule to everyone. Close the other 
edit screen and save again.

## Reviews

There are no reviews for this plugin.

## Contributors & Developers

“ETBS Edit Conflict Guard” is open source software. The following people have contributed
to this plugin.

Contributors

 *   [ ETBS (DAI) ](https://profiles.wordpress.org/etbsjp/)

“ETBS Edit Conflict Guard” has been translated into 1 locale. Thank you to [the translators](https://translate.wordpress.org/projects/wp-plugins/etbs-edit-conflict-guard/contributors)
for their contributions.

[Translate “ETBS Edit Conflict Guard” into your language.](https://translate.wordpress.org/projects/wp-plugins/etbs-edit-conflict-guard)

### Interested in development?

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

## Changelog

#### 1.2.1

 * Fixed: in the Block Editor, anything entered in meta boxes (SEO fields, custom
   fields and other classic-style panels added by plugins) was not saved, and no
   error was shown. This happened on every save of a post type this plugin protects,
   and started in 1.2.0. The title and content were saved normally. Please re-enter
   anything that was lost.

#### 1.2.0

 * Fixed: an autosave no longer releases the lock, which left the post unprotected
   without any sign.
 * Fixed: saving in the Block Editor no longer leaves the post unprotected for the
   rest of the editing session.
 * Fixed: the Classic Editor’s autosave no longer fails silently while you hold 
   the lock.
 * Fixed: the Block Editor’s autosave no longer reports success without saving anything.
 * Fixed: saves made where no message can be shown (WP-Cron, WP-CLI, XML-RPC, requests
   from logged-out visitors, and front-end code calling wp_update_post() directly)
   are no longer stopped with an error screen.
 * Fixed: the predecessor plugin (EditLock) is now detected even when its folder
   has been renamed.
 * Changed: when a second tab of the same account blocks a save, the message now
   says so and what to do. It also appears when the second tab opens.
 * Changed: the save-blocked dialog is reworded and has an accessible name.
 * Fixed: in the Classic Editor, “Publish” on a draft now actually publishes it.
   It used to save the post as a draft while reporting that the post had been updated.
 * Fixed: Quick Edit now shows the reason when a save is blocked, instead of leaving
   the spinner running.
 * Changed: the Classic Editor’s “Take over” button is hidden while another account
   holds this plugin’s lock.
 * Changed: lock ownership is now determined more strictly.

#### 1.1.1

 * Added a bundled Japanese translation. Translations delivered by translate.wordpress.
   org still take precedence once they are available.

#### 1.1.0

 * Renamed the plugin to ETBS Edit Conflict Guard.
 * Translated all UI strings to English; translations are now handled through translate.
   wordpress.org instead of bundled files.
 * Removed the bundled update checker (plugin-update-checker).
 * Removed the dashboard widget.
 * Removed the donation link from the Plugins list row.
 * Moved the settings screen’s inline script and styles into enqueued asset files.
 * Renamed the plugin’s PHP classes and constants so this plugin can be installed
   alongside its predecessor without a fatal error. Option keys and the lock table
   are unchanged, so existing settings are kept.
 * The lock table and the cleanup task are now restored automatically if they go
   missing.

#### 1.0.3

 * Fix: uninstalling the plugin no longer deletes settings you configured (lock 
   expiration, excluded post types). Only the plugin’s own temporary lock data and
   its cleanup cron event are removed.

#### 1.0.2

 * Removed the “Requires at least” (WordPress) declaration. No verified minimum 
   WordPress version exists for the APIs this plugin uses.

#### 1.0.1

 * Lowered the declared “Requires PHP” from 8.3 to 7.4.
 * Added a “Request development” / donation link on the Plugins list row and the
   settings page footer.

#### 1.0.0

 * Initial release.

## Meta

 *  Version **1.2.1**
 *  Last updated **2 days ago**
 *  Active installations **20+**
 *  Tested up to **7.1.2**
 *  PHP version ** 7.4 or higher **
 *  Languages
 * [English (US)](https://wordpress.org/plugins/etbs-edit-conflict-guard/) and [Japanese](https://ja.wordpress.org/plugins/etbs-edit-conflict-guard/).
 *  [Translate into your language](https://translate.wordpress.org/projects/wp-plugins/etbs-edit-conflict-guard)
 * Tags
 * [editorial workflow](https://vec.wordpress.org/plugins/tags/editorial-workflow/)
   [multi author](https://vec.wordpress.org/plugins/tags/multi-author/)[post lock](https://vec.wordpress.org/plugins/tags/post-lock/)
 *  [Advanced View](https://vec.wordpress.org/plugins/etbs-edit-conflict-guard/advanced/)

## Ratings

No reviews have been submitted yet.

[Your review](https://wordpress.org/support/plugin/etbs-edit-conflict-guard/reviews/#new-post)

[See all reviews](https://wordpress.org/support/plugin/etbs-edit-conflict-guard/reviews/)

## Contributors

 *   [ ETBS (DAI) ](https://profiles.wordpress.org/etbsjp/)

## Support

Got something to say? Need help?

 [View support forum](https://wordpress.org/support/plugin/etbs-edit-conflict-guard/)

## Donate

Would you like to support the advancement of this plugin?

 [ Donate to this plugin ](https://etbs.jp/product/donate/)