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.
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.
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.
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__ ) ) )
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 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);
Summary
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.
Hello everyone! We’re Galussothemes content team, we love to write new blogs for WordPress everyday! Galusso Content Team is a part of IT4GO – The company houses talented young people who hold a strong passion for website development, designing, and marketing.