Skip to content

Instantly share code, notes, and snippets.

What would you like to do?
Programmatically duplicating a WordPress post
* Duplicates a post & its meta and it returns the new duplicated Post ID
* @param [int] $post_id The Post you want to clone
* @return [int] The duplicated Post ID
function duplicate($post_id) {
$title = get_the_title($post_id);
$oldpost = get_post($post_id);
$post = array(
'post_title' => $title,
'post_status' => 'publish',
'post_type' => $oldpost->post_type,
'post_author' => $oldpost->post_author,
'post_content' => $oldpost->post_content
$new_post_id = wp_insert_post($post);
// Copy post metadata
$data = get_post_custom($post_id);
foreach ( $data as $key => $values) {
foreach ($values as $value) {
add_post_meta( $new_post_id, $key, maybe_unserialize($value) );
return $new_post_id;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment