This plugin generates a unique link you can send to a friend so they can read a post before you publish it. The link works for someone who is not logged in and has no account, it only ever opens the one post it was issued for, and it stops working by itself when the time you set runs out. Everything
PricingFree downloadThe WordPress.org download is free. Pro versions, add-ons or external services may cost extra.
CompatibilityRequires WordPress 6.8 and PHP 8.2.
SourceWordPress plugins · Nov 4, 2026
01 / Source details
Aboutthistool.
This plugin generates a unique link you can send to a friend so they can read a post before you publish it. The link works for someone who is not logged in and has no account, it only ever opens the one post it was issued for, and it stops working by itself when the time you set runs out.
Everything happens under Posts -> WP-DraftsForFriends : pick an unpublished post, say how long the link should last, and copy the link it gives you. The list below shows every link you have out, how long each has left, and lets you extend or revoke them. The settings are the second tab of that same page.
Sharing takes the publish_posts capability rather than manage_options : a plugin for sharing your own drafts has no business asking for the capability that lets somebody reconfigure the site.
Modified from Drafts for Friends, originally by Neville Longbottom. The plugin icon is by Freepik from Flaticon .
Features
A unique 32-character link per share, valid only for the post it was issued for
An expiry you choose in seconds, minutes, hours or days, with a default you set once
Works for a logged-out visitor with no account
Scheduled and pending posts can be shared as well as drafts
A box in the post editor that shows the post’s links and creates another with one button
A sortable, paginated list of every link you have out, with the time each has left
Extend or revoke links in bulk
Comments are forced closed on a shared draft
Moving a post to the trash revokes its links; restoring the post brings them back
Multisite-safe, including network activation
Donations
I spent most of my free time creating, updating, maintaining and supporting these plugins, if you really love my plugins and could spare me a couple of bucks, I will really appreciate it. If not feel free to use it without any obligations.
Usage
Go to Posts -> WP-DraftsForFriends . The page has two tabs, Shared Drafts and Settings .
Under Share a Draft , choose an unpublished post, set how long the link should last, and press Share Draft . The link appears in the list below. Hovering a row shows Edit Draft , which opens the post, and Copy Link , which puts the link on your clipboard ready to send to whoever needs it.
You can also share from inside the post editor. Every unpublished post has a Drafts for Friends box listing its links and the time each has left, each with a Copy Link button; tick Create a share link when this post is saved and the next save creates one. A published post needs no link — anybody can read it — so the box says only that.
The list shows every link you have out. Expires After counts down and then reads Expired . Twenty rows are shown at a time, every column except the link is sortable, and Screen Options changes how many rows you see.
To extend links, set Extend by to the duration you want to add, tick the rows, choose Extend Selected and press Apply . To revoke them, tick the rows and choose Revoke Selected . Both are bulk actions rather than links on each row, and deliberately so: a link is a GET , and a browser or link checker that quietly prefetches one would have revoked every share on the page before you knew about it.
The Settings tab sets the duration a new share starts on. It is only a starting value — both the share form and Extend by can be changed for one share without changing the setting. That tab takes manage_options , so an author sees the Shared Drafts tab and not the Settings one.
Anyone with the edit_others_posts capability — administrators and editors — sees every shared draft on the site and can share any unpublished post. Authors and contributors see only their own, and can only share posts they are allowed to edit.
WP-CLI
wp draftsforfriends list --user=admin wp draftsforfriends create 42 --user=admin wp draftsforfriends create 42 --expires=14 --measure=d --user=admin wp draftsforfriends extend 3 4 5 --expires=1 --measure=d --user=admin wp draftsforfriends revoke 3 --yes --user=admin create prints the share link on a line of its own before its success message, and `list` prints one per row. **A share link is the credential** — whoever holds it reads the unpublished post until the link expires, with no account and no login — so treat the output of both as you would the drafts themselves. Shell history, a CI log and a captured `stdout` are all places those links now live.
Pass --user . WP-CLI runs as nobody unless told otherwise, and every one of these is scoped exactly as the screen is: a share belongs to whoever created it, anyone with edit_others_posts sees them all, and creating, extending or revoking one checks that you may edit the post it points at. Run as nobody, list reports nothing and the rest are refused.
--expires and `--measure` default to the duration on the **Settings** tab, the same value the share form and **Extend by** start on. `extend` and `revoke` take as many ids as you like, exactly as the bulk actions do. `revoke` asks before it acts, because the link stops working immediately and cannot be restored; `--yes` answers for a script.
There is no subcommand for the settings — that is one option row, which wp option get wp_draftsforfriends_options already reads.
Filters
wp_draftsforfriends_capability decides who may reach each tab. The context is `shares` for the Shared Drafts tab or `settings` for the Settings tab: add_filter( 'wp_draftsforfriends_capability', function ( $capability, $context ) { return 'settings' === $context ? 'manage_options' : 'edit_posts'; }, 10, 2 ); wp_draftsforfriends_share_url filters the link a friend is given, and wp_draftsforfriends_requested_hash reads the hash back off the request. **They
are one contract.** Change the shape of the link without teaching the plugin to recognise it and every share link 404s, with nothing on the admin screens looking wrong:
The default link is ?p=<id> rather than the post’s permalink, and that is not an oversight: the preview works by catching the row WordPress fetches for a bare post id and puts back before rendering. A permalink looks the post up by slug among the public statuses, so an unpublished post is never found at all.
Actions
Three fire as a share moves through its life, each after the write has succeeded:
wp_draftsforfriends_share_created — the stored share, and the post it shares.
wp_draftsforfriends_share_extended — the share as it now stands, and the expiry it carried before.
wp_draftsforfriends_share_revoked — the share as it was; the link has already stopped working.
Posts -> WP-DraftsForFriends: the share form, and every share with its countdownThe Settings tab, which sets how long a new share lasts unless you say otherwiseWhat the friend sees: an unpublished post, with no account and no login
02 / Source details
Gettingstarted.
01Install and activate the plugin.
02Go to WP-Admin -> Posts -> WP-DraftsForFriends and share your first draft.
There is nothing to configure before you start. Sharing takes the publish_posts capability rather than manage_options , so any author can share their own drafts without being made an administrator.
03 / Source details
Frequently asked questions.
Where did the Drafts for Friends page go?
It is still under Posts , and it is now one page with two tabs — Shared Drafts and Settings — rather than a screen with no settings of its own.
The address changed, from edit.php?page=wp-draftsforfriends/wp-draftsforfriends.php to edit.php?page=wp-draftsforfriends , so an old bookmark needs replacing. The old address had the plugin’s own folder name in it, which meant the page moved if you ever renamed the folder.
Links you have already given to friends are unaffected. Those point at the post itself and never went through the admin screen.
Where have Extend and Delete gone from each row?
They are bulk actions now, above and below the list. Tick the rows you want, choose Extend Selected or Revoke Selected , and press Apply . Extend uses the Extend by duration next to the dropdown.
A row action is a plain link, and a plain link is one browser prefetch or one link checker away from being followed without anybody meaning to. Revoking cannot be undone, and extending silently prolongs public access to something you have not published, so neither should be reachable that way.
A friend says the link shows “Page not found”
The link has expired, it has been revoked, or the post has been moved to the trash. Open Posts -> WP-DraftsForFriends and look at the Expires After column: an expired share reads Expired . Tick that row, set Extend by , and choose Extend Selected — the same link starts working again. Restoring the post from the trash also makes its links work again.
Once the post is published the link stops previewing and simply shows the published post, which is public by then anyway.
Who can see which shared drafts?
Anyone with the edit_others_posts capability — administrators and editors — sees every shared draft on the site and can share any unpublished post. Authors and contributors see only their own, and can only share posts they are allowed to edit.
Can my friend leave a comment on the draft?
No. Comments are forced closed on a shared draft.
Does the friend need an account?
No. That is the point of the plugin: the link works for a logged-out visitor, and only for the post it was issued for, and only until it expires.
Does the screen need JavaScript?
No. Sharing, extending and revoking are ordinary form submissions handled on the server, so all three work with JavaScript turned off. The script only adds the copy button, a warning before you revoke, and catching a missing draft or a nonsense duration before the page reloads.
The post editor’s box is the same: with JavaScript off it shows a checkbox that creates the link when you next save the post, in place of the Create Share Link button.
Website LLMs.txt and LLMs-Full.txt Generator is an LLMs.txt generator and llms-full.txt generator for WordPress. It helps site owners generate, manage, preview, validate, and serve AI discovery files from published public content. Use it to create structured /llms.txt and optional /llms-full.txt end
EngageDock AI is a customizable floating contact widget for WordPress websites that want more leads and faster visitor communication. It helps small businesses turn website traffic into calls, texts, emails, and callback requests from one clean contact panel. Key Features: Click-to-Call – One tap ca
Altify AI is an auto ALT text and AI ALT text plugin for WordPress images. It helps generate descriptive image ALT text for accessibility and image SEO. Use bulk image ALT text tools for your Media Library, generate featured image ALT text automatically, and scale WooCommerce image ALT updates with
The Accepted Payment Methods plugin is a straightforward, lightweight solution that enhances your website by displaying visually appealing icons of the payment methods you accept. This plugin is ideal for a variety of websites, including e-commerce platforms, service-oriented websites, and informati