Cómo completar automáticamente los pedidos de WooCommerce cuando pasan al estado Procesando

Publicado: 2019-04-06

Cada sitio de comercio electrónico requiere el seguimiento y la gestión de pedidos, lo que puede ser una tarea bastante desalentadora para el administrador, teniendo en cuenta la cantidad de pedidos que recibe un sitio web de comercio electrónico de alto tráfico promedio por día. Cuando se trata de WooCommerce, se crea un pedido tan pronto como se completa el proceso de pago (consulte el flujo de estado del pedido de WooCommerce a continuación).

Según dónde se encuentre el pedido en la cadena de pago a entrega, se le asigna un estado. WooCommerce, la pasarela de pago y el propietario/administrador de la tienda establecen y/o modifican estos estados en función de dónde se encuentre el pedido.

Antes de echar un vistazo al flujo de pedidos en WooCommerce, definamos cuál es el estado de los pedidos en Woocommerce para el beneficio de los novatos.

¿Qué es el estado del pedido en WooCommerce?

El estado del pedido es una representación del estado actual en el que se encuentra un pedido realizado por el cliente . El estado del pedido en Woocommerce cambia a medida que el pedido se procesa hasta la etapa de entrega o reembolso en el caso de que haya un problema con el producto o los servicios y el propietario de la tienda haya aceptado reembolsar al cliente. Por ejemplo, cuando un cliente realiza un pedido de un determinado producto, inmediatamente se establecerá el siguiente estado del pedido en la secuencia, que es el "Pago pendiente". El pago pendiente se establece por defecto en Woocommerce.

Ahora, echemos un vistazo al diagrama de flujo para una mejor comprensión.

Diagrama de flujo de estado de pedido de Woocommerce

Woocommerce Order Status Flow Chart
Fuente: https://docs.woocommerce.com/document/managing-orders/

Como se ilustra, una vez que se completa con éxito el pago de un pedido, su estado se establece en "Procesando" hasta que el propietario de la tienda lo cambia manualmente a "Completado". Esta es una tarea general para el dueño de la tienda o el administrador, especialmente en los casos en que el volumen de ventas es alto. Una forma de hacer que este proceso sea eficiente es completar automáticamente los pedidos de WooCommerce cuando pasan al estado Procesando. Veamos cómo podemos hacer eso usando un fragmento de código.

Lista completa del estado del pedido en WooCommerce

  • Pendiente de pago: Aparece por defecto cuando se ha realizado el pedido pero no se ha realizado ningún pago.
  • Fallido: Esto indica que el pago no se realizó y fue rechazado.
  • Procesando: Esto indica que el pago se realizó y fue recibido por los propietarios de la tienda y ahora se puede procesar para el envío y la entrega.
  • Completado: Esto indica que todo salió bien y el pedido ahora se ha cumplido y completado.
  • En espera : indica un estado en el que el pedido requiere confirmación por parte del propietario de la tienda.
  • Cancelado : Un estado de pedido "Cancelado" no requiere ninguna otra acción. La cancelación puede ser del administrador o del cliente en algún momento.
  • Reembolsado: el pedido ha sido reembolsado, no se requiere ninguna otra acción

Ahora que entendemos mejor qué es el estado del pedido y su función, veamos por qué puede ser una buena idea actualizarlo.

Configure automáticamente el estado del pedido de WooCommerce como Completado según el método de pago

En la mayoría de los casos, deberá hacer esto solo después de que el pago se haya realizado con éxito, y esto solo es posible cuando el usuario no ha seleccionado la opción Contra reembolso. El siguiente código, cuando se inserta en el archivo functions.php de su tema secundario, establecerá automáticamente el estado del pedido como Completado cada vez que se haya realizado un pago con éxito. Por lo tanto, en todos los casos, excepto cuando el usuario seleccione la opción Contra reembolso, el estado del pedido cambiará automáticamente a Completado.

 add_action('woocommerce_order_status_changed', 'ts_auto_complete_by_payment_method');

