
🏪 Estados de pedido personalizados en WooCommerce: cómo crear y configurar
Procesamos el pedido, pero no existe un estado estándar para esta etapa. «Processing» para el armado, «Completed» para el envío, y un vacío en el medio. La tienda crece y los siete estados predeterminados de WooCommerce ya no son suficientes.
Puede añadir un estado personalizado de dos maneras: con un par de líneas de código en functions.php o con un plugin ya preparado. Ambos enfoques funcionan y no rompen la lógica estándar de los pedidos. A continuación, paso a paso, con código probado y una alternativa sin programación.
💡 Resumen rápido:
- Qué estados vienen con WooCommerce de fábrica y por qué no son suficientes
- Registrar un estado personalizado mediante código PHP
- Añadir varios estados y notificaciones de correo personalizadas
- Plugins para estados de pedido cuando el código no es adecuado
- Respuestas a preguntas frecuentes: HPOS, colores, eliminación, traducción
Qué estados vienen con WooCommerce de fábrica
Por defecto, WooCommerce proporciona siete estados de pedido. Cada uno está estrechamente vinculado a un punto específico del ciclo de vida:
Estado | Qué significa |
|---|---|
Pending payment | Pedido creado, pago no recibido |
Processing | Pago recibido, pedido en proceso |
Completed | Pedido completado y cerrado |
On hold | A la espera de confirmación del pago |
Cancelled | Cancelado por el cliente o el administrador |
Refunded | Dinero devuelto |
Failed | Pago fallido |
Para una tienda típica, este conjunto es suficiente. Pero en cuanto aparece una lógica de procesamiento personalizada, como producción bajo pedido o entrega en varias etapas, siete estados ya no bastan. Necesita «En fabricación», «Entregado al transporte», «A la espera de prepago» o «Requiere verificación del gestor».
Paso 1: registrar un estado personalizado mediante código
Antes de WooCommerce 3.0, los estados usaban la taxonomía shop_order_status y añadir uno nuevo no era trivial. Ahora es más sencillo: un estado de pedido es un estado de publicación del tipo de publicación personalizado shop_order. Se registra con una sola función register_post_status() y el filtro wc_order_statuses.
El código se añade al archivo functions.php del tema hijo. Antes de cualquier edición, haga una copia de seguridad completa del sitio.**
1 // Registering a new order status 2 function sdstudio_register_custom_order_status() { 3 register_post_status( 'wc-preparing', array( 4 'label' => 'In assembly', 5 'public' => true, 6 'exclude_from_search' => false, 7 'show_in_admin_all_list' => true, 8 'show_in_admin_status_list' => true, 9 'label_count' => _n_noop( 10 'In assembly (%s)', 11 'In assembly (%s)', 12 'sdstudio' 13 ), 14 ) ); 15 } 16 add_action( 'init', 'sdstudio_register_custom_order_status' ); 17 18 // Adding status to WooCommerce list 19 function sdstudio_add_custom_order_status( $order_statuses ) { 20 $order_statuses['wc-preparing'] = 'In assembly'; 21 return $order_statuses; 22 } 23 add_filter( 'wc_order_statuses', 'sdstudio_add_custom_order_status' );
Después de guardar functions.php, el nuevo estado aparecerá en el desplegable de estado del pedido en el panel de administración y en los informes de WooCommerce. El sistema lo ve como un estado completo: puede filtrar pedidos, cambiar el estado manualmente y usarlo en hooks.
Qué está sucediendo aquí
La función register_post_status() crea un nuevo estado de publicación con el prefijo wc-, una convención de WooCommerce. El parámetro label establece el nombre legible en el panel de administración. label_count, mediante _n_noop(), gestiona la visualización correcta de los contadores en la interfaz en español.
El filtro wc_order_statuses añade el estado al array que WooCommerce usa para construir la lista. Sin este paso, el estado estará registrado en el sistema pero no aparecerá en el menú desplegable de pedidos.

