In this article, I will show you how to duplicate a page in WordPress without using a plugin. Here I will explain 3 different ways to do this. You can either manually duplicate a page or use some code snippets or use a dedicated plugin.
Why do you need to duplicate a page in WordPress?
Duplicating a page in WordPress can serve a variety of purposes, and there are several scenarios where you might find this feature useful:
- Replicating content: Save time by copying the layout and structure of a page for similar content.
- Consistent design: Maintain a consistent look for specific page types.
- A/B testing: Test different versions of a page for better engagement or conversion.
- Translation: Start from a duplicate to create a translated version of a page.
- Long-Form Content: Keep a template when adding unique content.
- Event Pages: Quickly set up similar event pages with duplicate content.
- Storage and repurposing: Preserve original copies when repurposing content.
- Backup: Create a duplicate for backup before making important changes.
- Custom Landing Pages: Efficiently create customized landing pages for campaigns.
- Development Testing: Duplicate page for testing changes before going live.
Remember, while duplicating pages can be helpful, it’s important to ensure that the duplicated content is properly optimized for its purpose. Duplicate content on your website, especially if it has not been significantly modified, can have a negative impact on search engine optimization (SEO) and user experience.
Manually Duplicate a Page in WordPress
If you want to manually duplicate a page in WordPress all you need to do is edit the existing page or post and click on the three-dot menu in the top right corner.
Now you will see an option like “Copy all blocks”, just click on it and all the content of the page will be copied to your clipboard.
Now go back and create a new page, set the page title and paste the copied code (CTRL + V) to the clipboard.
Now all the content will be copied to your new page and you have successfully duplicated a page with just a few clicks.
Here, note that if you go through this method, only the page content will be copied but metadata like page title, meta description, featured image, category and tags will not be copied.
So, for this you can use the second method which I am going to share below.
Duplicate a page in WordPress without a plugin
Now, if you don’t want to use any plugin and want to add a duplicate button right after a post or page that will duplicate your post then you can use the code below.
Simply paste the code into the functions.php file or use a code manager plugin like WP Code, Code Snippets, etc.
/*
* Function for post duplication. Dups appear as drafts. User is redirected to the edit screen
*/
function rd_duplicate_post_as_draft(){
global $wpdb;
if (! ( isset( $_GET['post']) || isset( $_POST['post']) || ( isset($_REQUEST['action']) && 'rd_duplicate_post_as_draft' == $_REQUEST['action'] ) ) ) {
wp_die('No post to duplicate has been supplied!');
}
if ( !isset( $_GET['duplicate_nonce'] ) || !wp_verify_nonce( $_GET['duplicate_nonce'], basename( __FILE__ ) ) )
return;
$post_id = (isset($_GET['post']) ? absint( $_GET['post'] ) : absint( $_POST['post'] ) );
$post = get_post( $post_id );
$current_user = wp_get_current_user();
$new_post_author = $current_user->ID;
if (isset( $post ) && $post != null) {
$args = array(
'comment_status' => $post->comment_status,
'ping_status' => $post->ping_status,
'post_author' => $new_post_author,
'post_content' => $post->post_content,
'post_excerpt' => $post->post_excerpt,
'post_name' => $post->post_name,
'post_parent' => $post->post_parent,
'post_password' => $post->post_password,
'post_status' => 'draft',
'post_title' => $post->post_title,
'post_type' => $post->post_type,
'to_ping' => $post->to_ping,
'menu_order' => $post->menu_order
);
$new_post_id = wp_insert_post( $args );
$taxonomies = get_object_taxonomies($post->post_type); // returns array of taxonomy names for post type, ex array("category", "post_tag");
foreach ($taxonomies as $taxonomy) {
$post_terms = wp_get_object_terms($post_id, $taxonomy, array('fields' => 'slugs'));
wp_set_object_terms($new_post_id, $post_terms, $taxonomy, false);
}
$post_meta_infos = $wpdb->get_results("SELECT meta_key, meta_value FROM $wpdb->postmeta WHERE post_id=$post_id");
if (count($post_meta_infos)!=0) {
$sql_query = "INSERT INTO $wpdb->postmeta (post_id, meta_key, meta_value) ";
foreach ($post_meta_infos as $meta_info) {
$meta_key = $meta_info->meta_key;
if( $meta_key == '_wp_old_slug' ) continue;
$meta_value = addslashes($meta_info->meta_value);
$sql_query_sel[]= "SELECT $new_post_id, '$meta_key', '$meta_value'";
}
$sql_query.= implode(" UNION ALL ", $sql_query_sel);
$wpdb->query($sql_query);
}
wp_redirect( admin_url( 'post.php?action=edit&post=" . $new_post_id ) );
exit;
} else {
wp_die("Post creation failed, could not find original post: ' . $post_id);
}
}
add_action( 'admin_action_rd_duplicate_post_as_draft', 'rd_duplicate_post_as_draft' );
function rd_duplicate_post_link( $actions, $post ) {
if (current_user_can('edit_posts')) {
$actions['duplicate'] = '<a href="' . wp_nonce_url('admin.php?action=rd_duplicate_post_as_draft&post=" . $post->ID, basename(__FILE__), "duplicate_nonce' ) . '" title="Duplicate this item" rel="permalink">Duplicate</a>';
}
return $actions;
}
add_filter( 'post_row_actions', 'rd_duplicate_post_link', 10, 2 );
add_filter('page_row_actions', 'rd_duplicate_post_link', 10, 2);
Download the Above code (Right click and save it as txt file )
This way, you don’t need to use a dedicated duplicate plugin for this and you can just use the code snippet for it.
Now you will see a duplicate link as shown in the above screenshot, that too without using any dedicated duplicate plugin.
If you still want to use plugins for more features then you can use any duplicate plugin for WordPress.
Now you have learned how to duplicate a page in WordPress without a plugin. If you have any doubt feel free to ask me in the comment section.