How To Duplicate WordPress Page/Post Easily

duplicate content in wordpress

Duplicating your existing content of pages or posts can be useful in many situations. You can use the main post/page as a template and quickly complete your task. Can you think how much time it would cost if you had to recreate the contents of the same page/post?

Well, I can’t imagine that. Thankfully there are ways to duplicate content in WordPress page/post. In this post, I am going to show you how to duplicate WordPress page/post instantly. 

Let’s start, then.

Why Duplicate WordPress Page/Post?

When you are bringing some new changes in your page or post, you may need to quickly clone the page/post. 

For example, you have a sales page with a lot of sections; now you need to create the same sales page again for a different product what will you do? Create the whole page again? 

Of course not. You will be able to get the exact same page by duplicating it. You will be able to start working on it right away and save time. You can duplicate WordPress page/post in two ways – 1. With a plugin, 2. Without a plugin. 

Duplicate Content In WordPress With Plugin

There are a couple of plugins like- Duplicate Page, Post Duplicator, Duplicate page and Post, Page, and Any Custom Post; that help you to duplicate WordPress page/post instantly. But the most popular one is the Yoast Duplicate Post

At first, install and activate the Yoast Duplicate Post plugin from the WordPress plugins directory. 

From the dashboard, go to Post -> All Post. (For duplicating a page go to Pages -> All Pages)

Now Hover your cursor on any post, and you will see two new options – ‘Clone and New Draft.’

Now click on the clone button to duplicate the post. 

However, if you would like to create a clone and immediately open it in the post editor, click on the ‘New Draft’ button. 

WordPress Duplicate Page/Post Without A Plugin

If you don’t want an increase in the number of installed plugins, you can follow this method. It’s very simple, all you have to do is copy some codes to the function.php file, and then you will be able to duplicate WordPress page/posts very easily.

Note: Before editing any of the WordPress files, it is recommended to backup your website first. 

At first, navigate to Appearance -> Theme Editor and click on ‘Theme Functions.’ Now copy the following code and paste it here. 

 * 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( 'post_row_actions', 'rd_duplicate_post_link', 10, 2 );

Don’t forget to Update the File. 

The above code will work for duplicating posts. If you want to duplicate pages, just replace the last line with the following code:

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

Final Words

I hope now you have got an easy way to duplicate WordPress page/post. It doesn’t matter whether you use a plugin or not; you will get the same result both ways. If you have any questions or suggestions, let me know in the comment box below. 

Own a WordPress Site? You’ll Need This Plugin!

Unleash the power of the WordPress Block Editor with Ultimate Blocks! Dive into a world where crafting stellar content is a breeze, where every feature and tool you’ve dreamed of is right at your fingertips.

Leave a Reply

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