January 26, 2021

Without Plugin Duplicate or Clone Post and Page


Are you looking for without plugin to duplicate or clone post and page on your WordPress website? Then here we have a solution to do that. Duplicating or cloning posts and pages is awesome to reduce our works with a short time. Instead of wasting time with making another post and page layout or structure, we can duplicate or clone easily with the help of simple function.

If you not well experienced in WordPress code, you can go with the Duplicate Post plugin. Without plugins creating a WordPress site is always best and shows outstanding from other websites. Use the below code in your functions.php file.

/* =====
* Duplicate or Clone as a draft and redirects then to the edit post screen
===== */
function clone_postDraft(){
	global $wpdb;
	if (! ( isset( $_GET['post']) || isset( $_POST['post'])  || ( isset($_REQUEST['action']) && 'clone_postDraft' == $_REQUEST['action'] ) ) ) {
		wp_die('No post to clone has been supplied!');
	 * Nonce verification
	if ( !isset( $_GET['clone_nonce'] ) || !wp_verify_nonce( $_GET['clone_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 or clone
	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 or clone 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_clone_postDraft', 'clone_postDraft' );
 * Add the duplicate or clone link to action list for post_row_actions
function clone_post( $actions, $post ) {
	if (current_user_can('edit_posts')) {
		$actions['clone'] = 'Clone';
	return $actions;
add_filter( 'post_row_actions', 'clone_post', 10, 2 );
add_filter('page_row_actions', 'clone_post', 10, 2);

In the above code, what we do is getting an existing post ID and based on that cloning post with a new post data array. After that saving in the draft with edit redirection option.


I believe this article will help you to clone the existing post or page without plugins. If you have any doubts let me know in the comment section and if you like this article share it with your friends.


How can we improve it?


We appreciate your helpul feedback!

Your answer will be used to improve our content. The more feedback you give us, the better our pages can be.

Follow us on social media:


The post Without Plugin Duplicate or Clone Post and Page appeared first on .