{"id":349027,"date":"2026-08-10T14:36:48","date_gmt":"2026-08-10T14:36:48","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/this-post-will-self-destruct\/"},"modified":"2026-08-10T14:36:18","modified_gmt":"2026-08-10T14:36:18","slug":"self-destructing-posts","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/self-destructing-posts\/","author":14717026,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.0","stable_tag":"1.0.0","tested":"7.0.3","requires":"6.6","requires_php":"8.2","requires_plugins":null,"header_name":"Self Destructing Posts","header_author":"Gary Kovar","header_description":"Mark a post as ephemeral: after it is read, it self-destructs according to rules set on that post.","assets_banners_color":"1e1a19","last_updated":"2026-08-10 14:36:18","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"","rating":0,"author_block_rating":0,"active_installs":0,"downloads":27,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"binarygary","date":"2026-08-10 14:36:18"}},"upgrade_notice":{"1.0.0":"<p>First public release on WordPress.org. No functional change from 0.1.2.<\/p>","0.1.2":"<p>Corrects two mislabeled controls; no behavior change.<\/p>","0.1.1":"<p>Now requires WordPress 6.6+ and PHP 8.2+. Internal cleanup; no behavior change.<\/p>","0.1.0":"<p>Initial development release.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3640737,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3640737,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3640737,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3640737,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3640737,"resolution":"1","location":"assets","locale":"","width":560,"height":1728},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3640737,"resolution":"2","location":"assets","locale":"","width":2476,"height":1338},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3640737,"resolution":"3","location":"assets","locale":"","width":2476,"height":1728}},"screenshots":{"1":"The Self-Destruct panel in the block editor.","2":"The posts-list status column.","3":"The settings screen with the emergency pause."}},"plugin_section":[],"plugin_tags":[275036,275034,9501,396,275035],"plugin_category":[54],"plugin_contributors":[93108],"plugin_business_model":[],"class_list":["post-349027","plugin","type-plugin","status-publish","hentry","plugin_tags-content-lifecycle","plugin_tags-ephemeral","plugin_tags-expire","plugin_tags-privacy","plugin_tags-self-destruct","plugin_category-security-and-spam-protection","plugin_contributors-binarygary","plugin_committers-binarygary"],"banners":{"banner":"https:\/\/ps.w.org\/self-destructing-posts\/assets\/banner-772x250.png?rev=3640737","banner_2x":"https:\/\/ps.w.org\/self-destructing-posts\/assets\/banner-1544x500.png?rev=3640737","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/self-destructing-posts\/assets\/icon-128x128.png?rev=3640737","icon_2x":"https:\/\/ps.w.org\/self-destructing-posts\/assets\/icon-256x256.png?rev=3640737","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/self-destructing-posts\/assets\/screenshot-1.png?rev=3640737","caption":"The Self-Destruct panel in the block editor."},{"src":"https:\/\/ps.w.org\/self-destructing-posts\/assets\/screenshot-2.png?rev=3640737","caption":"The posts-list status column."},{"src":"https:\/\/ps.w.org\/self-destructing-posts\/assets\/screenshot-3.png?rev=3640737","caption":"The settings screen with the emergency pause."}],"raw_content":"<!--section=description-->\n<p><strong>Self Destructing Posts<\/strong> lets an editor mark a post as ephemeral. Turn on <strong>Enable self-destruct<\/strong>, 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.<\/p>\n\n<p><strong>This is a content-lifecycle tool, not a security or secrecy product.<\/strong> 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.\"<\/p>\n\n<h4>What it does<\/h4>\n\n<ul>\n<li>A <strong>Self-Destruct<\/strong> panel in the block editor (and a classic-editor meta box) to enable and configure per post.<\/li>\n<li><strong>First qualified read<\/strong> trigger \u2014 a real reading event, not a crawler or link preview.<\/li>\n<li>A configurable <strong>grace period<\/strong> between the qualifying read and destruction.<\/li>\n<li>Destructive actions: <strong>Move to Trash<\/strong>, <strong>Draft<\/strong>, <strong>Private<\/strong>, <strong>Replace with a message<\/strong>, or <strong>Permanently delete<\/strong>.<\/li>\n<li>Destroyed-URL responses: <strong>410 Gone<\/strong> (default), <strong>404<\/strong>, <strong>redirect<\/strong>, or a <strong>custom message<\/strong> \u2014 served even if the post was permanently deleted.<\/li>\n<li><strong>Atomic arming<\/strong> so exactly one reader arms a post under concurrent traffic.<\/li>\n<li><strong>No-store<\/strong> cache headers and <strong>noindex\/nofollow\/noarchive<\/strong> on self-destruct posts.<\/li>\n<li>Exempts administrators\/editors, and filters known bots, previews, prefetch, HEAD, REST and feed requests to reduce accidental destruction.<\/li>\n<li>A <strong>repair tool<\/strong> that completes destructions if WP-cron ran late, and an <strong>emergency pause<\/strong> that halts all pending destructions.<\/li>\n<li>A minimal <strong>audit log<\/strong> of state transitions that never stores the destroyed post's content.<\/li>\n<\/ul>\n\n<h4>What it deliberately does NOT do<\/h4>\n\n<ul>\n<li>Guarantee secrecy or DRM.<\/li>\n<li>Prevent screenshots, copy\/paste, saved pages, reader mode, or browser history.<\/li>\n<li>Remove content already cached or indexed by search engines, CDNs, social networks, or browsers.<\/li>\n<li>Track the identity of individual readers.<\/li>\n<\/ul>\n\n<p>An already-cached page cannot be reliably \"unread.\" Caching is the single biggest practical risk \u2014 the plugin sends no-store headers and integrates with common cache plugins on a best-effort basis, but it cannot promise universal cache bypass.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>self-destructing-posts<\/code> folder to <code>\/wp-content\/plugins\/<\/code>, or install through the Plugins screen.<\/li>\n<li>Activate the plugin.<\/li>\n<li>Open a post, expand the <strong>Self-Destruct<\/strong> panel in the editor sidebar, and switch on <strong>Enable self-destruct<\/strong>.<\/li>\n<li>Choose your trigger, grace period, action, and destroyed-URL behavior, then publish.<\/li>\n<li>Review site-wide defaults and the emergency pause under <strong>Settings \u2192 Self-Destruct<\/strong>.<\/li>\n<\/ol>\n\n<p>For reliable timing on low-traffic sites, configure a real server cron to run <code>wp-cron.php<\/code>.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"is%20this%20secure%20or%20private%3F\"><h3>Is this secure or private?<\/h3><\/dt>\n<dd><p>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.<\/p><\/dd>\n<dt id=\"when%20does%20the%20countdown%20start%3F\"><h3>When does the countdown start?<\/h3><\/dt>\n<dd><p>When a reader <em>qualifies<\/em> (a genuine reading event), not when you publish. The grace period runs from that moment.<\/p><\/dd>\n<dt id=\"what%20counts%20as%20a%20%22qualified%20read%22%3F\"><h3>What counts as a \"qualified read\"?<\/h3><\/dt>\n<dd><p>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.<\/p><\/dd>\n<dt id=\"what%20happens%20after%20a%20post%20is%20destroyed%3F\"><h3>What happens after a post is destroyed?<\/h3><\/dt>\n<dd><p>Future visitors get the response you chose \u2014 410 Gone by default. The plugin keeps a minimal route record so it can serve that response even if the post was permanently deleted.<\/p><\/dd>\n<dt id=\"do%20global%20settings%20or%20per-post%20settings%20win%3F\"><h3>Do global settings or per-post settings win?<\/h3><\/dt>\n<dd><p>Per-post settings always override the site-wide defaults under Settings \u2192 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.<\/p><\/dd>\n<dt id=\"can%20i%20stop%20a%20destruction%3F\"><h3>Can I stop a destruction?<\/h3><\/dt>\n<dd><p>Yes. Disarm an armed post from the posts list, or flip the site-wide <strong>Emergency pause<\/strong> under Settings \u2192 Self-Destruct.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>First public release on WordPress.org. The plugin code is unchanged from 0.1.2 \u2014 the version marks readiness for general use, not new features. Earlier 0.1.x versions were development releases and were never published here.<\/li>\n<\/ul>\n\n<h4>0.1.2<\/h4>\n\n<ul>\n<li>Fixed the internal codename showing in two labels \u2014 the classic-editor checkbox and the posts-list bulk actions now read \"Enable\/Disable self-destruct\". No behavior change.<\/li>\n<\/ul>\n\n<h4>0.1.1<\/h4>\n\n<ul>\n<li>Raised minimum requirements to WordPress 6.6 and PHP 8.2.<\/li>\n<li>Renamed the main plugin file to match the directory slug.<\/li>\n<li>Removed unused internal code (an unwired state-transition validator) and tidied module exports. No behavior change.<\/li>\n<\/ul>\n\n<h4>0.1.0<\/h4>\n\n<ul>\n<li>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.<\/li>\n<\/ul>","raw_excerpt":"Mark a post as ephemeral: after it has been read, it self-destructs according to the rules you set on that post.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/349027","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=349027"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/binarygary"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=349027"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=349027"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=349027"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=349027"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=349027"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=349027"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}