How to duplicate WordPress pages or posts?

The duplicate copy of your page and posts can be useful to you in the future. So in this article, we are going to learn how you can make a duplicate copy of your post and pages.

I) Using duplicate Post plugin

 
If you want to use a plugin to make a copy of your posts then the duplicator post plugin is the best option for you. It not only makes a copy of your post but also makes a copy of your comments, slugs, menu order, etc. You also have options to set a prefix or suffix. This will make it easier to spot the difference between the original and the duplicate. For example, you can use prefixes like "copy of". So if the original title of the post is " What is a plugin", then the duplicate title will appear as " copy of what is a plugin".

 Follow the steps to duplicate a post or page using the plugin:

1. First, Install and Activate the Duplicate Post plugin.

2. Log in to your WordPress dashboard, then go to Pages>All Pages to clone a page. Or go to Posts> All Posts to clone a post.

3. Then go to the page or post that you want to clone. Here you will see two new options viz. Clone and New Draft.

4. To make a duplicate of the selected post, click on Clone. To make a cloned version of the selected post and open it in the post editor, click on New Draft.

II) Using Duplicate Page and Post plugin

Using this plugin, you can clone WordPress pages and posts quickly. In this case, the title, content, or style remain unchanged.

Follow the below steps to make a duplicate copy of your pages or posts :

  1. First, Install and Activate the plugin, then go to the All Pages or All Posts menu (depending on what you want to duplicate).
  2. Go to the page or post that you want to duplicate. Click on the Duplicate button.
  3. Now the page or post will be cloned. And it will appear as a new draft with the same name as the original.                      That's it. This is the way in which you can make a clone of your post or page.

III) Duplicate your page or post without plugins

You can also use some codes to duplicate your posts and pages. We recommend you make a backup copy of your website before editing any files in it.
 I am going to edit the function.php file of my website. To enable post duplication in WordPress you have to paste the below code inside the function.php file:

* 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!');
}
/*
* Nonce verification
*/
if ( !isset( $_GET['duplicate_nonce'] ) || !wp_verify_nonce( $_GET['duplicate_nonce'], basename( __FILE__ ) ) )
return;
/*
* get the original post id
*/
$post_id = (isset($_GET['post']) ? absint( $_GET['post'] ) : absint( $_POST['post'] ) );
/*
* and all the original post data then
*/
$post = get_post( $post_id );
/*
* if you don't want current user to be the new post author,
* then change next couple of lines to this: $new_post_author = $post->post_author;
*/
$current_user = wp_get_current_user();
$new_post_author = $current_user->ID;
/*
* if post data exists, create the post duplicate
*/
if (isset( $post ) && $post != null) {
/*
* new post data array
*/
$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
);
/*
* insert the post by wp_insert_post() function
*/
$new_post_id = wp_insert_post( $args );
/*
* get all current post terms ad set them to the new post draft
*/
$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);
}

/*
* duplicate all post meta just in two SQL queries
*/
$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);
}
/*
* finally, redirect to the edit post screen for the new draft
*/
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' );
/*
* Add the duplicate link to action list for post_row_actions
*/
function rd_duplicate_post_link( $actions, $post ) {
if (current_user_can('edit_posts')) {
$actions['duplicate'] = 'Duplicate';
}
return $actions;
}
add_filter( 'post_row_actions', 'rd_duplicate_post_link', 10, 2 );

For this purpose, you can use File Manager, FTP client, or the inbuilt WordPress file editor.
To use the WordPress file editor go to Appearence> Theme Editor and then select the theme function.

After you have successfully pasted the code in the file, you will see a Duplicate button in the All Posts and All Pages menu.

Did you find this article useful?