Title: Self Destructing Posts
Author: Gary Kovar
Published: <strong>August 10, 2026</strong>
Last modified: August 10, 2026

---

Search plugins

![](https://ps.w.org/self-destructing-posts/assets/banner-772x250.png?rev=3640737)

![](https://ps.w.org/self-destructing-posts/assets/icon-256x256.png?rev=3640737)

# Self Destructing Posts

 By [Gary Kovar](https://profiles.wordpress.org/binarygary/)

[Download](https://downloads.wordpress.org/plugin/self-destructing-posts.1.0.0.zip)

 * [Details](https://vec.wordpress.org/plugins/self-destructing-posts/#description)
 * [Reviews](https://vec.wordpress.org/plugins/self-destructing-posts/#reviews)
 *  [Installation](https://vec.wordpress.org/plugins/self-destructing-posts/#installation)
 * [Development](https://vec.wordpress.org/plugins/self-destructing-posts/#developers)

 [Support](https://wordpress.org/support/plugin/self-destructing-posts/)

## Description

**Self Destructing Posts** lets an editor mark a post as ephemeral. Turn on **Enable
self-destruct**, choose how and when the post should disappear, and publish. The
first qualified reader opens it, and the post self-destructs after your chosen grace
period.

**This is a content-lifecycle tool, not a security or secrecy product.** It cannot
prevent screenshots, copying, browser cache, search-engine indexing, or a recipient
sharing the URL. Treat it as “this post is meant to be temporary,” not “this post
is secret.”

#### What it does

 * A **Self-Destruct** panel in the block editor (and a classic-editor meta box)
   to enable and configure per post.
 * **First qualified read** trigger — a real reading event, not a crawler or link
   preview.
 * A configurable **grace period** between the qualifying read and destruction.
 * Destructive actions: **Move to Trash**, **Draft**, **Private**, **Replace with
   a message**, or **Permanently delete**.
 * Destroyed-URL responses: **410 Gone** (default), **404**, **redirect**, or a **
   custom message** — served even if the post was permanently deleted.
 * **Atomic arming** so exactly one reader arms a post under concurrent traffic.
 * **No-store** cache headers and **noindex/nofollow/noarchive** on self-destruct
   posts.
 * Exempts administrators/editors, and filters known bots, previews, prefetch, HEAD,
   REST and feed requests to reduce accidental destruction.
 * A **repair tool** that completes destructions if WP-cron ran late, and an **emergency
   pause** that halts all pending destructions.
 * A minimal **audit log** of state transitions that never stores the destroyed 
   post’s content.

#### What it deliberately does NOT do

 * Guarantee secrecy or DRM.
 * Prevent screenshots, copy/paste, saved pages, reader mode, or browser history.
 * Remove content already cached or indexed by search engines, CDNs, social networks,
   or browsers.
 * Track the identity of individual readers.

An already-cached page cannot be reliably “unread.” Caching is the single biggest
practical risk — the plugin sends no-store headers and integrates with common cache
plugins on a best-effort basis, but it cannot promise universal cache bypass.

## Screenshots

[⌊The Self-Destruct panel in the block editor.⌉⌊The Self-Destruct panel in the block
editor.⌉[

The Self-Destruct panel in the block editor.

[⌊The posts-list status column.⌉⌊The posts-list status column.⌉[

The posts-list status column.

[⌊The settings screen with the emergency pause.⌉⌊The settings screen with the emergency
pause.⌉[

The settings screen with the emergency pause.

## Installation

 1. Upload the `self-destructing-posts` folder to `/wp-content/plugins/`, or install
    through the Plugins screen.
 2. Activate the plugin.
 3. Open a post, expand the **Self-Destruct** panel in the editor sidebar, and switch
    on **Enable self-destruct**.
 4. Choose your trigger, grace period, action, and destroyed-URL behavior, then publish.
 5. Review site-wide defaults and the emergency pause under **Settings  Self-Destruct**.

For reliable timing on low-traffic sites, configure a real server cron to run `wp-
cron.php`.

## FAQ

### Is this secure or private?

No. This is a content-lifecycle tool. It cannot stop screenshots, copies, caches,
or someone re-sharing the URL. Do not use it to protect secrets.

### When does the countdown start?

When a reader _qualifies_ (a genuine reading event), not when you publish. The grace
period runs from that moment.

### What counts as a “qualified read”?

A public visitor loads the post, a small script confirms the page was visible for
at least a few seconds, and the browser returns a signed, single-use token. Admins/
editors, bots, previews, prefetches, feeds, and REST requests do not qualify.

### What happens after a post is destroyed?

Future visitors get the response you chose — 410 Gone by default. The plugin keeps
a minimal route record so it can serve that response even if the post was permanently
deleted.

### Do global settings or per-post settings win?

Per-post settings always override the site-wide defaults under Settings  Self-Destruct.
The global values are the starting point for new posts (grace period, action, destroyed
behavior, redirect URL, message) and the site-wide exempt roles. The master “enabled
site-wide” switch is a kill switch: when off, no post is gated, armed, or destroyed.

### Can I stop a destruction?

Yes. Disarm an armed post from the posts list, or flip the site-wide **Emergency
pause** under Settings  Self-Destruct.

## Reviews

There are no reviews for this plugin.

## Contributors & Developers

“Self Destructing Posts” is open source software. The following people have contributed
to this plugin.

Contributors

 *   [ Gary Kovar ](https://profiles.wordpress.org/binarygary/)

[Translate “Self Destructing Posts” into your language.](https://translate.wordpress.org/projects/wp-plugins/self-destructing-posts)

### Interested in development?

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

## Changelog

#### 1.0.0

 * First public release on WordPress.org. The plugin code is unchanged from 0.1.2—
   the version marks readiness for general use, not new features. Earlier 0.1.x 
   versions were development releases and were never published here.

#### 0.1.2

 * Fixed the internal codename showing in two labels — the classic-editor checkbox
   and the posts-list bulk actions now read “Enable/Disable self-destruct”. No behavior
   change.

#### 0.1.1

 * Raised minimum requirements to WordPress 6.6 and PHP 8.2.
 * Renamed the main plugin file to match the directory slug.
 * Removed unused internal code (an unwired state-transition validator) and tidied
   module exports. No behavior change.

#### 0.1.0

 * Initial development release: editor panel, first-qualified-read arming, grace
   period, Trash/Draft/410 actions, no-cache/noindex headers, atomic arming, scheduled-
   destruction repair, minimal audit log.

## Meta

 *  Version **1.0.0**
 *  Last updated **1 day ago**
 *  Active installations **Fewer than 10**
 *  WordPress version ** 6.6 or higher **
 *  Tested up to **7.0.3**
 *  PHP version ** 8.2 or higher **
 *  Language
 * [English (US)](https://wordpress.org/plugins/self-destructing-posts/)
 * Tags
 * [expire](https://vec.wordpress.org/plugins/tags/expire/)[privacy](https://vec.wordpress.org/plugins/tags/privacy/)
 *  [Advanced View](https://vec.wordpress.org/plugins/self-destructing-posts/advanced/)

## Ratings

No reviews have been submitted yet.

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

[See all reviews](https://wordpress.org/support/plugin/self-destructing-posts/reviews/)

## Contributors

 *   [ Gary Kovar ](https://profiles.wordpress.org/binarygary/)

## Support

Got something to say? Need help?

 [View support forum](https://wordpress.org/support/plugin/self-destructing-posts/)