Pulsa ESC para cerrar

Curso WordpressCurso Wordpress

Duplicar entradas y páginas en WordPress sin plugins

Tienes una página de servicio con un diseño que te gusta y quieres crear otra igual con otro texto. O una entrada con un formato fijo que repites cada semana. Lo natural es duplicar.

Sin código: copiar todos los bloques

  1. Abre la entrada o página original en el editor.
  2. En el menú de tres puntos de arriba a la derecha, elige Copiar todos los bloques.
  3. Crea una entrada nueva y pega (Ctrl + V).

Se copia todo el contenido con su diseño. No se copian el título, las categorías, la imagen destacada, el extracto ni los campos personalizados.

Si lo que repites es una sección (no la página entera), es mejor guardarla como patrón y reutilizarla. En el editor del sitio, las versiones recientes también permiten duplicar páginas y plantillas desde sus listados.

Con un mu-plugin: un enlace «Duplicar»

Este código agrega un enlace Duplicar al pasar el mouse sobre cualquier entrada, página o tipo de contenido personalizado en las listas del escritorio. Crea una copia en borrador con el contenido, el extracto, las categorías y etiquetas, la imagen destacada y los campos personalizados.

Guárdalo como wp-content/mu-plugins/cwp-duplicar.php:

<?php
/**
 * Plugin Name: Duplicar contenido (Curso WordPress)
 */

// 1. El enlace en las listas.
function cwp_enlace_duplicar( $acciones, $post ) {
	if ( 'product' !== $post->post_type && current_user_can( 'edit_post', $post->ID ) && post_type_supports( $post->post_type, 'editor' ) ) {
		$url = wp_nonce_url( admin_url( 'admin.php?action=cwp_duplicar&post=' . $post->ID ), 'cwp_duplicar_' . $post->ID );
		$acciones['cwp_duplicar'] = '<a href="' . esc_url( $url ) . '">Duplicar</a>';
	}
	return $acciones;
}
add_filter( 'post_row_actions', 'cwp_enlace_duplicar', 10, 2 );
add_filter( 'page_row_actions', 'cwp_enlace_duplicar', 10, 2 );

// 2. La copia.
add_action( 'admin_action_cwp_duplicar', function () {
	$id = absint( $_GET['post'] ?? 0 );
	check_admin_referer( 'cwp_duplicar_' . $id );
	$original = get_post( $id );
	if ( ! $original || ! current_user_can( 'edit_post', $id ) ) {
		wp_die( 'No puedes duplicar este contenido.' );
	}

	$nuevo_id = wp_insert_post( wp_slash( array(
		'post_type'      => $original->post_type,
		'post_title'     => $original->post_title . ' (copia)',
		'post_content'   => $original->post_content,
		'post_excerpt'   => $original->post_excerpt,
		'post_parent'    => $original->post_parent,
		'menu_order'     => $original->menu_order,
		'comment_status' => $original->comment_status,
		'post_status'    => 'draft',
		'post_author'    => get_current_user_id(),
	) ), true );
	if ( is_wp_error( $nuevo_id ) ) {
		wp_die( esc_html( $nuevo_id->get_error_message() ) );
	}

	// Categorías, etiquetas y otras taxonomías.
	foreach ( get_object_taxonomies( $original->post_type ) as $taxonomia ) {
		$terminos = wp_get_object_terms( $id, $taxonomia, array( 'fields' => 'ids' ) );
		wp_set_object_terms( $nuevo_id, $terminos, $taxonomia );
	}

	// Campos personalizados (incluida la imagen destacada y la plantilla).
	$excluir = array( '_edit_lock', '_edit_last', '_wp_old_slug', '_wp_old_date' );
	foreach ( get_post_meta( $id ) as $clave => $valores ) {
		if ( in_array( $clave, $excluir, true ) ) {
			continue;
		}
		foreach ( $valores as $valor ) {
			add_post_meta( $nuevo_id, $clave, wp_slash( maybe_unserialize( $valor ) ) );
		}
	}

	wp_safe_redirect( admin_url( 'post.php?action=edit&post=' . $nuevo_id ) );
	exit;
} );

Al hacer clic, se crea la copia y se abre directamente en el editor.

Qué se copia y qué no

  • Sí: contenido, extracto, página madre y orden, categorías y etiquetas, imagen destacada, plantilla de página, campos personalizados de la mayoría de los plugins.
  • No: comentarios, revisiones, fecha de publicación (la copia es un borrador nuevo) ni el slug (WordPress genera uno nuevo a partir del título).

Productos de WooCommerce: el código no muestra el enlace en los productos a propósito, porque no copiaría las variaciones de un producto variable (son contenidos aparte). Para productos, usa el enlace Duplicar que el propio WooCommerce trae en su lista, que sí lo hace bien.

Algunos constructores visuales guardan el diseño en campos personalizados con formato especial. El código los copia tal cual, lo que normalmente funciona. Si la copia no se ve igual, revisa si el constructor tiene su propia opción de duplicar o de guardar como plantilla.

¿Qué tipo de contenido duplicas más seguido? Cuéntanos en el foro; a veces un patrón o una plantilla es mejor solución que duplicar.