Duplicate

A Duplicate row action on every row you can edit, and a Duplicate entry in the Bulk actions dropdown. Both run the same clone routine.

The row action

Hover a row, click Duplicate. The copy is created and you land straight in the editor on it — the common case is "start the next page from this one", so there is no confirmation step in between.

The link is nonce-protected and the capability is re-checked when it runs: the action only appears for rows you can edit_post, and the handler refuses anything else even if the URL is reconstructed by hand.

The bulk action

Select rows, pick Duplicate from Bulk actions, apply. You stay on the list table and get a notice — "7 items duplicated to draft."

Rows you lack edit_post on are skipped silently and are not counted, so the number in the notice is the number of copies that actually exist.

What a copy is

Copied verbatim Changed Not copied
Content, excerpt Status → draft Comments on the original
Parent, menu order Title → "… (Copy)" Slug history (_wp_old_slug)
Password, comment and ping status Slug → empty
All taxonomy terms Author → you
All post meta Dates → now

The empty slug is why the copy never collides with the original: WordPress generates one from the title when you first publish it.

The copy is owned by whoever clicked, not by the original's author — the person editing a draft should be the person who can be asked about it.

What it does not do

Meta is copied verbatim, and post-ID references inside it are not remapped. A relationship field, a stored gallery, a "related pages" list — the copy points at the same targets the original did. Usually that is exactly right; when it isn't, it is a thing to fix in the copy, and the plugin does not guess which.

The same goes for attachments: the copy shares the original's featured image and any media referenced in its content. Nothing in the media library is duplicated.

Next: Extending & internals.