Smart Duplicator
WordPress plugin to duplicate posts, pages & custom post types with one click. Clean, fast, open source. No bloat.
by Your Name · github.com/aialamin/smart-duplicator · website
Install
No release zip yet. The repository archive installs, but the folder name will carry the branch suffix and updates will not flow:
wp plugin install https://github.com/aialamin/smart-duplicator/archive/refs/heads/main.zipDuplicate WordPress posts, pages, and custom post types with a single click.
A lightweight, clean, open-source alternative to Duplicate Post / Yoast Duplicate Post — no bloat, no upsells, fully hookable.
Features
- ✅ Duplicate any post type — posts, pages, and all registered public CPTs
- ✅ One-click row action — "Duplicate" appears in every list table
- ✅ Bulk duplicate — select many posts and duplicate them all at once
- ✅ Copies meta, taxonomies, featured image — fully configurable per setting
- ✅ Configurable title suffix — e.g. " (Copy)", " – Draft", or blank
- ✅ Choose post status — draft, published, pending, or private
- ✅ REST API endpoint —
POST /wp-json/smart-duplicator/v1/duplicate/{id} - ✅ Developer hooks — filter meta keys to skip, act after duplication
- ✅ GPL v2 licensed — truly free and open source
Installation
From ZIP
- Download the latest release ZIP.
- Go to Plugins → Add New → Upload Plugin.
- Activate.
Manually
git clone https://github.com/your-repo/smart-duplicator.git wp-content/plugins/smart-duplicator
Then activate from Plugins → Installed Plugins.
Usage
Row Action
In any post list (Posts, Pages, or a CPT list), hover a row — click Duplicate.
Bulk Action
Select multiple posts → Bulk Actions → Duplicate → Apply.
REST API
POST /wp-json/smart-duplicator/v1/duplicate/123
Authorization: Basic <credentials>
{
"status": "draft",
"title_suffix": " (Copy)"
}
Returns:
{
"id": 456,
"title": "My Post (Copy)",
"status": "draft",
"edit_link": "https://yoursite.com/wp-admin/post.php?post=456&action=edit",
"link": "https://yoursite.com/?p=456"
}
Developer Hooks
Filter: skip certain meta keys
add_filter( 'smart_duplicator_skip_meta_keys', function( $keys ) {
$keys[] = '_my_custom_key_to_skip';
return $keys;
} );
Action: after duplication
add_action( 'smart_duplicator_after_duplicate', function( $new_id, $original_id, $source_post, $opts ) {
// e.g. log, send notification, run custom logic
}, 10, 4 );
Programmatic duplication
$new_id = Smart_Duplicator::duplicate( 123, [
'status' => 'draft',
'title_suffix' => ' (Copy)',
'copy_meta' => true,
'copy_terms' => true,
] );
Settings
Go to Settings → Smart Duplicator to configure:
| Option | Description |
|---|---|
| Supported Post Types | Which post types show the Duplicate action |
| Duplicate Status | Status of the new copy (draft / publish / pending / private) |
| Title Suffix | Text appended to the duplicated post's title |
| After Duplicating | Open editor or stay on list |
| Copy Meta | Copy all custom fields |
| Copy Terms | Copy categories, tags & custom taxonomies |
| Copy Featured Image | Copy the thumbnail assignment |
Requirements
- WordPress 5.5+
- PHP 7.4+
License
GPL v2 or later. See LICENSE for full text.