Truco para actualizar automáticamente el estado de un pedido en WooCommerce a COMPLETADO.

Exceptuando la pasarela de pago de Paypal (si se ha configurado correctamente), todas las demás no actualizan el estado del pedido a «Completado«, sino que lo dejan «En espera» o «Procesando«.

En este caso, lo que buscamos es que todo pedido recibido se considere directamente como un pedido completado. Bien sea porque trabajas con pasarelas de pago instantáneas -es decir, el pago se recibe por adelantado- o porque simplemente no quieres preocuparte de marcar manualmente los pedidos que ya se hayan completado. (Una tarea un tanto engorrosa si recibes un número de pedidos elevado)

Obviamente esta opción se puede configurar a través de plugins, pero los que he encontrado son plugins de pago muy completos que incluyen multitud de funciones más y para el caso que nos ocupa, creo sinceramente que no merece la pena.

La solución que yo te propongo se basa en usar un sencillo código snippet, ahorrándonos así añadir más carga de plugins a la tienda online. Si aún no estás familiarizado con estos códigos y no estás seguro de cómo usarlos, te recomiendo que leas antes este artículo en el que te hablo de cómo hacerlo de forma correcta; Añadir códigos snippet en WooCommerce de forma correcta.

// 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
    $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' );
}

El código anterior se activa en la página de agradecimiento, cuando el cliente ya ha finalizado la compra y se le muestra toda la información con el resumen de su pedido. En ese momento, el código anterior toma el ID del pedido y automáticamente cambia su estado a «Completado«.

El código anterior está configurado para aplicar el cambio de estado a todos los pedidos que se hayan pagado usando cualquiera de las siguientes pasarelas de pago:

  • Transferencia Bancaria Directa (ID = ‘bacs‘)
  • Pago mediante cheques (ID = ‘cheque‘)
  • Pago en entrega (ID = ‘cod‘)
  • Paypal (ID = ‘paypal‘)

Si quieres quitar o añadir nuevos métodos de pago al código anterior, simplemente modifica la siguiente línea:


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

Por ejemplo, si quieres añadir un nuevo método de pago que estés usando en tú tienda, tendrías que modificar el código de la siguiente manera:


     $paymentMethods = array( 'bacs', 'cheque', 'cod', 'paypal', 'ID_nuevo_método_pago' );

Donde ID_nuevo_método_pago será el ID de la nueva pasarela de pago.

Para saber qué ID corresponde a cada pasarela, simplemente entra en «WooCommerce > Ajustes > Finalizar compra > Opciones de pago» y justo al final de la página verás todas las pasarelas habilitadas y sus IDs.

actualizar-estado-pedidos-woocommerce-segun-metodo-de-pago

En la versión actual es necesario entrar a configuración de cada uno de los métodos de pago y fijarse en la última palabra después del igual (=) para saber el ID de cada pasarela.

Con esto ya sería suficiente para hacer el cambio automático del estado del pedido.

Sin embargo, si dejamos los ajustes generales de WooCommerce tal cual están, cuando un cliente realice su pedido, recibirá dos emails al mismo tiempo; uno diciendo que su pedido se está procesando y otro avisando de que su pedido se ha completado.

Lo ideal sería notificarle directamente de que su pedido está completado y no enviarle el primer email para no crear confusión.

¿Cómo se hace esto? Muy sencillo.

Desde tu panel de administración entra en «WooCommerce > Ajustes > Emails > Procesando tu pedido» y desmarca la casilla «Habilitar«. Con esto conseguirás que no se envíe el primer email.

Como ves, la solución que te he propuesto para cambiar el estado del pedido en WooCommerce de forma automática es bien sencilla y sin necesidad de plugins adicionales.

Ni que decir tiene, que si en algún momento quieres volver a modificar el estado de un pedido, lo podrás hacer sin problema desde el panel de edición del pedido.

Publicaciones relacionadas anterior y posterior

Ir al contenido