• iborra
    borde slide
    DESCUBRE A TRAVÉS DE
    borde slide
    NUESTRO BLOG
    Artículos de interés sobre diseño web

Añadir nuevos estados a un pedido en Woocommerce

añadir nuevo estado de pedido

Cuando se realizan compras en una tienda online, Woocommerce 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 cliente.

Los estados del pedido 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 tutorial, 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 cliente 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 tutorial 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, ya que gratuitos no existen para realizar tal cosa o por lo menos lo desconozco.

Añadir nuevo estado "Enviado" de forma manual y su email correspondiente al cliente

Vamos a explicar el procedimiento paso a paso para que quede claro que hacen los siguientes códigos. Primero tendremos que abrir nuestro archivo functions.php de nuestro tema child, para no perder los cambios en futuras actualizaciones, e ir copiando y pegando los siguientes códigos o funciones dentro de la etiqueta php del archivo functions.

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

/** 
 * Añadir nuevos estados a un pedido en Woocommerce
 * Tutorial: http://iborra.es/blog/2016/12/anadir-nuevos-estados-a-un-pedido-en-woocommerce
**/

// 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 esto, si vamos dentro de un pedido y revisamos de nuevo la lista veremos que aparece el estado nuevo que hemos creado como "Enviado".

"Enviado" aparecerá al final de la lista, para ponerlo después del estado Procesando, como en la imagen, 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();

    // Añadir nuevo estado después de Procesando
    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' );

Para acabar, debemos crear un email que se envíe al cliente cuando nosotros establecemos un pedido en estado "Enviado". Copiar y pegar el siguiente código 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 tutorial 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.

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.

  1. WooCommerce Order Status & Actions Manager - $33
  2. 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.

    Ir al sitio oficial del plugin

  3. WooCommerce Advance Order Status - $9
  4. Plugin más económico, sencillo y fácil de configurar que el anterior. Se puede añadir y editar los estados, notificaciones por correo electrónico, personalizar el estado por colores, etc. Totalmente recomendable por su económico precio. Los creadores tardan más en actualizar que el anterior plugin.

    Ir al sitio oficial del plugin

  5. WooCommerce Order Status Manager - $49
  6. El plugin original de Woocommerce y también el más caro. Permite crear, editar y eliminar estados, notificaciones por correo electrónico, añadir iconos e infinidad de cosas. Si no te importa gastar un poco de dinero, este es tu plugin para añadir y personalizar estados de un pedido.

    Ir al sitio oficial del plugin

Con estos plugins también conseguiremos añadir nuevos estados a un pedido y de forma muy profesional. Para próximas actualizaciones también habrá que tener en cuenta al plugin Woocommerce Partial Orders.

Extra: Renombrar un estado del pedido

Como extra a este tutorial os voy a explicar como renombrar un estado ya creado de un 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 tema child, y dentro de la etiqueta php copiamos y pegamos el siguiente código. Así de fácil.

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' );

Espero que os sea útil este tutorial y así sacarle más partido a los estados del pedido en Woocommerce.

Comenta y comparte este post!

¿Tienes alguna sugerencia, idea, consejo, duda, pregunta, agradecimiento, encuentras algún error o este post no está actualizado? Entonces esperamos tu comentario.

También puedes recomendar y compartir este post. Estamos muy agradecidos por tu apoyo!

Comentarios (2)

  • foto hombre
    Javier Responder

    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.

    23 de Enero 2017 a las 21:38h
    • foto blog
      Paco (Iborra Web Design) Responder

      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.

      24 de Enero 2017 a las 14:20h

Deja un comentario

Este blog se nutre de los comentarios de los visitantes! Así que vamos, únete a nosotros!

Por favor esperamos que entiendas que se eliminarán aquellos comentarios que no tengan nada que ver con el contenido de este post o siempre que se utilicen palabras ofensivas.

COMENTARIO PARA ESTE POST

Imagen mínimo: 300x300 - Formato: jpg o png - Tamaño máximo: 10Mb

CAPTCHA code