Webstick.blog logo Wordpress, Design, SEO, Speed blog

How to Duplicate a Page or Post in WordPress 💥

Duplicate a Page in WordPress

A page or post can be duplicated in WordPress. This is more than just copying and pasting content. To save time and effort when updating or redesigning your website, you can retain the page template, SEO data, images, and other information. It is easy to duplicate pages, posts, and all associated data in WordPress. You can do the job with or without a plugin. This article will show you how to safely clone pages or posts, and also introduce plugins that may help. Let's get started!



Duplicate Page in WordPress with Plugins

A plugin makes it easy to clone a page in WordPress. Everything is done in your dashboard. Because plugins don't modify your site's code, they are the best way to duplicate a page or post. These plugins are worth looking at if you are searching for the right tool.

1. Duplicate Post

Duplicate Post is a popular choice for WordPress page or post cloning. The plugin is simple to use and copies everything, from the post or page content to the comments. You can also choose to use a prefix or suffix to distinguish between the original post and the clone.

You can easily duplicate a post using this tool by simply:

  1. Install the plugin and activate it.
  2. Go to Posts > All for cloning posts or pages > For cloning pages.
  3. To copy the page or post that you are looking for, navigate to it and click Clone.
  4. You can select multiple pages or posts and you can clone all of them at once with Bulk actions.

2. Duplicate Page

Duplicate Page has a few extra features that other cloning software doesn't offer. This plugin can duplicate pages, posts, and custom post types. You can also save the resulting copies in drafts as pending, public, and private.

You can easily duplicate a post using this tool by simply:

  1. Install the plugin and activate it.
  2. You can customize the settings to suit your needs.
  3. To find the content that you are looking for, go to pages > All and Posts > all.
  4. Click on the Copy This option.

3. Duplicate Page and Post

Duplicate Page and Post doesn't have many features but it makes up for this in speed. This plugin is lightweight and fast. It won't slow down your site with too many options.

You can easily duplicate a post using this tool by simply:

  1. Install the plugin and activate it.
  2. You can find the Posts All and Pages All depending on what you are trying to duplicate.
  3. Click on the page or post that you wish to clone.
  4. Click on the Duplicate button.

Duplicate Page in WordPress without Plugins

To clone a WordPress page or post, you don’t need to use a plugin. You can also do this manually by editing the functions.php file, or copying and pasting relevant code. Let's take a look at both of these methods.

1. Enabling Cloning via functions.php

Editing the code in your function.php file is one way to clone WordPress pages or posts. Although this is a simple task, you should be careful and create a backup copy of your website before doing so. You will need to access the functions.php folder and open it for editing. You will then need to add this code snippet at the end of your 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__ ) ) )
   * 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 );

That was only for posts so far. To be able to do the same for pages, use the same code once again in your functions.php but replace the last line (108) by:

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

2. Copy a page just by hand

First of all this method is very simple and not so effective. I wanted to show it any way... Go to any page or post. Important is that it has not yet been edited with Elementor or any other pagebuilder, otherwise this method will not work any longer.

  1. Click on the Options button (three vertical dots in the upper-right corner).
  2. From the Options menu, press the "Copy All Content" button

You can now create a new post or page and copy the elements. After making some changes, you can save the draft as a draft. You can even save it in a document file (Microsoft Word or Google Docs) to make it easier for future reference.

You can only copy the elements on the page, such as images and text, using this method. You cannot copy elements below the hood, such as title, SEO Data, meta description, title tags andalt tags.

Duplicate a Page in WordPress manually

Be wise and install one of them plugins for it as it is the easiest way and also editing your functions.php does only survive theme-upgrades when you are using a child theme.


Scroll up