función ts_auto_complete_by_payment_method($order_id)
{
  
  if ( ! $order_id ) {
        devolver;
  }

  $producto global;
  $pedido = wc_get_order( $order_id );
  
  if ($pedido->datos['estado'] == 'procesando') {
        $método_de_pago=$pedido->get_método_de_pago();
        if ($método_de_pago!="bacalao")
        {
            $pedido->update_status('completado');
        }
      
  }
  
}

Aquí, usará el enlace woocommerce_order_status_changed para llamar a una función cuando cambie el estado de un pedido. Después de verificar si el pedido tiene el estado Procesando, solo si el método de pago no es Contra reembolso, el estado del pedido cambiará a Completado . WooCommerce tiene cuatro métodos de pago predeterminados, a saber. Transferencia Bancaria Directa (bacs), Pagos con Cheque (cheque), Contra Reembolso (cod) y PayPal (paypal). Según el método de pago para el que esté especificando la condición, deberá utilizar la identificación adecuada, por ejemplo, "bacs", "cheque", "cod", "paypal".

Establezca automáticamente el estado del pedido de WooCommerce como Completado para productos virtuales

Otro caso en el que le gustaría que el estado del pedido se completara automáticamente es cuando el producto o los productos del pedido son productos virtuales. Los productos virtuales son productos que no son tangibles o se pueden descargar. Un ejemplo de esto sería una suscripción de membresía de tienda o un cupón que ofrezca descuentos a quienes hayan comprado la suscripción.

automatically Complete WooCommerce orders when they go to the Processing status - Virtual Product Example - Store Membership
Ejemplo de un Producto Virtual

Una suscripción de membresía de tienda puede no tener una forma tangible, sino una fecha de vencimiento. Los productos descargables, como el software o incluso las entradas electrónicas de cine, también son productos virtuales, ya que no tienen una presencia o forma fuera de línea. Con la mayoría de los productos virtuales, nunca existe la opción de "Pago contra reembolso". Los pagos se realizan en el momento y, por lo tanto, sería seguro no incluir la condición de verificar los métodos de pago utilizados, sino solo agregar una condición para verificar si todos los productos del pedido son productos virtuales.

 add_action('woocommerce_order_status_changed', 'ts_auto_complete_virtual');

función ts_auto_complete_virtual($order_id)
{
  
  if ( ! $order_id ) {
        devolver;
  }
  
  $producto global;
  $pedido = wc_get_order( $order_id );
  
  if ($pedido->datos['estado'] == 'procesando') {
    
    $orden_virtual = nulo;

    if (contar ($pedir->obtener_elementos()) > 0) {

      foreach( $pedido->get_items() as $item ) {

        if ( 'elemento_línea' == $elemento['tipo'] ) {

          $_producto = $pedido->obtener_producto_de_artículo( $artículo );

          if ( ! $_producto->es_virtual() ) {
            // una vez que encontramos un producto no virtual, sal del ciclo
            $orden_virtual = falso;
            descanso;
          } 
          más {
            $orden_virtual = verdadero;
          }
       }
     }
   }

    // si todos son productos virtuales, marcar como completados
    if ($orden_virtual) {
      $pedido->update_status('completado');
    }
  }	
}

Aquí, usamos el mismo gancho para llamar a nuestra función ts_auto_complete_virtual . Después de verificar si el pedido está en estado Procesando, debe revisar cada artículo del pedido para ver si es un producto virtual.

Conclusión

Un pedido típico de Woocommerce tiene muchos elementos asociados, como productos, envío, tarifas, etc. Aquí, line_item se refiere al producto. Solo es necesario buscar los productos uno por uno para verificar si son virtuales. Si incluso un artículo no es un producto virtual, el estado del pedido no se marcará como Completado.

Sin embargo, según sus requisitos y utilizando el primer fragmento de código de esta publicación, puede agregar más condiciones para marcar el estado del pedido como Completado. Por ejemplo, si desea marcar el Estado del pedido como Completado incluso para productos no virtuales (si se realizó el pago de estos productos), puede hacerlo agregando una verificación en el método de pago después de que verifique si es un producto virtual. producto. Sin embargo, a través de este fragmento de código, el estado del pedido se establecerá como Completado solo si todos los productos del pedido son productos virtuales.