En algunas ocasiones usted se encontrará con una situación cuando usted quiera crear una nueva publicación o página que es idéntica a (o casi idéntica) a una publicación existente o página en su sitio.

Si la publicación o página es muy larga o incluye muchos archivos multimedia, los procesos para agregar todo ese contenido de nuevo puede ser laborioso. También, si usted tiene muchas publicaciones que serán muy similares una con otra, podría ser muy frustrante tener que teclear manualmente todo ese texto de nuevo o agregar todos los archivos multimedia para crear sus nuevas publicaciones o páginas.

Una opción podría ser abrir una publicación existente (por conveniencia, utilizaremos “publicación” para referirnos a publicaciones y páginas aquí) en una ventana o pestaña de su navegador, luego crear su nueva publicación en otra ventana y cambiar entre las dos, copiando y pegando su contenido. Después de todo, las versiones recientes (después de Gutenberg) de WordPress hacen que esto sea muy fácil, con la opción de “Copiar todo el contenido” que tienen disponible para usted.

Pero si tiene que hacer esto de nuevo y de nuevo, habrá un riesgo de cometer errores. Qué tal si accidentalmente edita la publicación original, ¿reemplazando el contenido que ya había publicado en su sitio? ¿O si tiene un gran número de publicaciones a copiar y pierde la cuenta de cuales son los que usted creó?

Puede ser un dolor de cabeza potencial.

Afortunadamente hay una forma más sencilla. Hay algunos plugins gratuitos disponibles que le permitirán hacer duplicados de sus publicaciones y páginas, así que puede editar y arreglarlas para crear nuevas publicaciones que son casi identificas a su contenido existente.

En esta publicación, le mostraremos algunos de los métodos que puede utilizar para hacer esto, y destacar algunos de los mejores plugins para esta tarea.

Pero primero, le mostraremos como duplicar una página o publicación en WordPress de la forma semi-manual, sin un plugin. Esto involucra copiar y pegar, pero WordPress hace que esto sea sencillo, si usted sólo tiene una publicación para copiar, es probable que sea más rápido que instalar un plugin y hacerlo de esa forma.

Cómo Duplicar una Página o Publicación en WordPress, la Forma Semi-Manual

Esto método puede ser más rápido si sólo tiene una publicación a duplicar, ya que le ahorrará tiempo instalando un plugin, si usted tiene un montón de publicaciones duplicadas, aunque, yo le recomiendo ampliamente saltarse esta sección: verá que es mucho más rápido, e incluso más preciso si utiliza un plugin.

Así que para aquellos que sólo necesiten duplicar una página o publicación, aquí les dejo como hacerlo.

Empiece abriendo su publicación o página existente. Asegúrese de no tener un bloque individual seleccionado dando clic fuera del bloque en su publicación o seleccionado la pestaña de Documento en la cara de edición a la derecha de la pantalla. Si usted tiene un bloque seleccionado, WordPress sólo copiará los contenidos de ese bloque y no el documento entero.

Ahora haga clic en la elipsis arriba a la derecha de la pantalla de edición (tres puntos ordenados uno sobre el otro).

La opción de copiar todo el contenido en WordPress
La opción de copiar todo el contenido en WordPress

Un menú aparecerá. Cerca del fondo de este menú, usted verá una opción de Copiar todo el Contenido. De clic en esta y usted verá un mensaje diciéndole que su contenido ha sido copiado.