Visualmente, el resultado se ve exactamente así: el nuevo estado se muestra en la lista general junto a los estándar.
Paso 2: añadir varios estados y notificaciones de correo
Para un estado, el código anterior funciona perfectamente. Si necesita varios, simplemente duplique register_post_status() dentro de la misma función y añada una entrada al array $order_statuses. Por ejemplo, para una tienda con producción bajo pedido:
1 function sdstudio_register_multiple_statuses() { 2 // Status "In production" 3 register_post_status( 'wc-in-production', array( 4 'label' => 'In production', 5 'public' => true, 6 'exclude_from_search' => false, 7 'show_in_admin_all_list' => true, 8 'show_in_admin_status_list' => true, 9 'label_count' => _n_noop( 10 'In production (%s)', 11 'In production (%s)', 12 'sdstudio' 13 ), 14 ) ); 15 16 // Status "Ready to ship" 17 register_post_status( 'wc-ready-to-ship', array( 18 'label' => 'Ready to ship', 19 'public' => true, 20 'exclude_from_search' => false, 21 'show_in_admin_all_list' => true, 22 'show_in_admin_status_list' => true, 23 'label_count' => _n_noop( 24 'Ready to ship (%s)', 25 'Ready to ship (%s)', 26 'sdstudio' 27 ), 28 ) ); 29 } 30 add_action( 'init', 'sdstudio_register_multiple_statuses' ); 31 32 function sdstudio_add_multiple_statuses( $order_statuses ) { 33 $order_statuses['wc-in-production'] = 'In production'; 34 $order_statuses['wc-ready-to-ship'] = 'Ready to ship'; 35 return $order_statuses; 36 } 37 add_filter( 'wc_order_statuses', 'sdstudio_add_multiple_statuses' );
Nota: el identificador del estado (el primer argumento de register_post_status) siempre comienza con wc-. Sin este prefijo, WooCommerce no reconocerá el estado.
Notificaciones de correo para estados personalizados
Por defecto, WooCommerce no envía correos al cambiar a un estado personalizado. Para activar las notificaciones, añada el filtro woocommerce_email_actions:
1 function sdstudio_add_custom_status_email( $email_actions ) { 2 $email_actions[] = 'woocommerce_order_status_wc-preparing'; 3 $email_actions[] = 'woocommerce_order_status_wc-in-production'; 4 return $email_actions; 5 } 6 add_filter( 'woocommerce_email_actions', 'sdstudio_add_custom_status_email' );
Después de esto, puede configurar la plantilla de correo en WooCommerce → Ajustes → Correos electrónicos, el nuevo estado aparecerá en la lista de desencadenantes para personalizar. La plantilla se crea en el tema hijo en la ruta woocommerce/emails/, el archivo se nombra siguiendo el patrón customer-<status>.php.
Plugins para estados de pedido: cuando el código no es adecuado
El código no es el único camino. Si no quiere editar functions.php o necesita cambiar estados con frecuencia, existen plugins. Dos opciones principales:
WooCommerce Order Status Manager, la extensión oficial de WooCommerce. Añade una interfaz para crear y editar estados directamente desde el panel de administración: WooCommerce → Ajustes → Estados de pedido. Admite notificaciones de correo, iconos, colores e importación/exportación de estados. De pago, incluido en algunos planes de WooCommerce.
Flexi Custom Order Status, un plugin gratuito del catálogo de WordPress.org. También proporciona un editor visual para estados, pero con menos funciones. Adecuado para escenarios básicos: añadió un estado, asignó un color, activó un correo.
Qué camino elegir:
- Necesita uno o dos estados y no le teme al código,
functions.phpes suficiente. - Hay muchos estados, cambian con frecuencia o el sitio lo gestiona un cliente sin conocimientos técnicos, consiga un plugin.
- Está usando HPOS (Almacenamiento de pedidos de alto rendimiento), ambos enfoques funcionan. Los estados siguen basándose en
register_post_status(), HPOS no les afecta.
El breve video anterior muestra el proceso de añadir un estado personalizado en cinco minutos, desde la instalación del plugin hasta el primer uso en pedidos.
⁉️🤔 Preguntas frecuentes
¿Funciona el estado personalizado con HPOS?
Sí, completamente. HPOS cambia la forma en que se almacenan los datos del pedido, pero no toca el estado de la publicación. La función
register_post_status()sigue siendo el mecanismo principal, su código funcionará con HPOS tanto activado como desactivado.
¿Se puede establecer un color para un estado personalizado?
Mediante código, solo con estilos CSS en el panel de administración: enganche a la clase
.status-wc-preparingy establezca el fondo. Más cómodo mediante plugins: Order Status Manager y Flexi ofrecen selección visual de color sin una sola línea de código.
¿Cómo eliminar un estado creado?
Elimínelo de
register_post_status()y del filtrowc_order_statuses. Los pedidos con este estado no desaparecerán, permanecerán en la base de datos, pero el estado dejará de mostrarse en la lista desplegable. Antes de eliminarlo, mueva todos los pedidos con el estado a eliminar a otro para no perderlos de vista.
¿Cómo traducir los estados a otro idioma?
El parámetro
labelenregister_post_status()acepta una cadena, especifique el nombre en el idioma requerido. Si el sitio es multilingüe, envuelva la cadena en una llamada a__()o_x()con un dominio de texto y traduzca mediante archivos.po/.mocomo cualquier otro texto del tema.
¿Es obligatorio el prefijo wc-?
Sí. WooCommerce filtra los estados por este prefijo. Si registra un estado sin
wc-, no aparecerá en el panel de administración de pedidos. Excepción, los plugins: ellos añaden el prefijo por sí mismos o eluden el filtrado con mecanismos internos.
¿Se puede añadir un estado personalizado sin código y sin plugin?
Sin código y sin plugin, no. WooCommerce no proporciona una interfaz para crear estados de fábrica. El camino mínimo sin programación: Flexi Custom Order Status gratuito del catálogo de WordPress.org. Instalación en un clic, configuración mediante el panel de administración.
Qué usar para su tarea
Los estados de pedido personalizados son uno de esos mecanismos de WooCommerce que es fácil pasar por alto mientras la tienda es pequeña. Pero en cuanto aparece producción, logística por etapas o verificación manual de pedidos, sin ellos el panel de administración se convierte en un caos de notas imprecisas.
- Necesita uno o dos estados y ya ha editado
functions.phpantes, el código del paso 1 resolverá la tarea en cinco minutos. - Necesita un editor visual y ajustes de color para el cliente, Flexi Custom Order Status (gratuito).
- Los estados son parte de un proceso de negocio complejo con escenarios de correo y docenas de etapas, WooCommerce Order Status Manager (extensión oficial).
Compruebe qué enfoque le conviene más y añada hoy su primer estado personalizado. Si usa un método diferente o conoce un plugin que no esté en el artículo, compártalo en los comentarios.



