';

Information

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut rhoncus risus mauris, et commodo lectus hendrerit ac. Nam consectetur velit et erat fermentum aliquet. In laoreet, sem sit amet faucibus pulvinar, purus tellus tincidunt ex, vel blandit nibh dui sit amet justo.

Menú

Añadir nuevos estados a un pedido en WooCommerce

Cuando se realizan compras en una tienda online de WooCommerce, el plugin añade esa compra automáticamente a la lista de pedidos y le asigna un estado en función del método de pago que haya usado el usuario.

Los estados del pedido de WooCommerce permiten identificar en que fase se encuentra cada pedido. Estos solamente son visibles por el administrador de la página desde WooCommerce -> Pedidos.

Actualmente, sin entrar en muchos detalles, WooCommerce dispone de los siguientes estados de pedido: Pendiente de pago, Procesando, En espera, Completado, Cancelado, Reembolsado y Fallido.

Para WooCommerce estos estados son suficientes para asignar a un pedido cuando se realiza una compra. Por otro lado, podemos pensar que algún estado más vendría mejor. La intención de este artículo, es añadir o agregar nuevos estados a un pedido y lo explicaremos creando un estado nuevo llamado “Enviado”.

WooCommerce da por hecho en el estado Completado, que un pedido ha sido enviado y por lo tanto, el usuario ya recibe la factura de ese pedido en PDF incluso antes de que le llegue el pedido. Lo mejor es crear un estado que diga Enviado y cuando al cliente le llegue el pedido cambiemos el estado a Completado y le llegue su factura en PDF. Para el tema de la factura seguir el artículo Cómo incluir el campo NIF/DNI/NIE del cliente y generar facturas y albaranes en PDF en Woocommerce.

A continuación vamos a explicar como crear nuevos estados de forma manual y también a través de plugins de pago.

Añadir nuevo estado “Enviado” de forma manual

Os paso a explicar el procedimiento paso a paso para que quede claro. Primero tendremos que abrir nuestro archivo functions.php de nuestro Child Theme, para no perder los cambios en futuras actualizaciones, e ir copiando y pegando los siguientes códigos o funciones.

Para empezar, vamos a añadir el estado “Enviado” a la lista de Estado del pedido.

// Registrar Estado del pedido Enviado
function wpex_wc_register_post_statuses() {
    register_post_status( 'wc-shipping-progress', array(
        'label'                     => _x( 'Enviado', 'WooCommerce Order status', 'text_domain' ),
        'public'                    => true,
        'exclude_from_search'       => false,
        'show_in_admin_all_list'    => true,
        'show_in_admin_status_list' => true,
        'label_count'               => _n_noop( 'Approved (%s)', 'Approved (%s)', 'text_domain' )
    ) );
}
add_filter( 'init', 'wpex_wc_register_post_statuses' );

// Añadir Estado del pedido Enviado a WooCommerce
function wpex_wc_add_order_statuses( $order_statuses ) {
    $order_statuses['wc-shipping-progress'] = _x( 'Enviado', 'WooCommerce Order status', 'text_domain' );
    return $order_statuses;
}
add_filter( 'wc_order_statuses', 'wpex_wc_add_order_statuses' );

Una vez puesto, si vamos dentro de un pedido y revisamos de nuevo la lista veremos que aparece el estado nuevo que hemos creado como “Enviado”.

nuevos estados pedido woocommerce img1 - iborra web design

“Enviado” aparecerá al final de la lista, para ponerlo después del estado Procesando, debemos añadir el siguiente código.

// Añadir Estado del pedido Enviado en la lista después del estado Procesando
function add_shipping_progress_to_order_statuses( $order_statuses ) {
    $new_order_statuses = array();
    foreach ( $order_statuses as $key => $status ) {
        $new_order_statuses[ $key ] = $status;
        if ( 'wc-processing' === $key ) {
            $new_order_statuses['wc-shipping-progress'] = 'Enviado';
        }
    }
    return $new_order_statuses;
}
add_filter( 'wc_order_statuses', 'add_shipping_progress_to_order_statuses' );

Crear un email al nuevo estado “Enviado”

Para acabar, debemos crear un email que se envíe al usuario cuando establecemos un pedido en estado “Enviado”. Copiar y pegar el siguiente código en el archivo functions.php  y personalizarlo a vuestro gusto tanto el mensaje como el asunto o el título.

// Email que se envía cuando el estado del pedido está en Enviado
function email_shipping_notification( $order_id, $checkout=null ) {
   global $woocommerce;
   $order = new WC_Order( $order_id );
   //error_log( $order->status );
   if($order->status === 'shipping-progress' ) {
      // Mensaje del email.
      $mailer 		= $woocommerce->mailer();
      $message_body = __( 'Su pedido se encuentra listo y está siendo enviado en estos momentos.<br><br>Por favor, ingrese en su cuenta desde la página web de <strong>Nombre de tu web</strong> para que pueda realizar un seguimiento de su pedido en la sección de Pedidos:<br><br><a href="http://nombredetuweb.com/mi-cuenta/" target="_blank">Acceso a su cuenta</a>.', 'text_domain'  );
      $message 		= $mailer->wrap_message(
      // Mensaje en header.
      sprintf( __( 'Su pedido ha sido enviado', 'text_domain'  ), $order->get_order_number() ), $message_body );
      // Asunto del mensaje.
	  $result = $mailer->send( $order->billing_email, sprintf( __( 'Su pedido ha sido enviado en Nombre de tu web', 'text_domain'  ), $order->get_order_number() ), $message );
	  //error_log( $result );
	}
}
add_action( 'woocommerce_order_status_changed', 'email_shipping_notification');

