Cómo funciona WooCommerce
Módulo 1: Antes de empezar · Tiempo de lectura: 10 minutos
Objetivo de aprendizaje: Después de esta lección podrá explicar cómo funciona WooCommerce en WordPress y dónde se encuentran los productos, los pedidos, el carrito y las tareas programadas.
Conceptos clave: tipo de producto, tipo de contenido product, pedidos (HPOS), páginas de la tienda, sesión y carrito, Store API, API REST, Action Scheduler, correos transaccionales, extensiones
Un plugin que convierte su sitio en una tienda
En el curso de WordPress (lecciones 1.2 y 1.3) vio cómo se genera una página: el servidor web pasa la solicitud a PHP, PHP carga WordPress, los plugins y el tema, obtiene los datos de la base de datos y los convierte en HTML. WooCommerce se integra en ese proceso como un gran plugin. Aporta cuatro cosas:
- Datos: productos, pedidos, clientes, tipos impositivos, zonas de envío.
- Páginas: la tienda, el carrito, la página de finalizar compra y Mi cuenta.
- Procesos: un carrito por visitante, pagos a través de un proveedor de pago, correos, actualización del inventario, tareas programadas.
- Puntos de acceso para programas: la Store API y la API REST.
Quien sabe dónde están estas piezas puede encontrar un error mucho más rápido más adelante. Por eso las vamos a ver ahora una por una.
Productos: un tipo de contenido propio
WordPress utiliza tipos de contenido: las páginas y las entradas son dos de ellos (curso de WordPress, lección 4.2). WooCommerce añade el tipo de contenido product. Por tanto, un producto se guarda, igual que una página, en la tabla de entradas, con sus datos adicionales (precio, SKU, inventario, peso) como metadatos. Las categorías y etiquetas de productos son taxonomías propias, independientes de las de su blog.
Cada producto tiene un tipo de producto. Los tipos básicos son simple, agrupado, externo (un enlace a otra tienda) y variable. Además, puede activar las casillas virtual (no hay nada que enviar) y descargable (un archivo tras el pago). Un producto variable tiene variaciones, como una tetera en tres colores; cada variación es un artículo independiente con su propio precio e inventario. El módulo 3 profundiza en este tema.
Pedidos: tablas propias (HPOS)
Antes, WooCommerce también guardaba los pedidos como entradas. En tiendas con mucho movimiento eso se volvía lento, porque los pedidos y las entradas del blog compartían la misma tabla grande. Por eso llegó HPOS (High-Performance Order Storage): los pedidos en tablas propias, como wc_orders, wc_order_addresses y wc_orders_meta (precedidas del prefijo de tablas de su sitio). Desde WooCommerce 8.2 (octubre de 2023), HPOS está activado en toda instalación nueva. Una tienda más antigua sigue con el almacenamiento anterior hasta que usted mismo cambie en WooCommerce > Ajustes > Avanzado > Características.
¿Por qué debe saberlo? Por tres motivos:
- Copias de seguridad: los pedidos no están en sus archivos, sino en la base de datos. Una copia de seguridad sin base de datos no sirve de nada para una tienda (lección 6.2).
- Extensiones: una extensión antigua que todavía lee los pedidos como entradas no funciona bien con HPOS. WooCommerce muestra un aviso junto al plugin si no es compatible.
- Restaurar: si restaura una copia de seguridad de ayer, desaparecen los pedidos de hoy. En una tienda eso es mucho más grave que en un blog (lección 6.2).
El carrito: distinto para cada visitante
Una página normal es igual para todos los visitantes. El carrito no. En cuanto un visitante añade algo al carrito, WooCommerce inicia una sesión: una cookie (wp_woocommerce_session_ seguida de un código) en el navegador y una fila en una tabla de sesiones de la base de datos. Así, en la siguiente solicitud, la tienda sabe qué carrito corresponde a este visitante.
Dos consecuencias que volverá a ver más adelante:
- El carrito, la página de finalizar compra y Mi cuenta nunca deben acabar en una caché de páginas; de lo contrario, un visitante vería el carrito de otro. WooCommerce envía en esas páginas sus propias cabeceras que prohíben la caché (lección 6.4).
- Una tienda que inicia una sesión para cada visitante, aunque no tenga carrito, inutiliza la caché de páginas de todo el sitio. Es un error frecuente de temas y extensiones.
Las páginas de la tienda y los bloques
Durante la instalación, WooCommerce crea cuatro páginas: Tienda, Carrito, Finalizar compra y Mi cuenta. Desde la versión 8.3 (noviembre de 2023), las instalaciones nuevas usan bloques para el carrito y la página de finalizar compra; las tiendas más antiguas a menudo siguen usando shortcodes. Ambas opciones funcionan. La diferencia es importante para las extensiones: una extensión que añade algo a la página de finalizar compra debe ser compatible con la variante que usted utiliza. La lección 2.2 muestra cómo comprobarlo.
Dos puntos de acceso para programas: Store API y API REST
WooCommerce tiene dos puntos de acceso programables, y la diferencia es importante para la seguridad:
| Store API | API REST | |
|---|---|---|
| Dirección | /wp-json/wc/store/v1/... | /wp-json/wc/v3/... |
| Para quién | La propia tienda (los bloques en el navegador) y otros escaparates | Integraciones: contabilidad, inventario, aplicaciones |
| ¿Necesita clave? | No, es pública: cualquiera puede leer productos y precios | Sí, una clave de la API con permisos de lectura o escritura |
| Qué contiene | Productos, precios, estado del inventario, el carrito del visitante actual | También pedidos, clientes, informes |
Que la Store API sea pública no es una fuga: es exactamente lo que cualquier visitante ve en la tienda, solo que en un formato que los programas pueden leer. Pruébelo con su propia tienda: abra https://shop.example.com/wp-json/wc/store/v1/products en su navegador (con su propia dirección) y verá sus productos en formato JSON. La API REST, en cambio, debe estar cerrada sin clave. La lección 2.4 comprueba ambas.
Entre bastidores: Action Scheduler y correos
Gran parte del trabajo de una tienda no se hace mientras el cliente espera, sino más tarde. WooCommerce utiliza para ello el Action Scheduler: una cola de tareas programadas, como cancelar un pedido no pagado tras el tiempo configurado, enviar webhooks o actualizar informes. Puede ver la cola en WooCommerce > Estado > Acciones programadas. Estas tareas se ejecutan con WP-Cron, que solo funciona cuando hay visitantes. En una tienda con poco tráfico, el trabajo puede quedarse pendiente; la lección 7.3 muestra cómo lo resuelve un cron real.
Además, WooCommerce envía correos transaccionales: un correo a usted cuando hay un pedido nuevo, y correos al cliente al recibir el pedido, al enviarlo, al hacer un reembolso o al crear una cuenta nueva. Si no llegan, el cliente piensa que algo ha ido mal. La lección 6.1 se ocupa de la entregabilidad.
En la práctica: así se ve en WooCommerce
En el escritorio de WordPress de Theehuis Example aparecen tras la instalación tres menús nuevos: WooCommerce (pedidos, clientes, ajustes, estado), Productos y Analítica (en versiones recientes a veces dentro de WooCommerce). En WooCommerce > Estado encontrará el entorno del servidor, las tablas de la base de datos, las acciones programadas y los registros. Necesitará esa pantalla a menudo. Los pasos son iguales con cualquier proveedor de alojamiento, porque están en el propio WordPress.
Resumen
- WooCommerce aporta datos, páginas, procesos y dos puntos de acceso programables.
- Los productos son un tipo de contenido propio; en las tiendas nuevas, los pedidos se guardan en tablas propias (HPOS, por defecto desde la versión 8.2).
- El carrito funciona con una sesión por visitante; por eso el carrito, la página de finalizar compra y Mi cuenta no deben estar en la caché.
- La Store API es pública y muestra lo que ve cualquier visitante; la API REST debe estar cerrada sin clave.
- Las tareas programadas se ejecutan mediante el Action Scheduler y WP-Cron; los correos forman parte del proceso de pedido.
Cuestionario
Ejercicio
Ejercicio A1.2: ¿Funciona este sitio con WooCommerce? Introduzca un dominio, elija sí o no y anote qué prueba ha visto (por ejemplo, "generator" o "wc/store/v1"). El programa obtiene la página de inicio, lee el índice REST (/wp-json/, solo la lista de namespaces) y solicita /wp-json/wc/store/v1/products?per_page=1. Reconoce WooCommerce por un meta generator con WooCommerce, el namespace wc/store/v1 en el índice REST, una Store API que funciona, archivos de /wp-content/plugins/woocommerce/ o la clase del body woocommerce. Verde: su elección es correcta y su prueba aparece en las cabeceras, el HTML, el índice REST o la respuesta de la Store API; en ese caso verá también el número de productos y la moneda. Naranja: su elección es correcta, pero no encontramos su prueba. Rojo: su elección no es correcta. Pruébelo primero con su propia tienda y después con una tienda que conozca. No se añade nada a ningún carrito ni se envía nada.
Para saber más
Cuando se describen pasos en un panel, se refieren a WebOké; con otros proveedores funciona de forma similar.
- Curso gratuito de WordPress 1.2: Bajo el capó: servidor web, PHP y base de datos
- Curso gratuito de WordPress 1.3: Archivos, wp-config y la base de datos
- Curso gratuito de WordPress 4.2: Páginas, entradas, categorías y etiquetas
- High-Performance Order Storage (developer.woocommerce.com, en inglés): https://developer.woocommerce.com/docs/features/orders/high-performance-order-storage/
- Store API (developer.woocommerce.com, en inglés): https://developer.woocommerce.com/docs/apis/store-api/
- Action Scheduler (en inglés): https://actionscheduler.org/
