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.
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.
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:
<h1>
.<p>
) y los concatenamos en una sola variable.<meta name="title">
y <meta name="description">
) se obtienen y almacenan para su uso posterior.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');
$entradas
): Este arreglo simula los datos extraídos. Cada elemento contiene titulo
, contenido
, categoria
, meta_title
y meta_description
.get_page_by_title
. Si encuentra una coincidencia, omite la creación para evitar duplicados.wp_insert_post
crea una nueva entrada con el título y el contenido.wp_set_post_categories
. La categoría debe existir en WordPress; de lo contrario, se puede crear previamente.update_post_meta
para guardar los valores de meta_title
y meta_description
en la entrada, lo cual es útil para optimizar el SEO.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:
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.
If you're looking to personalize your WordPress admin area, changing the icons of your custom post types is a fantastic way to start. Advanced Custom Fields (ACF) makes this process simple. Whether you want a sleek airplane icon for your 'Travel' posts or a sturdy hammer for 'Construction' updates, ACF has got you covered.
Firstly, it’s worth browsing through the WordPress Dashicons library to pick the perfect icon for your post type.
dashicons-airplane
.Customizing the icons of your post types can significantly enhance the navigation experience in your dashboard, making it visually intuitive. With a library as extensive as WordPress Dashicons, your options are nearly limitless.
Personalizing your WordPress site extends beyond just the user-facing elements. The admin dashboard can and should feel just as much 'yours' as the rest of the site. With ACF and the Dashicons library, you can achieve just that with a few clicks.
Feel free to get creative and remember, your dashboard should be as unique as the content you create!