UA-51298262-10 Skip to main content
WordPress

Duplicar página WordPress sin plugins

By agosto 18, 2026No Comments
Duplicar página WordPress sin plugins

La necesidad de duplicar página WordPress te llega de golpe. Un día quieres mantener esa estructura exacta para otro proyecto, o quizás hacer una prueba A/B de una entrada que ya funciona. El repositorio de plugins te ofrece soluciones mágicas de un clic, pero cualquiera que administre un servidor sabe la verdad: cada extensión extra es lastre. Sobrecargas la base de datos y abres puertas innecesarias. Vamos a ver cómo hacerlo con código, a pelo, y dejar tu instalación limpia.

¿Por qué evitar plugins para esta tarea?

Antes de meternos en harina, hablemos de por qué no usar un plugin. Parece fácil, sí. Pero cada plugin activo consume recursos, procesa ganchos (hooks) y pide actualizaciones de seguridad constantes. Si solo vas a clonar algo de vez en cuando, no tiene sentido mantener un residente en memoria. Escribiendo lo necesario en el archivo functions.php de tu tema activo, o en un plugin de funciones personalizadas, te quedas con el control total. Menos bloat, más velocidad.

Método mediante código en functions.php

Esta es la ruta que prefieren los administradores de sistemas para entornos en producción. La idea es sencilla: inyectas un fragmento de PHP que coloca un enlace directo en la pantalla de listado de entradas y páginas (All Pages / All Posts). Un clic y listo. Sin interfaces externas ni adornos.

Paso 1: Acceso a los archivos del tema

Tienes que entrar a tu servidor. Usa un cliente FTP o el administrador de archivos de tu panel (cPanel, Plesk). Navega hasta /wp-content/themes/tu-tema-activo/. Ahí busca el archivo functions.php.

Consejo de seguridad: Antes de tocar nada, haz una copia de seguridad completa del sitio y de la base de datos. En serio. Un error de sintaxis en este archivo te deja el sitio muerto (la famosa pantalla blanca) y bloqueado.

Paso 2: Insertar el script de clonación

Abre el archivo functions.php. Usa un editor de texto plano (Notepad++, Sublime Text, VS Code). Ve al final del archivo y pega este bloque antes del cierre de la etiqueta PHP (si lo hay):

/*
* Funcionalidad para duplicar página WordPress y entradas.
* Agrega un enlace en la lista de acciones.
*/
function rd_duplicate_post_link( $actions, $post ) {
  if ( ! current_user_can( 'edit_posts' ) ) {
    return $actions;
  }
  $url = wp_nonce_url(
    add_query_arg(
      array(
        'action' => 'rd_duplicate_post',
        'post' => $post->ID
      ),
      'admin.php'
    ),
    'duplicate-post_' . $post->ID
  );
  $actions['duplicate'] = 'Duplicar';
  return $actions;
}
add_filter( 'post_row_actions', 'rd_duplicate_post_link', 10, 2 );
add_filter( 'page_row_actions', 'rd_duplicate_post_link', 10, 2 );

Paso 3: Crear la lógica de procesamiento de la copia

Lo anterior solo enseña el botón. Ahora necesitamos la maquinaria que hace el trabajo cuando pulsas «Duplicar». Pega este bloque justo debajo del anterior:

function rd_duplicate_post_action() {
  // Verificar permisos y nonces
  if ( ! isset( $_GET['action'] ) || $_GET['action'] !== 'rd_duplicate_post' ) {
    return;
  }
  if ( ! isset( $_GET['post'] ) || ! isset( $_GET['_wpnonce'] ) ) {
    return;
  }
  if ( ! wp_verify_nonce( $_GET['_wpnonce'], 'duplicate-post_' . $_GET['post'] ) ) {
    return;
  }
  if ( ! current_user_can( 'edit_posts' ) ) {
    return;
  }

  // Obtener el post original
  $post_id = absint( $_GET['post'] );
  $post = get_post( $post_id );

  // Crear un array con los datos del nuevo 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', // Importante: guardar como borrador
    'post_title' => $post->post_title . ' (Copia)',
    'post_type' => $post->post_type,
    'to_ping' => $post->to_ping,
    'menu_order' => $post->menu_order
  );

  // Insertar el nuevo post en la base de datos
  $new_post_id = wp_insert_post( $args );

  // Duplicar taxonomías (categorías y etiquetas)
  $taxonomies = get_object_taxonomies( $post->post_type );
  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 );
  }

  // Redireccionar a la pantalla de edición del nuevo post
  wp_redirect( admin_url( 'post.php?action=edit&post=' . $new_post_id ) );
  exit;
}
add_action( 'admin_action_rd_duplicate_post', 'rd_duplicate_post_action' );

Paso 4: Uso del nuevo sistema

Guarda los cambios y sube el archivo. Ve al escritorio de WordPress y navega a Páginas o Entradas. Verás una opción nueva en la fila de acciones (junto a «Editar» y «Papelera»): «Duplicar». Al hacer clic, pasa esto:

  1. El sistema crea una copia exacta.
  2. El título suma el sufijo » (Copia)».
  3. El estado se marca como Borrador automáticamente para no publicar duplicados por error.
  4. Categorías, etiquetas y formato se mantienen.
  5. Te redirige al editor de la nueva entrada.

Limitaciones y consideraciones técnicas

Este código es muy eficiente para el contenido principal y las taxonomías estándar. Pero hay cosas en WordPress que no se pasan solas por cómo están hechas las relaciones en la base de datos:

  • Datos personalizados (Meta Data): Si usas campos personalizados (Custom Fields) estándar, se copian. Pero algunos campos de plugins de SEO o constructores visuales pesados (tipo Elementor o Divi) pueden necesitar un ajuste extra con update_post_meta para clonarse bien.
  • Imagen destacada: Al ser meta dato (_thumbnail_id), el script de arriba no la incluye explícitamente. Si la quieres, añade esta línea en la función: update_post_meta( $new_post_id, '_thumbnail_id', get_post_thumbnail_id( $post_id ) );.

Solución de problemas comunes

  • Conflicto de temas: Revisa que tu tema no tenga una función con el mismo nombre (rd_duplicate_post_link o rd_duplicate_post_action). Si choca, renombra tus funciones.
  • Permisos de archivo: El functions.php necesita permisos de escritura (normalmente 644) para que los cambios surtan efecto.
  • Caché del sitio: Si usas Varnish o un plugin de caché de objetos, limpia la caché después de editar. Si no, es posible que no veas los cambios en el panel.

Preguntas Frecuentes

¿Es seguro editar el functions.php?
Sí, si hiciste la copia de seguridad. Es práctica estándar en desarrollo. Si algo falla, sube el archivo original por FTP y listo.

¿Se duplican también las imágenes?
No. Las imágenes son entradas adjuntas. Este código vincula la nueva entrada a las imágenes que ya tienes. Es lo correcto para no llenar el servidor de archivos repetidos.

Conclusión

Saber duplicar página WordPress mediante código te da un control que los plugins no te ofrecen. Eliminas dependencias de terceros que a menudo dejan de actualizar sus proyectos o traen incompatibilidades. El script es ligero y seguro, comprueba nonces y permisos antes de correr. Y al guardar las copias como borradores, proteges tu contenido publicado mientras trabajas.

Este método es ideal si tienes conocimientos técnicos. Pero entiendo que gestionar código puede complicarse. En RedServicio (redservicio.net), nuestro equipo está preparado para ayudarte con administración, optimización o desarrollo personalizado. Si necesitas asistencia profesional para implementar soluciones avanzadas en tu infraestructura WordPress, contacta con nosotros.