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
- Arreglo de Datos (
$entradas
): Este arreglo simula los datos extraídos. Cada elemento contienetitulo
,contenido
,categoria
,meta_title
ymeta_description
. - 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. - Creación de Entradas: Si no existe una entrada duplicada,
wp_insert_post
crea una nueva entrada con el título y el contenido. - 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. - Adición de Metadatos SEO: Usamos
update_post_meta
para guardar los valores demeta_title
ymeta_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.