How to Duplicate WordPress Pages and Posts: 2 Easy Ways

There may be some common scenarios where you would need to Duplicate WordPress Pages and Posts. Duplicating a post or page in WordPress means simply copying and pasting the content. You can also retain the page template, data, and images, in order to save time when redesigning your website or updating your content.

In this article, we are going to see How to Duplicate a Page or Post in WordPress, Using both with and without a plugin.

 

Two Ways to Duplicate WordPress Pages and Posts:

1. Without Plugin

2. Using Plugin

 

Before you follow-up the steps, ensure you have installed the WordPress and have login details with you.

 

1. Without Plugin:

Step 1: In the WordPress Dashboard, go to Posts -> All Posts.

Click All posts in WordPress

 

Step 2: Click on the Edit option of the post which you want to duplicate.

edit the pages or posts

 

Step 3: Copy All the Content present on the post/pages. 

copy the content from post

 

Step 4: In the WordPress dashboard, Click on Posts-> Add New. Right-click on the first block and click on Paste to Duplicate WordPress Pages or Posts content you copied.

paste the content copied

 

Important: Actually, in this method, you can only copy the content but not the other things such as category, tags, title, and featured images. You would need to copy other items manually. Also, using this method you wouldn’t be able to duplicate pages or posts in bulk.

 

Step 5: Instead of copy paste, you can also do through WordPress Theme File Editor.

Built-in WordPress editor is accessible in Appearance -> Theme File Editor from your WordPress dashboard.

function php file editor

 

Kindly Paste the following code at the bottom of your functions.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'] = '<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 );

 

The above custom code adds “Duplicate” link in the Posts section. If it is working, you’ll see the “Duplicate” link under each post.

duplicate the post or pages

 

To add the same feature under your page section, just replace the last line of the above code with the below snippet,

add_filter(‘page_row_actions’, ‘rd_duplicate_post_link’, 10, 2);

Similarly, clicking the Duplicate link lets you  create a duplicate WordPress page as a new draft.

 

2. Using Plugin:

You can easily duplicate a WordPress page or post using the “Yoast Duplicate Post” WordPress Plugin. Let’s look at the step-by-step process below.

Step 1: In the WordPress dashboard, Go to -> Plugins -> Add New.

Step 2: Type “Duplicate Post” in the search bar. From the available plugins, choose the “Yoast Duplicate Post” WordPress Plugin for easier to Duplicate WordPress Pages and Posts.

duplicate post plugin

 

Step 3: Click on Install Now.  Once installed, click on Activate.

Step 4: Go to Plugins -> Installed Plugins. Click on the settings of the Yoast Duplicate Post Plugin.

edit settings yoast duplicate post plugin

 

After Clicking the Settings Option, You will see the Duplicate Setting main options. If required, you can change the settings (What do you want to copy, Access rights, and Appearance) according to your requirements. By default, the most applicable settings are already checked.

 

Step 5: If you want to duplicate a post, Go to Post -> All Post from your WordPress dashboard. Then click on the “Duplication” option for the post which you want to duplicate.

Duplication post or pages

 

A draft of the duplicate post will be added to this list of posts.

drafted duplication post or pages

 

Duplicate WordPress Pages or Posts in Bulk:

You can also duplicate Multiple WordPress pages or posts in Bulk using the “Yoast Duplicate Post” Plugin.

Suppose if you want to duplicate Multiple posts or pages, Select the posts or pages which you want to duplicate.

bulk duplicate post or pages

 

After Selecting the Duplicate option from the drop-down menu then click Apply. The draft of the duplicate pages or posts will be added to this list of Pages or posts.

 

That’s all to Duplicate WordPress Pages and Posts. We hope this article helped you learn how to easily duplicate WordPress page or post.