LATEST >>

Welcome Here And Thanks For Visiting. Like Us On Facebook...

EXEIdeas – Let's Your Mind Rock » WordPress / WordPress Tricks » How To Duplicate WordPress Page Or Post Without Plugin?

How To Duplicate WordPress Page Or Post Without Plugin?

How-To-Duplicate-WordPress-Page-Or-Post-Without-Plugin
It is very useful when you work with a lot of similar posts. So, when you copy a post, you don’t have to enter all metadata, taxonomies etc. each time manually. Duplicating posts is a very useful functionality when you work with a lot of similar posts (for example products in online shop). Especially if the posts have the same custom fields values, but the different post title and content.<1– more–>

There are many factors to clone or duplicate pages and posts in WordPress. For example, if your work creates a great page several times and requires nearly exact pages, with the exception of titles and just a few contents, you can copy and paste, clone existing pages can. It was easy, so you did not have to recreate everything to make a new page at any time. Before you begin this guide, you’ll need the following:

  • Access to WordPress Admin Panel
    Note: We strongly recommend to backup your website before editing any WordPress files.

Besides utilizing plugins, you can also code your way into duplicating WordPress pages and posts. If you’re someone who likes programming, this will be right up your alley. Even if you’re not, we have got your covered. Below, you will find the code snippet to enable post duplication in WordPress:

Duplicate-WordPress-Page-Or-Post-Without-Plugin

Table of Contents

Recommended For You:
7 Must-Have WordPress Widget Every Aspiring Blogger Should Use

Code For Duplication WordPress Post/Page:

/*
 * 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 );

While this snippet only works for duplicating posts, you can switch to duplicating WordPress pages by replacing the last line by this:

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

All you need to do is paste this code in your functions.php file. To do this, you can either use File Manager, FTP client or inbuilt WordPress file editor. Now if you navigate to All Posts or All Pages section, you should see a Duplicate button. If you press this button, WordPress will create a copy of the page or post and save it as a draft.

Recommended For You:
Everything You Need To Know About Local On-Page SEO

Conclusion:

We’re sure you must be wondering why you haven’t known about these plugins before. Better later than never! We hope that the above tutorial answered all your questions and now you know how to duplicate a page in WordPress. All the above-mentioned plugins are not only quick but reliable as well. Why invest your time in a task when you can actually get it done with a few clicks?

You Like It, Please Share This Recipe With Your Friends Using...

2 Responses to “How To Duplicate WordPress Page Or Post Without Plugin?”

  1. smacc says:

    I care for such information a lot. I was looking for this certain information for a very long time.
    Thank you and good luck.

    • EXEIdeas says:

      Welcome here and thanks for reading our article and sharing your view. This will be very helpful to us to let us motivate to provide you more awesome and valuable content from different mind. Thanks for reading this article.

Leave a Reply

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