How To Duplicate Content In WordPress Instantly

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 a WordPress post/page instantly. 

Let’s start then.

Why Duplicate Content In WordPress?

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 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 post/page instantly. But the most popular one is the Yoast Duplicate Post

At first, install and activate the Yoast Duplicate Post plugin from the WordPress plugin 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. 

Duplicate Content In WordPress Without A Plugin

If you don’t want an increase in the number of an installed plugin, you can follow this method. It’s very simple, all you have to do is copy some codes to the function.php file. 

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__ ) ) )
    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 );

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 the easy way to duplicate content in WordPress. It doesn’t matter whether you use a plugin or not; you will get the same result in both ways. If you have any questions or suggestions, let me know through the comment box below. 

Leave a Comment

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

Copy link
Powered by Social Snap