October 28, 2024

Cómo Migrar Contenido de una Web a WordPress de Forma Automatizada Usando PHP

Migrar el contenido de un sitio web antiguo a WordPress puede ser una tarea laboriosa si se hace manualmente. Sin embargo, utilizando PHP y aprovechando las capacidades de scraping y las funciones internas de WordPress, podemos automatizar gran parte del proceso. En este artículo, te explicaremos paso a paso cómo extraer contenido de una web existente y crear automáticamente entradas en WordPress con ese contenido, incluyendo metadatos y categorías.

Paso 1: Preparar el Entorno en WordPress

Para empezar, asegúrate de tener acceso al sistema de archivos de tu instalación de WordPress y permisos de administrador en el panel de WordPress. Así podrás crear una función en PHP que realice scraping del contenido de tu web y lo inserte en tu nueva instalación de WordPress.

Paso 2: Extraer el Contenido de la Web Actual

Usaremos wp_remote_get y la biblioteca DOMDocument en PHP para obtener y procesar el HTML de la página de origen. Este proceso nos permitirá acceder a los elementos de título, contenido y metadatos SEO en cada página.

Aquí tienes un ejemplo de código para obtener datos de una URL:

phpCopiar código// Ejemplo de scraping en una URL específica
$url = 'https://ejemplo.com/pagina-a-extraer'; // URL de la página a copiar
$response = wp_remote_get($url);
if (!is_wp_error($response)) {
    $html = wp_remote_retrieve_body($response);
    $dom = new DOMDocument();
    libxml_use_internal_errors(true); // Suprime los errores de HTML mal formateado
    $dom->loadHTML(mb_convert_encoding($html, 'HTML-ENTITIES', 'UTF-8'));
    libxml_clear_errors();

    // Extraer el título de la página
    $titulo = $dom->getElementsByTagName('h1')->item(0)->nodeValue;

    // Extraer el contenido principal
    $contenido = '';
    $contentElements = $dom->getElementsByTagName('p');
    foreach ($contentElements as $element) {
        $contenido .= $dom->saveHTML($element);
    }

    // Extraer metadatos SEO
    $meta_title = '';
    $meta_description = '';
    foreach ($dom->getElementsByTagName('meta') as $meta) {
        if ($meta->getAttribute('name') === 'title') {
            $meta_title = $meta->getAttribute('content');
        }
        if ($meta->getAttribute('name') === 'description') {
            $meta_description = $meta->getAttribute('content');
        }
    }
}

En este ejemplo:

  • Título: Se extrae el contenido del primer <h1>.
  • Contenido: Extraemos todos los párrafos (<p>) y los concatenamos en una sola variable.
  • Metadatos SEO: Los metatags de título y descripción (<meta name="title"> y <meta name="description">) se obtienen y almacenan para su uso posterior.

Paso 3: Crear Entradas en WordPress con los Datos Extraídos

Una vez que tengamos los datos, usaremos la función wp_insert_post para crear entradas en WordPress automáticamente.

A continuación, te mostramos cómo se ve una función completa que realiza la creación de entradas con los datos obtenidos:

phpCopiar códigofunction insertar_contenido_scrapeado() {
    // Array simulando los datos obtenidos por scraping de varias URLs
    $entradas = array(
        array(
            'titulo' => 'Ejemplo de Título',
            'contenido' => 'Este es el contenido extraído de la página web.',
            'categoria' => 'Categoría de ejemplo',
            'meta_title' => 'Título SEO Ejemplo',
            'meta_description' => 'Descripción SEO de ejemplo para mejorar el posicionamiento.'
        ),
        // Aquí puedes agregar más entradas conforme al scraping que realices
    );

    foreach ($entradas as $entrada) {
        // Verifica si ya existe una entrada con el mismo título
        $existing_post = get_page_by_title($entrada['titulo'], OBJECT, 'post');
        
        if (!$existing_post) {
            // Inserta una nueva entrada
            $post_id = wp_insert_post(array(
                'post_title'    => $entrada['titulo'],
                'post_content'  => $entrada['contenido'],
                'post_status'   => 'publish',
                'post_type'     => 'post'
            ));

            if ($post_id && !is_wp_error($post_id)) {
                // Asigna la categoría
                wp_set_post_categories($post_id, array(get_cat_ID($entrada['categoria'])));

                // Agrega metadatos SEO
                update_post_meta($post_id, '_genesis_title', $entrada['meta_title']);
                update_post_meta($post_id, '_genesis_description', $entrada['meta_description']);
            }
        }
    }
}
// Hook para ejecutar la función cuando WordPress se inicializa
add_action('init', 'insertar_contenido_scrapeado');

Explicación de la Función

  1. Arreglo de Datos ($entradas): Este arreglo simula los datos extraídos. Cada elemento contiene titulo, contenido, categoria, meta_title y meta_description.
  2. Comprobación de Duplicados: Antes de crear una nueva entrada, la función verifica si ya existe una con el mismo título usando get_page_by_title. Si encuentra una coincidencia, omite la creación para evitar duplicados.
  3. Creación de Entradas: Si no existe una entrada duplicada, wp_insert_post crea una nueva entrada con el título y el contenido.
  4. Asignación de Categoría: Asigna la categoría de la entrada usando wp_set_post_categories. La categoría debe existir en WordPress; de lo contrario, se puede crear previamente.
  5. Adición de Metadatos SEO: Usamos update_post_meta para guardar los valores de meta_title y meta_description en la entrada, lo cual es útil para optimizar el SEO.

Paso 4: Ejecución y Ajustes

El código está configurado para ejecutarse al inicializar WordPress, usando el hook init. Puedes agregar esta función en el archivo functions.php de tu tema o en un archivo PHP independiente si estás creando un plugin personalizado. Ten en cuenta estos detalles:

  • Prevención de Ejecuciones Múltiples: Si solo deseas ejecutarlo una vez, desactiva o elimina la función después de que haya completado la migración inicial.
  • Personalización: Adapta el código a la estructura HTML de tu sitio web, ya que los selectores de HTML podrían variar.

Consideraciones Finales

Usar scraping e inserción automática en WordPress es una excelente forma de simplificar la migración de contenido y puede ahorrarte horas de trabajo manual. Sin embargo, es importante respetar las políticas de uso del contenido si se trata de información de terceros y asegurarte de que tienes permisos para realizar scraping.

Con este enfoque, habrás creado un sistema personalizado que lleva contenido desde una web existente a tu nuevo sitio en WordPress, facilitando el proceso y permitiéndote enfocarte en la personalización y mejora de la plataforma.

Leave a Reply

Your email address will not be published. Required fields are marked *

Need help with your project?
Let’s get it done.

START A PROJECT
Strategic Design.

Contact Us

contact@brucdesign.com