Ahora cree su nueva publicación. De a su publicación un título luego de clic en el primer bloque que ha sido creado para usted en la pantalla de edición. Utilice los atajos para copiar en su teclado (Ctrl + V en PC, Cmd + V en Mac o doble clic derecha y seleccione Pegar en el menú que aparecerá.

Los contenidos de su publicación antigua ahora aparecerán en su nueva publicación ¡Magia! (Ok, quizás no.)

Ahora puede editar esa publicación hacerla diferente a la publicación más antigua. Esto es algo que le recomiendo hacer – no tiene mucho sentido tener publicaciones en su blog que son copias exactas de cada uno en su sitio. No sólo confundirá a los visitantes, sino también será malo para su SEO.

¿Pero qué tal si usted quiere crear duplicados de sus publicaciones? Siga leyendo…

Cómo Duplicar una Página o Publicación en WordPress Usando un Plugin

Por mucho la forma más rápida, sencilla y confiable de duplicar publicaciones es usando un plugin. Esto le ahorrará tiempo, le evitará cometer errores humanos, y le permitirá copiar cualquier tipo de publicación que desee. De hecho, en nuestra experiencia duplicar publicaciones es realmente más común con tipos de publicaciones personalizados. Es inusual tener dos publicaciones grandes que son casi idénticas una a la otra, pero es muy común para productos en una tienda, por ejemplo.

Así que aquí le dejo algunos plugins que harán el proceso de duplicar artículos bastante sencillos, y una guía de como usarlos.

WooCommerce

Podría estarse preguntando porque incluí WooCommerce aquí, ya que este es un plugin de ecommerce, no un plugin de duplicación de publicaciones.

Pero es bueno saber que WooCommerce le permite duplicar productos sin tener que instalar un plugin adicional. Así que antes de empezar a buscar un plugin de duplicación y usar eso para duplicar sus productos, sólo utilice las funciones que ya vienen incluidas con WooCommerce.

Si usted va a la pantalla principal de Productos en WooCommerce y pasa su cursor sobre cualquier producto, verá un enlace de Duplicar debajo de la publicación.

La opción para duplicar productos en WooCommerce
La opción para duplicar productos en WooCommerce

Simplemente de clic en el enlace de Duplicar y un nuevo producto será creado. Usted será llevado directamente a la pantalla para editar el nuevo producto para que pueda hacer cambios a éste y publicarlos.

Vale la pena tomar en cuenta que el slug para un nuevo producto será el slug para el viejo producto con un -copy al final, incluso aunque cambie el título del nuevo producto, usted aún así tendrá que editar el slug.

Editando un producto duplicado
Editando un producto duplicado

Duplicate Post Plugin

Duplicate Post es el plugin más popular para duplicar publicaciones, con más de 3 millones de descargas.

Una vez que lo haya activado, este agrega un enlace de Clone a cada publicación en la pantalla principal de Publicaciones en el admin de WordPress.

El plugin de Duplicate Post
El plugin de Duplicate Post

De clic en el enlace de Clone debajo de la publicación que desea duplicar, y una nueva publicación será creada para usted con el mismo contenido y título y estatus del Borrador.

Luego puede editar esa nueva publicación y darle un nuevo título (algo que realmente le recomiendo – WordPress si le permite duplicar títulos, pero esto no es muy bueno para la experiencia de usuario).

También agrega el mismo enlace de Clone a las páginas y para los tipos de publicación personalizados (Si usted los habilita en las opciones).

Duplicate Page

El plugin de Duplicate Page tiene más de 900,000 descargas y es una alternativa al plugin de Duplicate Post de arriba.

Una vez que haya instalado el plugin, vaya a la pantalla de Publicaciones o de Páginas, o a la pantalla de admin para su tipo de publicación personalizada, y usted encontrará un enlace Duplicar esto bajo cada publicación. Aquí está el mío con un tipo de publicación personalizada:

El plugin de Duplicate Page
El plugin de Duplicate Page

De clic en el enlace y usted obtendrá una nueva publicación (o página, o publicación de su tipo de publicación personalizada) con el mismo contenido y título que la publicación original, con un estatus de Borrados. Usted necesitará editarlo y enmendar su slug antes de publicarlo.

Nota: si está utilizando WooCommerce, el enlace de Duplicar esto del plugin no será mostrado en la pantalla de Productos. WooCommerce lo reemplaza con su propio enlace de Duplicar el cual describí anteriormente.

Cómo Duplicar Publicaciones o Páginas en Conjunto

Los plugins que ya he mencionado le permitirán duplicar publicaciones una a la vez. Pero qué tal si necesita duplicar todas las publicaciones en su sitio, ¿o todas las publicaciones de un tipo personalizado de publicación? ¿O quizás todas las publicaciones publicadas este año?

El plugin de WP Bulk Post Duplicator le permitirá hacer exactamente esto. En lugar de agregar un enlace para duplicar publicaciones individuales, le da una pantalla de configuración que le permite duplicar publicaciones en conjunto de acuerdo a los criterios que usted establezca.

Nota: Este plugin no ha sido actualizado en dos años al momento en que se escribió este artículo, así que le aconsejamos instalarlo en un sitio de desarrollo y probarlo antes de ponerle en su sitio en vivo. Nosotros lo hemos usado en nuestro sitio sin problemas.

Una vez que haya instalado el plugin, vaya a Opciones > WP Bulk Post Duplicator para ver la pantalla de opciones del plugin.

Empiece seleccionado el tipo de publicación que usted quiera duplicar e igual los estatus de la publicación. Así que, si selecciona publicación y publicado, el plugin duplicará todo su contenido publicado. Si en lugar de esto usted seleccione publicaciones y borradores, este duplicará todos los borradores de sus publicaciones.

Configuración de Bulk Duplicate – tipo de publicación y estatus
Configuración de Bulk Duplicate – tipo de publicación y estatus

Llegue hasta abajo y seleccione el año de las publicaciones que desea duplicar (esto es opcional). También podrá especificar los estados de las nuevas publicaciones creadas. Si usted no selecciona nada aquí, por defecto será un Borrador.

Configuración de Bulk Duplicate – año y estatus de publicación
Configuración de Bulk Duplicate – año y estatus de publicación

De clic en el botón de Duplicar y el plugin duplicará todas sus publicaciones. Aquí podrá ver todas mis páginas duplicadas, con 12 páginas publicadas existentes y 12 nuevas páginas de borrador. Necesito trabajar en todas estas páginas y editarlas antes de publicarlas. Esto sin duda alguna tomará mucho tiempo, pero será mucho más rápido con la duplicación en conjunto.

Programe su Propio Plugin para Duplicar Publicaciones

¿Qué tal si usted no quiere utilizar un plugin externo para duplicar publicaciones y preferiría programar su propio código?

No hay problema. Sólo siga estos pasos para crear su propio plugin de duplicación.

1. Estableciendo el Plugin

Empiece estableciendo el plugin. Agregue un nuevo archivo a su folder wp-content/plugins y agregue este texto a este (usted puede editar el suyo para reflejar el nombre de su autor):

<?php
/*
Plugin Name: Kinsta Duplicate posts and pages
Plugin URI: https://kinsta.com
Description: Plugin to accompany kinsta posst on duplicating posts in WordPress. Allows for duplication of posts and pages.
Version: 1.0
Author: Rachel McCollin
Author URI: https://rachelmccollin.com
TextDomain: kinsta
License: GPLv2
*/

2. Creando la Función

Ahora agregue la función para duplicar publicaciones y engánchelas a un gancho de acción. Este gancho de acción aún no existe: pero no se preocupe, crearemos uno próximamente.

function kinsta_duplicate_post(){
}
add_action( 'admin_action_kinsta_duplicate_post', 'kinsta_duplicate_post' );

Ahora creemos esa acción, la cual vendrá como una parte de una función para agregar un enlace de duplicación a las publicaciones y pantallas de las páginas.

function kinsta_duplicate_post_link( $actions, $post ) {
 if ( current_user_can( 'edit_posts') ) {
  $actions['duplicate'] = 'Duplicate';
 }
 return $actions;
}
add_filter( 'post_row_actions', 'kinsta_duplicate_post_link', 10, 2 );
add_filter( 'page_row_actions', 'kinsta_duplicate_post_link', 10, 2);

Esto agregará el enlace para duplicar, pero en realidad no duplicará nada aún.

3. Agregando la Funcionalidad de Duplicación

Agreguemos el código para la duplicación. Todo el resto del código va dentro de su función vacía de kinsta_duplicate_post().

Primero, revisemos que un artículo válido ha sido seleccionado y revise mientras tanto la seguridad:

global $wpdb;

// Die if post not selected
if (! ( isset( $_GET['post']) || isset( $_POST['post'])  || ( isset($_REQUEST['action']) && 'kinsta_duplicate_post' == $_REQUEST['action'] ) ) ) {
 wp_die( __( 'Please select a post to duplicate.', 'kinsta' ) );
}

// Verify nonce
if ( ! isset( $_GET['duplicate_nonce'] ) || ! wp_verify_nonce( $_GET['duplicate_nonce'], basename( __FILE__ ) ) ) {
 return;
}

Ahora necesitamos conseguir la ID de la publicación que será duplicada, junto con sus datos:

// Get id of post to be duplicated and data from it
$post_id = ( isset( $_GET['post']) ? absint( $_GET['post'] ) : absint( $_POST['post'] ) );
$post = get_post( $post_id );

Podemos utilizar eso para definir una colección de argumentos e insertar una nueva publicación a la base de datos, utilizando wp_insert_post(), Pero primero, agregue una declaración condicional para verificar que la publicación no sea nula:

if ( isset( $post ) && $post != null ) {

}

Agregue esto dentro de la declaración condicional:

// args for new post
$args = array(
 'comment_status' => $post->comment_status,
 'ping_status'    => $post->ping_status,
 'post_author'    => $post->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 new post
$new_post_id = wp_insert_post( $args );

Ahora conseguiremos las taxonomías de la vieja publicación y los agregaremos a la nueva:

// add taxonomy terms to the new post

// identify taxonomies that apply to the post type
$taxonomies = get_object_taxonomies( $post->post_type );

// add the taxonomy terms to the new post
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 );
}

