Crear un clon o duplicado de una publicación de WordPress es fácil con plugins, pero si eres de los que prefieres unas pocas líneas de código aquí te traigo la solución para tener la misma funcionalidad, pero sin plugins.
No hay mucho que hacer, simplemente copiar y pegar el siguiente código usando tu método favorito (archivo functions.php, plugin personalizado, plugin de fragmentos de código, etc.):
/* Duplicar entradas, paginas, etc sin plugins */ // Agregamos el enlace de duplicar a la lista de acciones rapidas add_filter("post_row_actions", "rd_duplicate_post_link", 10, 2); add_filter("page_row_actions", "rd_duplicate_post_link", 10, 2); function rd_duplicate_post_link($actions, $post) { if (!current_user_can("edit_posts")) { return $actions; } $url = wp_nonce_url( add_query_arg( [ "action" => "rd_duplicate_post_as_draft", "post" => $post->ID, ], "admin.php" ), basename(__FILE__), "duplicate_nonce" ); //Evitar creación de enlaces en snippets Advanced Scripts, Scripts Organizer, etc $miCat = get_the_category($post->ID); $tipoPost = get_post_type($post->ID); if ($tipoPost == "page" || $miCat[0]->name != "") { $actions["duplicate"] = 'Duplicar'; } return $actions; } // Creamos el duplicado como borrador y redirigir a la pantalla del editor add_action( "admin_action_rd_duplicate_post_as_draft", "rd_duplicate_post_as_draft" ); function rd_duplicate_post_as_draft() { if (empty($_GET["post"])) { wp_die("No se ha facilitado ninguna publicacion que duplicar"); } if ( !isset($_GET["duplicate_nonce"]) || !wp_verify_nonce($_GET["duplicate_nonce"], basename(__FILE__)) ) { return; } $post_id = absint($_GET["post"]); $post = get_post($post_id); // Si no quieres que el usuario actual sea el autor del duplicado cambia las siguientes lineas por esto: $new_post_author = $post->post_author; $current_user = wp_get_current_user(); $new_post_author = $current_user->ID; if ($post) { $args = [ "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, ]; $new_post_id = wp_insert_post($args); $taxonomies = get_object_taxonomies(get_post_type($post)); if ($taxonomies) { foreach ($taxonomies as $taxonomy) { $post_terms = wp_get_object_terms($post_id, $taxonomy, [ "fields" => "slugs", ]); wp_set_object_terms( $new_post_id, $post_terms, $taxonomy, false ); } } $post_meta = get_post_meta($post_id); if ($post_meta) { foreach ($post_meta as $meta_key => $meta_values) { if ("_wp_old_slug" == $meta_key) { continue; } foreach ($meta_values as $meta_value) { add_post_meta($new_post_id, $meta_key, $meta_value); } } } // Para finalizar redirigimos a la pantalla del editor para editar el nuevo borrador // wp_safe_redirect( // add_query_arg( // array( // 'action' => 'edit', // 'post' => $new_post_id // ), // admin_url( 'post.php' ) // ) // ); // exit; // O si lo prefieres redirigimos todas las publicaciones con un mensaje wp_safe_redirect( add_query_arg( [ "post_type" => "post" !== get_post_type($post) ? get_post_type($post) : false, "saved" => "post_duplication_created", ], admin_url("edit.php") ) ); exit(); } else { wp_die("Ha fallado la creación del duplicado :(( "); } } //Avisos en admin add_action("admin_notices", "rudr_duplication_admin_notice"); function rudr_duplication_admin_notice() { $screen = get_current_screen(); if ("edit" !== $screen->base) { return; } if (isset($_GET["saved"]) && "post_duplication_created" == $_GET["saved"]) { echo ''; } }Se ha creado el duplicado.
Guarda los cambios del código, personalízalo si quieres, y ya tendrás un nuevo enlace en las pantallas de listados de entradas, páginas y demás tipos de contenido, desde el que duplicar la publicación que quieras.
Si haces clic se genera el duplicado, como era de esperar…
¿Te gustó este artículo? ¡Ni te imaginas lo que te estás perdiendo en YouTube!