Extras
Todas las rutas de esta página exigen permiso de gestión. Para conocer el comportamiento en la tienda, consulta Extras y popup.
Rutas
| Método | Ruta | Desde |
|---|---|---|
| GET, POST | /extras | 1.1.0 |
| GET, PUT, PATCH, DELETE | /extras/{id} | 1.1.0 |
| GET, POST | /extra-categories | 1.1.0 |
| GET, PUT, PATCH, DELETE | /extra-categories/{id} | 1.1.0 |
| GET, PUT, PATCH | /products/{id}/extra-categories | 1.1.0 |
| GET | /products/{id}/variations | 1.17.0 |
| GET, PUT, PATCH, DELETE | /products/{id}/variations/{variation_id}/extra-categories | 1.17.0 |
Extras
Objeto extra
{
"id": 91,
"name": "QUESO EXTRA 50G",
"visible_as": "Queso extra",
"sku": "",
"price": "3000",
"prechecked": false,
"enabled": true,
"categories": [ { "id": 18, "name": "Adiciones" } ],
"updated_at": "2026-09-30T17:15:00+00:00"
}
name es el nombre interno. visible_as es el nombre que ve el cliente; si está vacío, se muestra name.
Listar
GET /extras con page, per_page, search y category_id. Se ordena por nombre.
Crear y editar
| Campo | Notas |
|---|---|
name | Obligatorio al crear. |
price | Número decimal ≥ 0. Se acepta coma decimal. |
visible_as, sku | Texto. |
prechecked | Si viene marcado por defecto («Preseleccionado»). |
enabled | Si está activo. |
category_ids | IDs de categorías de extras existentes. Alias: categories. |
Al editar, solo cambian los campos enviados. Las categorías no se crean automáticamente: deben existir.
curl -X POST https://tienda.example.test/wp-json/notiwoo/v1/extras \
-H "Authorization: Bearer <token>" -H "Content-Type: application/json" \
-d '{"name": "QUESO EXTRA 50G", "visible_as": "Queso extra", "price": "3000", "category_ids": [18]}'
Borrar
DELETE /extras/{id} borra el extra de forma definitiva y lo quita del orden de sus categorías. Responde { deleted: true, id }.
Errores: 404 notiwoo_extra_not_found, 400 notiwoo_extra_name_required, 400 notiwoo_invalid_extra_price, 400 notiwoo_extra_category_not_found (details.category_id).
Categorías de extras
Objeto categoría
{
"id": 18,
"title": "Adiciones",
"visible_as": "Elige tus adiciones",
"style": "accordion",
"type": "checkbox-limitedchoice",
"minimum_options": 0,
"maximum_options": 2,
"required": false,
"hide_prices": false,
"enabled": true,
"global_categories": [7],
"extra_order": [94, 91],
"extras_count": 2,
"updated_at": "2026-09-30T17:20:00+00:00"
}
| Campo | Valores |
|---|---|
type | checkbox-multichoice (casillas), checkbox-limitedchoice (casillas con selección limitada), radio o select (una sola opción). |
style | accordion o flat. |
minimum_options, maximum_options | Enteros ≥ 0. radio y select fijan el máximo en 1. checkbox-limitedchoice necesita un máximo de al menos 1. El mínimo no puede superar el máximo. |
global_categories | IDs de categorías de producto: la categoría de extras se aplica a todos sus productos. |
extra_order | Orden de los extras. Todos deben existir y pertenecer a la categoría, así que guarda primero la categoría nueva y ordena después. |
GET /extra-categories acepta search. No está paginado: meta.total indica el total.
DELETE /extra-categories/{id} la borra y la quita de todos los productos y variaciones.
Errores frecuentes: 400 notiwoo_extra_category_title_required, 400 notiwoo_invalid_extra_category_type, 400 notiwoo_invalid_extra_category_range, 400 notiwoo_missing_extra_category_maximum, 400 notiwoo_ordered_extra_wrong_category, 404 notiwoo_extra_category_not_found.
Extras de un producto
GET /products/{id}/extra-categories devuelve las categorías asignadas directamente al producto. En meta incluye:
| Campo | Significado |
|---|---|
category_ids | Asignación directa, en orden. |
effective_category_ids | Lo que verá el cliente: asignación directa más categorías globales, sin las desactivadas. |
inherited | En una variación, si hereda los extras del producto. |
extras_disabled | Estado «Sin extras». |
PUT /products/{id}/extra-categories acepta category_ids (ordenados) y/o extras_disabled. Debes enviar al menos uno de los dos.
curl -X PUT https://tienda.example.test/wp-json/notiwoo/v1/products/120/extra-categories \
-H "Authorization: Bearer <token>" -H "Content-Type: application/json" \
-d '{"category_ids": [18, 12]}'
Variaciones
GET /products/{id}/variationslista las variaciones{ id, name, status, enabled }. En un producto simple devuelve[].PUT /products/{id}/variations/{variation_id}/extra-categoriesdefine extras propios de la variación y deja de heredar los del producto.DELETEsobre la misma ruta quita la configuración propia y vuelve a heredar.
Errores: 404 notiwoo_invalid_product, 404 notiwoo_invalid_variation, 400 notiwoo_category_ids_required.