Y luego agregaremos cualquier metadato de publicación adicional, usando un SQL query:

// use SQL queries to duplicate postmeta
$post_metas = $wpdb->get_results("SELECT meta_key, meta_value FROM $wpdb->postmeta WHERE post_id=$post_id");
if ( count( $post_metas )!=0 ) {
 
$sql_query = "INSERT INTO $wpdb->postmeta ( post_id, meta_key, meta_value ) ";
 
foreach ( $post_metas as $post_meta ) {
  $meta_key = $post_metas->meta_key;
  if( $meta_key == '_wp_old_slug' ) continue;
  $meta_value = addslashes( $post_metas->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 );

}

Finalmente, revisamos qué tipo de publicación es esta publicación y la redirigiremos a la pantalla relevante.

// redirect to admin screen depending on post type
$posttype = get_post_type( $post_id );
wp_redirect( admin_url( 'edit.php?post_type=' . $posttype ) );

Ahora, fuera de las paréntesis para la revisión de if ( isset( $post ) && $post != null ) , agregamos un mensaje de error.

else {
 // display an error message if the post id of the post to be duplicated can't be found
 wp_die( __( 'Post cannot be found. Please select a post to duplicate.', 'kinsta' ) );
}

¡Y eso es todo!

El Plugin Completo

Aquí está el código completo para el plugin:

<?php

/* Plugin Name: Kinsta Duplicate posts and pages

Plugin URI: https://kinsta.com
Description: Plugin to accompany kinsta posst on duplicating posts in WordPress. Allows for duplication of posts and pages. Version: 1.0 Author: Rachel McCollin
Author URI: https://rachelmccollin.com
TextDomain: kinsta
License: GPLv2
*/

/********************************************************************
kinsta_duplicate_post() - duplicates the selected post
*********************************************************************/

function kinsta_duplicate_post(){

global $wpdb;

// Die if post not selected
if (! ( isset( $_GET['post']) || isset( $_POST['post'])  || ( isset($_REQUEST['action']) && 'kinsta_duplicate_post' == $_REQUEST['action'] ) ) ) {

wp_die( __( 'Please select a post to duplicate.', 'kinsta' ) );
}

// Verify nonce
if ( ! isset( $_GET['duplicate_nonce'] ) || ! wp_verify_nonce( $_GET['duplicate_nonce'], basename( __FILE__ ) ) ) {
return;
}

// Get id of post to be duplicated and data from it
$post_id = ( isset( $_GET['post']) ? absint( $_GET['post'] ) : absint( $_POST['post'] ) );
$post = get_post( $post_id );

// duplicate the post
if ( isset( $post ) && $post != null ) {

// args for new post
$args = array(
'comment_status' => $post->comment_status,
'ping_status'    => $post->ping_status,
'post_author'    => $post->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 new post
$new_post_id = wp_insert_post( $args );

// add taxonomy terms to the new post

// identify taxonomies that apply to the post type
$taxonomies = get_object_taxonomies( $post->post_type );

// add the taxonomy terms to the new post
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 );

}

// use SQL queries to duplicate postmeta
$post_metas = $wpdb->get_results("SELECT meta_key, meta_value FROM $wpdb->postmeta WHERE post_id=$post_id");

if ( count( $post_metas )!=0 ) {
 
 $sql_query = "INSERT INTO $wpdb->postmeta ( post_id, meta_key, meta_value ) ";

 foreach ( $post_metas as $post_meta ) {

  $meta_key = $post_metas->meta_key;
  if( $meta_key == '_wp_old_slug' ) continue;
  $meta_value = addslashes( $post_metas->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 );

 }

 // redirect to admin screen depending on post type
 $posttype = get_post_type( $post_id );
 wp_redirect( admin_url( 'edit.php?post_type=' . $posttype ) );

 } else {

  // display an error message if the post id of the post to be duplicated can't be found
  wp_die( __( 'Post cannot be found. Please select a post to duplicate.', 'kinsta' ) );
 }

}
add_action( 'admin_action_kinsta_duplicate_post', 'kinsta_duplicate_post' );

// Add the duplicate link to action list for post_row_actions
function kinsta_duplicate_post_link( $actions, $post ) {

 if ( current_user_can( 'edit_posts') ) {
  $actions['duplicate'] = 'Duplicate';
 }

 return $actions;

}
add_filter( 'post_row_actions', 'kinsta_duplicate_post_link', 10, 2 );
add_filter( 'page_row_actions', 'kinsta_duplicate_post_link', 10, 2);

También puede encontrar el plugin completo en github.

¡Felicidades! Ahora ya tiene su propio plugin para duplicar publicaciones y páginas en su sitio de WordPress.

Crédito: Este código fue parcialmente escrito con referencia a una publicación en el blog de Hostinger.

Resumen

Utilizar un plugin para duplicar publicaciones y páginas puede ser más rápido que hacerlo manualmente y remover el riesgo de cometer errores al copiar contenido a través de varias plataformas.

Si usted sólo tenía una publicación a copiar, podría ser mucho más rápido utilizar la función integrada de “Copiar Todo el Contenido” en WordPress, pero si es para más de una publicación, valdría la pena utilizar un plugin. Si usted utiliza uno de los plugins anteriormente mencionados, o quizás si programa el suyo, usted podrá duplicar cualquier cantidad de publicaciones, páginas o tipos de publicaciones personalizados frecuentemente si así lo desea.

Si lo hace de esta forma, usted ahorrará tiempo y (aún más importante), usted eliminará el riesgo de accidentalmente editar su publicación original cuando usted debió haber editado el artículo duplicado.