How to Duplicate a Page in WordPress?

Related CMS:

Are you in love with a certain WordPress page of yours, and want to duplicate it? Or, do you want to work on a WordPress page without affecting its existing version? Either way – this article is for you.

It is pretty easy to duplicate a page in WordPress, and in this post, we will walk you through various options through which you can do so.

Reasons You Might Want to Duplicate a Page in WordPress

There could be various reasons why you might want to duplicate a page or post in WordPress:

  • There might be times when you want to make a new page similar to what you already have but with some tweaks. In such an event, it is only time-consuming to start from scratch while the same task can be done by cloning a page and making tweaks. Surely, you can also do this by simply copying and pasting the content, but this would not help you in moving featured images, SEO optimization and other data.
  • Or, you might want to redesign a page with minor tweaks but do not want to push the changes directly to the live server. In such an event, you might want to work on a test or development server instead of making changes directly to the live version.

Whatever it is, we will help you in duplicating a WordPress page on the go.

What you’ll need to Get Started?

Access to the WordPress admin panel and a few minutes

Method 1: How to Duplicate a Page in WordPress using WordPress Plugins?

You can easily clone or duplicate a page using appropriate plugins. Let’s have a look at each of these plugins.

Duplicate Page Plugin

Don’t take this plugin by its name – in addition to duplicating a page, this plugin can also help you duplicate a post. All you need to do is install the Duplicate Page plugin.

Once installed, a new option would be added beneath each page in WordPress that says Duplicate This. Next, simply select the option and your page (or post) would be cloned within a single click.

Duplicate Post Plugin

This is another plugin which can help you in duplicating a post or page, as the need might be. The plugin not only clones a page, but can also help you in cloning multiple pages at a time.

Duplicator Plugin

This plugin comes in handy when you need to duplicate an entire website. So, if you have a fashion website and want to launch an exact same website for a different purpose, you don’t have to start it from scratch and instead you can use this plugin to duplicate your website on the go.

Page and Post Clone Plugin

This plugin is no different and helps you in cloning your page and post on the go. All you need to do is install the plugin and hover over the respective page or post which needs to be cloned and select Clone. This would create the copy and the duplicate page or post would automatically be created as a draft.

Steps on How to Clone a WordPress Page Using a Plugin

  1. To begin with, install and activate the plugin of your choice from the ones we discussed above.
  2. Once activated, head on to Pages > All Pages on your WordPress dashboard.
  3. You will find that two extra options are visible – Clone/Duplicate (depending on the plugin chosen) and New Draft beneath the page title.
  4. If you want to create a duplicate page, click on Clone.
  5. However, if you want to create a duplicate version in the post editor, click on New Draft.

Method 2: How to Duplicate a Page in WordPress Using Visual Composer?

If your website theme supports Visual Composer, you can also make use of Visual Composer to duplicate a WordPress page.

All you need to do is:

  1. Open the particular page which you want to duplicate in Visual Composer
  2. From the template menu, click on ‘Save current page as a template’.
  3. Provide a template name and you are done.

Method 3: How to Clone a WordPress Page without Plugin

In addition to making use of plugins, you can also clone your WordPress page by using your programming skills. If you are not a techie, below is a code snippet which would help:

 * 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__ ) ) )
            * 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);
                        * finally, redirect to the edit post screen for the new draft
                       wp_redirect( admin_url( 'post.php?action=edit&post=' . $new_post_id ) );
           } 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( page_row_actions', 'rd_duplicate_post_link', 10, 2 );
  1. Simply paste this piece of code in your functions.php file
  2. Next, navigate to Pages > All Pages, and you will find a Duplicate button through which you can easily clone the page.

Wrapping Up

Isn’t this super easy? Well, it is not just easy but also saves your time which you would have otherwise invested in designing a page from scratch.

We hope this tutorial would have helped you understand how to duplicate a page in WordPress. So, which one is your preferred method? Do let us know in the comments below.

No comments yet. Be the first to add a comment!

Write a comment