Índice de contenidos

WooCommerce pedido COMPLETADO de forma automática en pasarelas de pago

Cómo modifica WooCommerce el estado de un pedido 

WooCommerce crea automáticamente los pedidos u ordenes cuando un cliente compra un producto en nuestra tienda y completa el proceso de compra. Los pedidos sólo son visibles por el administrador o usuarios con permisos de acceso.

Cuando un cliente completa el proceso de compra, podemos visualizar los pedidos y los detalles de los mismos entrando en la administración de la página y pulsando sobre el menú WooCommerce >> Pedidos

WooCommerce pedido COMPLETADO

Observa que al crear el pedido el plugin ha añadido un ID o identificador único además de otros datos como precio total, fecha de compra, nombre del cliente, email…

A cada orden de compra se le asigna un estado. Este estado asignado depende de la fase en la cual se encuentre el proceso de compra. WooCommerce utiliza los siguientes estados:

  • Pendiente: Orden recibida (el pago no se ha recibido)
  • Error: El pago ha fallado o se ha rechazado (error al efectuar el pago)
  • Procesamiento: Pago recibido y el artículo se ha descontado del inventario. La orden está a la espera de completar el proceso por parte del administrador (proceso que tienes que realizar manual)
  • Completa: Orden cumplida y completa. (pago recibido, pedido enviado… a terminado todo el proceso de compra y venta)
  • En espera: Pendiente de pago. El artículo se descuenta del inventario, pero es necesario confirmar el pago. (para cambiarlo hay que realizar un proceso manual por parte del administrador)
  • Cancelado: Cancelado por un administrador o el cliente. 
  • Reembolso: Esta acción es aplicada por el administrador. (Devolución de un producto)

Puedes ver los diferentes estados de los pedidos de tu tienda si entras en la administración de WordPress  en el menú WooCommerce >> Pedidos, la primera columna indica mediante un símbolo el estado del pedido.

WooCommerce pedido COMPLETADO  

Cuándo WooCommerce NO asigna el estado COMPLETADO a un pedido

PROBLEMA: WooCommerce no asigna el estado COMPLETADO a los pedidos realizados mediante pasarelas de pago (por ejemplo paypal, redsis…), a estos pedidos les asigna los siguientes estados: «en espera» o «procesando«. Para modificar el estado y marcar el pedido como «completado» hay que hacerlo de forma manual entrando en el administrados de WordPress.

SOLUCIÓN: añadir un pequeño código a tu archivo functions.php. Este código o función cambia de forma automática el estado del pedido de procesando o en espera a completado.

(para no perder los cambios de este archivo en futuras actualizaciones lo más recomendable es que trabajes con temas hijos)

Función para cambiar de forma automática el estado de un pedido

Copia y pega el siguiente código

Abre tu archivo functions.php y copia y pega el siguiente código.

Encontrarás el archivo functions.php en la siguiente ruta:

wp-content/themes/tutheme/functions.php

// Actualiza automáticamente el estado de los pedidos a COMPLETADO
add_action( 'woocommerce_order_status_processing', 'actualiza_estado_pedidos_a_completado' );
add_action( 'woocommerce_order_status_on-hold', 'actualiza_estado_pedidos_a_completado' );
function actualiza_estado_pedidos_a_completado( $order_id ) {
    global $woocommerce;
    
    //ID's de las pasarelas de pago a las que afecta, te lo explico a continuación
    $paymentMethods = array( 'bacs', 'cheque', 'cod', 'paypal' );
    
    if ( !$order_id ) return;
    $order = new WC_Order( $order_id );

    if ( !in_array( $order->payment_method, $paymentMethods ) ) return;
    $order->update_status( 'completed' );
}

 

Aclaraciones sobre el código

Funcionamiento del código

add_action( 'woocommerce_order_status_processing', 'cambiar_estado_de_pedidos_a_completado' );

add_action( 'woocommerce_order_status_on-hold', 'cambiar_estado_de_pedidos_a_completado' );

Las dos primeras líneas del código están indicando que cuando un pedido está en estado procesado (woocommerce_order_status_processing) o en espera (woocommerce_order_status_on-hold) entonces se ejecutará la función: function cambiar_estado_de_pedidos_a_completado. La función recibe el ID de la orden ( $order_id ), si el ID existe dentro del array de métodos de pago ($paymentMethods = array( ‘bacs’, ‘cheque’, ‘cod’, ‘paypal’ );), es decir si el pedido se ha pagado con alguno de los siguientes métodos de pago (‘bacs’, ‘cheque’, ‘cod’, ‘paypal’), entonces asignar al pedido el estado «Completado».

Array de ID de métodos de pago

$paymentMethodsID = array( 'bacs', 'cheque', 'cod', 'paypal' );

Este array guarda todos los métodos de pago que tenemos disponibles en nuestra tienda WooCommerce, podemos añadir o quitar algunos métodos de pago según nuestra configuración, lo lógico es que este array coincida con los métodos de pago que estamos usando.

Para ver esto debes ir a WooCommerce >> Ajustes >> Finalizar Compra >> Pedido opciones, navega hacia la parte de abajo de la página y encontrarás la siguiente tabla

Pasarelas pago

en el array debes incluir los nombres de cada método de pago (columna Pasarela ID) que tengan la V en la columna activado.

Los IDs de pasarelas de pago suelen ser los siguientes:

  • Transferencia bancaria directa: ‘bacs’
  • Contra reembolso: ‘cod’
  • Pago con cheque: ‘cheque’
  • PayPal: ‘paypal’
  • PayPal Express: ‘ppec_paypal’
  • Stripe: ‘stripe’
  • RedSys: ‘redsys’

Si trabajas con WooCommerce y necesitas modificar el formulario de envío te puede ser útil el siguiente artículo.

Modificar ajustes de correo electrónico que le llegan al cliente

Al principio del post he explicado como WooCommerce va a asignar a la orden de compra un estado, si el estado asignado es:  procesando, además enviará un email al cliente indicando que su pedido se encuentra en proceso, después nuestra tienda ejecutará la función nueva que hemos añadido y cambiará el estado a completado y enviará un nuevo email al cliente.

El cliente recibirá dos emails seguidos, uno que le indica que el pedido está en proceso y un segundo email que le indica que su pedido está completado.

No tiene sentido que el cliente reciba los dos emails seguidos ya que el estado procesando es un estado de transición y no necesitamos que el cliente reciba ningún email. Para que WooCommerce no envíe este primer email debemos cambiar la configuración en: WooCommerce >> Ajustes >> Correos electrónicos, ir a configuración (ruedita de la derecha) y desmarcar la casilla « Habilitar esta notificación por correo electrónico»

Pedidos-estados

Pedidos-estados

Por último es recomendable realizar pruebas de compras para comprobar que todo funciona correctamente, presta atención al cambio de estado automático y a recibir sólo un email de estado.

Te puede interesar:

WooCommerce eliminar campos de formularios envío y facturación