Home » Wordpress » How to Duplicate WordPress Page or Post

How to Duplicate WordPress Page or Post

Published: February 13, 2021
Updated:

Comments

How to Duplicate WordPress Page or Post

Sometimes you may want to create a duplicate of your WordPress page or post, but don’t want to manually copy the page/post configuration and content. 

Unfortunately WordPress does not have this function built in. Luckily, you can add the duplicate page and post function to your WordPress website with a plugin or with a snippet of code. 

Duplicate Page or Post With a WordPress Plugin

There are a few light-weight and secure WordPress plugins which can add the duplicate page and post function to your website. I am very cautious when installing a new plugin on my website as poorly developed and updated plugins are most often the source of website malware. 

To save you the time, I hand-picked the most secure page and post duplicate plugins for your website:

Jetpack is a powerful WordPress plugin and is also developed by WordPress. Since this plugin has a free version, and also enhances website security and performance, we recommend using it to add the duplicate page and post feature.

To duplicate a WordPress page or post using Jetpack, follow these steps:

  1. Install and activate Jetpack
  2. Navigate to Jetpack > Settings > Writing and then scroll to the Composing section.
  3. Activate “Enable the option to copy entire posts and pages, including tags and settings”.
  4. Navigate to Pages > All Pages to duplicate a WordPress page, or navigate to Posts > All Posts to duplicate a WordPress post.
  5. Hover your cursor over the post or page you would like to clone and you should see the Copy option available.
  6. Select Copy to make an unpublished copy of the selected page or post.

2. Duplicate Post Plugin

The Duplicate Post Plugin is a user-friendly option allowing you to add a prefix or suffix before creating a duplicate of a page or post. This helps to identify duplicate pages and posts without the need to click into the page or post. 

To duplicate a WordPress page or post using Duplicate Post Plugin, follow these steps:

  1. Install and activate Duplicate Post Plugin.
  2. Navigate to Pages > All Pages to duplicate a WordPress page, or navigate to Posts > All Posts to duplicate a WordPress post.
  3. Hover your cursor over the post or page you would like to clone. You will notice that you now have the options to Clone or create New Draft.
  4. Select Clone to make a published copy of the selected page or post. Select New Draft to create an unpublished copy of the selected page or post.

Duplicate Page and Post is a very light-weight plugin with very few options. The lack of options ensures that the plugin does not affect your website performance, while remaining easy to use. 

To duplicate a WordPress page or post using Duplicate Page and Post, follow these steps:

  1. Install and activate Duplicate Page and Post.
  2. Navigate to All Pages or All Posts, depending on which you would like to duplicate.
  3. Hover your cursor over the post or page you would like to clone. You will notice that you now have the Duplicate option.
  4. Select Duplicate to make an unpublished copy of the selected page or post.

4. Post Duplicator

The Post Duplicator plugin is also quite simple to use, and creates exact copies of your pages and posts. Duplicate WordPress pages and posts will also contain meta data, custom fields, categories, and tags to name a few.

To duplicate a WordPress page or post using Post Duplicator, follow these steps:

  1. Install and activate the Post duplicator plugin.
  2. Navigate to Pages > All Pages or Posts > All Posts.
  3. Hover your cursor over the post or page you would like to clone. You will notice that you now have the options to Duplicate Page or Duplicate Post. Click on your desired option to create a copy.

Duplicate Page or Post Without a WordPress Plugin

For those of you who prefer to use as few plugins as possible, you can also duplicate WordPress pages and posts without a plugin. You simply need to add some code to your functions.php file.

Add the following code snippet to your functions.php file to enable the option to duplicate WordPress pages or posts.

/*
 * 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 );

 

To duplicate WordPress pages, you can replace the last line of code with the following snippet:

add_filter('page_row_actions', 'rd_duplicate_post_link', 10, 2);

 

Place the code into your functions.php file. You can find and edit your functions.php file using your web hosting control panel’s File Manager, FTP, or the built in WordPress file editor.

To use file editor, navigate to Appearance > Theme Editor and then select Theme Functions.

Once done, you should see the Duplicate option under All Posts or All Pages, depending on which version of the code you added. 

 

0 Comments

0 Comments

Submit a Comment

Your email address will not be published. Required fields are marked *

News & Updates

Join Our Newsletter

Share This