Skip to content

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 sku
FROM wp_posts AS p
INNER 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;