Con esto ya tendremos creado el nuevo estado “Enviado” con su correspondiente email. En el artículo Seguir envío de un pedido con AfterShip para Woocommerce, podemos ofrecer al cliente la posibilidad de realizar el seguimiento de envío de su pedido desde nuestra propia tienda online.

Renombrar un estado del pedido

Imaginar que el estado Completado no os gusta como se llama y lo queréis cambiar por otro nombre, por ejemplo por Pedido Recibido.

Para ello, abrimos nuestro archivo functions.php de nuestro Child Theme y pegamos el siguiente código. Así de fácil.

// Renombrar un estado del pedido
function wc_renaming_order_status( $order_statuses ) {
    foreach ( $order_statuses as $key => $status ) {
        $new_order_statuses[ $key ] = $status;
        if ( 'wc-completed' === $key ) {
            $order_statuses['wc-completed'] = _x( 'Pedido Recibido', 'Order status', 'woocommerce' );
        }
    }
    return $order_statuses;
}
add_filter( 'wc_order_statuses', 'wc_renaming_order_status' );

En los comentarios tenéis los diferentes nombres de los estados, como en el ejemplo anterior, Completado = ‘wc-completed’.

Añadir nuevos estados a un pedido a través de plugins de pago

La anterior forma de hacerlo puede resultar algo engorrosa o quizás necesitáis tenerlo todo más personalizado, más vistoso y sin tener mucha idea de programación puede resultar difícil, pero bueno, con lo anterior se consigue en parte lo que buscábamos, sin gastar dinero en plugins ni sobrecargando la web.

A continuación pongo un listado de plugins de pago para quien no quiera tocar código y realizar nuevos estados de una forma más sencilla y personalizable.

  • WooCommerce Order Status & Actions Manager – $75

nuevos estados pedido woocommerce img2 - iborra web design

Un plugin muy completo y flexible donde se pueden crear nuevos estados y personalizarlos con diferentes estilos, colores, iconos y otras variaciones que permiten gestionar los pedidos con mayor eficacia. El creador del plugin es totalmente de confianza y profesional. Es el que más recomiendo pero es caro.

Ir al sitio oficial del plugin

  • WooCommerce Partial Orders – $25

nuevos estados pedido woocommerce img3 - iborra web design

Plugin más económico y sencillo que el anterior pero algo diferente. Agregan un nuevo estado de pedido llamado Parcialmente completado para facilitar la administración del pedido, seguimiento automático y control de cada envío, informes de pedidos, etc.

Ir al sitio oficial del plugin

  • Advanced WooCommerce Order Status & Action Manager – $24

nuevos estados pedido woocommerce img4 - iborra web design

Con este plugin se pueden añadir y personalizar nuevos estados, asignar icono y botón de acción al estado del nuevo pedido, establecer colores, reordenar los estados, agregar reglas e incluso editar nuevo contenido de correo electrónico a través de nuevas plantillas.

Ir al sitio oficial del plugin

  • WooCommerce Order Status Manager – $49

nuevos estados pedido woocommerce img5 - iborra web design

El plugin original de WooCommerce. Permite crear, editar y eliminar estados, notificaciones por correo electrónico, añadir iconos e infinidad de cosas. Sin duda un buen plugin pero no es de los más baratos.

Ir al sitio oficial del plugin

Con estos plugins también conseguiremos añadir nuevos estados a un pedido y de forma muy profesional.

!Si te gustó este artículo, no dejes de visitar el blog o suscribirte a la newsletter! | Iborra Web Design

Comentarios
Paco (Iborra Web Design)

Artículos destacados

Hay 4 comentarios en este artículo
  1. Miguel
    10 septiembre 2020, 06:51

    Un gran y maravilloso aporte a la comunidad. Solo me asalta una duda, en el caso de que quiera agregar varios estados de pedido nuevos ¿cómo debo hacerlo? Desconozco esto del código y las funciones, por lo que te agradezco tu ayuda. Un saludo y gracias.

    • Paco (Iborra Web Design)
      10 septiembre 2020, 19:20

      Hola Miguel,

      Gracias por tu comentario. WooCommerce ofrece varios estados de pedido y aquí en el artículo te muestro cómo se pone otro. Si deseas crear más estados nuevos fíjate en los códigos donde pone wc-shipping-progress / shipping-progress y el nombre en español que va después, en este caso ‘Enviado’. Esa es la parte importante a cambiar para crear nuevos estados (aparte de otros textos que lógicamente habría que cambiar) por el que tu quieras. Una cosa importante, el nombre que pongas (empezando por wc-), en este ejemplo es ‘wc-shipping-progress’ no puede superar los 20 caracteres o te dará error.

      Saludos.

  2. Javier
    17 marzo 2020, 11:38

    Excelente aporte, claro y directo, aunque me surge una duda en la última parte (renombrar), ¿cómo puedo identificar el nombre o shortcode de los diferentes status? por ejemplo para ese ejemplo completado = ‘wc-completed’.

    Saludos y nuevamente gracias.

    • Paco (Iborra Web Design)
      17 marzo 2020, 16:20

      Hola Javier,

      Gracias por tu comentario, me alegra que te guste el artículo. Los nombres de los diferentes estados serían los siguientes:

      Pendiente de pago = ‘wc-pending’
      Procesando = ‘wc-processing’
      En espera = ‘wc-on-hold’
      Completado = ‘wc-completed’
      Cancelado = ‘wc-cancelled’
      Reembolsado = ‘wc-refunded’
      Fallido = ‘wc-failed’

      Un saludo.

Deja un comentario

¿Necesitas ayuda? Escríbeme por Whatsapp