Do you want to duplicate page or post in WordPress with a single click? Don’t miss this tutorial, we will provide you with the easiest way to duplicate page or post in WordPress.Now, let’s check them out.

Why do you need to duplicate page or post in WordPress?

In some circumstances, you need to copy a page or blog with the purpose of reusing plenty of essential content in the old post or page. Although you can now copy the whole content of your post/page and paste it to a new daft, this process will certainly take a lot of time and you can not copy your featured image, post settings as well as other metadata.

Luckily, there are many more effective solutions to help you easily duplicate a post or page without difficulties. In today’s blog, we will give you two methods to handle this task. Let’s see what they are.

How to duplicate page or post in WordPress

Method 1: Duplicate page or post via a plugin

Currently, there are plenty of useful plugins that allow you to duplicate pages or posts with a single click instead of copying the entire pages or posts manually. In this blog, we will recommend using the Duplicate Page and Post plugin. This tool will give you the ability to create a clone of a page or post with one click and it will be saved as a draft.

Now, you can follow the steps below to duplicate a page or post in WordPress with the Duplicate page and post plugin.

Step 1: Install and activate the plugin

First and foremost, you need to go to Plugins > Add new and use the search bar to find the Duplicate page and post plugin. After that, simply click on the Install now button and activate it.

Duplicate Page Or Post In Wordpress

Step 2: Configure the settings

Once the plugin was activated, you need to go to Settings > Duplicate post to implement some simple configurations. On the settings page, you can choose the Editor that you are using. In addition, you are able to set the post status (Draft, Published, Private or Pending). You can also add a suffix for duplicate page and post and adjust the duplicate’s slug.

When you are pleased with the selection, let’s click on the “Save Settings” to save your changes.

Duplicate Page Or Post In Wordpress 2

Step 3: Create a clone of any page or post

Now, you start duplicating any post or page that you want. For example, you can go to Posts > All Posts and find the post your want to duplicate. Then, hover your cursor over this post, and you will see a Duplicate button below your chosen post. Let’s click on it, the plugin will immediately create a clone of this post as a draft. Now, you can make the changes as wish and click on Publish.

Duplicate Page Or Post In Wordpress 1 2

Method 2: Duplicate page or post via the functions.php file

In case, you don’t want to install additional plugins, there is still another solution for you. You can duplicate posts by adding the code snippet to your functions.php file.

To do that, firstly you need to go to Appearance > Theme File Editor and then select the Theme functions on the right sidebar. Now, you need to copy the following code snippet and paste it into your functions.php 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 );

Duplicate Page Or Post In Wordpress 3

Don’t forget to click on the Update File button to finalize the process.

Similarly, you can duplicate a page in WordPress easily by replacing the last line of the code above with the following one:

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

Duplicate Page Or Post In Wordpress


We have just provided you with the two basic methods to duplicate page or post in WordPress. Hopefully, our blog can help you simplify the process of copying of your page or post easily. If you have any queries, don’t hesitate to leave a comment below. We will respond to your question as soon as possible.

By the way, do you want to create a new appearance for your website? If yes, you visit our website where there is a wide range of appealing, well-structured, free WordPress Themes for your website. Thanks for your reading.

5/5 - (1 vote)

[Black Friday Sale!] Get 50% off your purchase on today. Don't miss it!