Migración de Productos de Wordpress a Strapi
La migración de las antiguas verticales a las nuevas tecnologías implica la recreación de todo el contenido presente en WordPress en la plataforma Strapi. Como medida para evitar la creación desde cero de todos los productos, se empleará la metodología de migración previamente diseñada y desarrollada para los usuarios y las compras.
El procedimiento a seguir será el siguiente: se elaborará una consulta que extraiga el mayor número posible de campos relacionados con los productos. Estos campos se presentarán en una columna con el nombre correspondiente en Strapi, con el fin de facilitar las etapas posteriores. La respuesta obtenida de dicha consulta se exportará en formato JSON. Este archivo se transformará en otro JSON con una estructura diferente, adecuada para que el plugin de Strapi permita la inserción de los productos y sus componentes.
Consulta
La siguiente consulta devuelve los títulos de las publicaciones (post_title) de la tabla wp_posts pertenecientes a las entradas de tipo (post_type)
producto (products). Los resultados se ordenan de manera descendente según la fecha de publicación. De esta misma tabla podemos sacar el campo
identificador de los productos.
SELECT p.post_title AS title FROM wp_posts AS p WHERE post_type = 'product' ORDER BY p.post_date DESC;Con la consulta mencionada previamente, podemos extraer los campos personalizados de cada producto almacenados en la tabla wp_postmeta. En esta
sección de la consulta, filtraremos utilizando el identificador del producto para especificar a cuál nos estamos refiriendo. Además, incluiremos una condición
para buscar el nombre del campo personalizado, denominado meta_key.
El siguiente ejemplo es buscando el meta_key = '_sku'
SELECT p.post_title AS title, pm.meta_value AS skuFROM wp_posts AS pINNER JOIN wp_postmeta AS pm ON (pm.post_id = p.ID AND pm.meta_key = '_sku')WHERE post_type = 'product'ORDER BY p.post_date DESC;La consulta final incluiría tanto los títulos de las publicaciones como los campos personalizados de cada producto, extrayendo la mayor cantidad posible de
información relevante sobre los productos. La combinación de las tablas wp_posts y wp_postmeta se realiza mediante una unión (JOIN) sobre el
identificador del producto.
SELECT p.post_title AS title, pm.meta_value AS sku, pm1.meta_value AS register_button, pm2.meta_value AS duration, pm3.meta_value AS starting_date, pm4.meta_value AS language_1, COALESCE(NULLIF(pm5.meta_value, null), '') AS credits, pm6.meta_value AS certificate, pm7.meta_value AS level, pm8.meta_value AS price, pm9.meta_value AS subject_text, pm10.meta_value AS presentation_text, pm11.meta_value AS objectives_text, pm12.meta_value AS promotional_test, pm13.meta_value AS contract, pm14.meta_value AS id_group_laab2, pm15.meta_value AS tax FROM wp_posts AS p INNER JOIN wp_postmeta AS pm ON (pm.post_id = p.ID AND pm.meta_key = '_sku') INNER JOIN wp_postmeta AS pm1 ON (pm1.post_id = p.ID AND pm1.meta_key = 'quitar-boton-matriculate') INNER JOIN wp_postmeta AS pm2 ON (pm2.post_id = p.ID AND pm2.meta_key = 'producto-duracion-curso') INNER JOIN wp_postmeta AS pm3 ON (pm3.post_id = p.ID AND pm3.meta_key = 'producto-fecha-inicio') INNER JOIN wp_postmeta AS pm4 ON (pm4.post_id = p.ID AND pm4.meta_key = 'producto-idioma') LEFT JOIN wp_postmeta AS pm5 ON (pm5.post_id = p.ID AND pm5.meta_key = 'producto-creditos') INNER JOIN wp_postmeta AS pm6 ON (pm6.post_id = p.ID AND pm6.meta_key = 'producto-certificado') INNER JOIN wp_postmeta AS pm7 ON (pm7.post_id = p.ID AND pm7.meta_key = 'producto-nivel') LEFT JOIN ( SELECT post_id, MAX(meta_value) AS meta_value FROM wp_postmeta WHERE meta_key = '_price' GROUP BY post_id ) AS pm8 ON (pm8.post_id = p.ID) INNER JOIN wp_postmeta AS pm9 ON (pm9.post_id = p.ID AND pm9.meta_key = 'producto-texto-temario') LEFT JOIN wp_postmeta AS pm10 ON (pm10.post_id = p.ID AND pm10.meta_key = 'pestaniaPresentacion') LEFT JOIN ( SELECT post_id, MAX(meta_value) AS meta_value FROM wp_postmeta WHERE meta_key = 'textos-objetivos' GROUP BY post_id ) AS pm11 ON (pm11.post_id = p.ID) LEFT JOIN ( SELECT post_id, MAX(meta_value) AS meta_value FROM wp_postmeta WHERE meta_key = 'textos-dirigido' GROUP BY post_id ) AS pm12 ON (pm12.post_id = p.ID) LEFT JOIN wp_postmeta AS pm13 ON (pm13.post_id = p.ID AND pm13.meta_key = 'tiene_contrato') LEFT JOIN wp_postmeta AS pm14 ON (pm14.post_id = p.ID AND pm14.meta_key = 'id_grupo_laab2') LEFT JOIN wp_postmeta AS pm15 ON (pm15.post_id = p.ID AND pm15.meta_key = '_tax_class')
WHERE post_type = 'product' ORDER BY p.post_date DESC;