Woocommerce - cambiar el estado del pedido de en espera a pago pendiente

1 mar 2017, 14:43:36
Vistas: 33.7K
Votos: 0

Estoy tratando de automatizar el cambio en el estado del pedido de "en espera" a "pago pendiente" una vez que un vendedor del producto ha marcado un pedido como completado. Actualmente, el estado predeterminado es "en espera" cuando se crea un pedido y solo una vez que el producto se entrega se debe requerir el pago. ¿Es posible actualizar al estado "pendiente" después de que se haya realizado una acción?

0
Todas las respuestas a la pregunta 4
0

Si alguna vez necesitas cambiar el estado del pedido desde PHP, aquí te mostramos cómo hacerlo.

$order = new WC_Order($order_id);

if (!empty($order)) {
 $order->update_status( 'completed' );
}

Valores posibles: processing, on-hold, cancelled, completed

Este código proviene de woocommerce/includes/abstracts/abstract-wc-order.php

3 jul 2017 13:07:01
1

un poco tarde, pero aún difícil de encontrar...

Valores posibles

Basado en https://www.bozzmedia.com/posts/get-know-woocommerce-status-definitions/

"processing, on-hold, cancelled, completed, pending, failed, refunded"

y que está soportado en la clase Order de WooCommerce..
/woocommerce/includes/class-wc-order.php - Alrededor de la línea 108 aproximadamente.

Asumiendo que no usas un plugin capaz de agregar más.

29 may 2018 06:08:03
Comentarios

¿cómo responde a la pregunta?

Mark Kaplun Mark Kaplun
29 may 2018 07:45:32
0

Esto funcionará:

add_filter( 'woocommerce_bacs_process_payment_order_status', function( $status = 'on_hold', $order = null ) {
return 'pending';
}, 10, 2 );

PERO si lo usas, el cambio de estado podría causar que los correos no se envíen después de que llegue un pedido, ya que pasa demasiado rápido de 'on hold' (en espera) a 'pending' (pendiente), y WooCommerce no envía correos en estado 'pending'. Probé esto, y después de unos días los correos ya no se enviaban aunque inicialmente funcionó.

3 oct 2021 22:34:55
8
-1

Sí, solo debes agregar cuando quieras cambiar el estado y añadirlo dentro de esta función.

   add_action('woocommerce_order_status_changed','status_changed_processsing');
   function status_changed_processsing( $order_id, $checkout = null ) {
       global $woocommerce;
       $order = new WC_Order( $order_id );
       if(tu condición va aquí){

           //asignar estado a esa orden
           $order->status = 'pending';
        }
   }
1 mar 2017 14:53:46
Comentarios

Hola sonalip3, ¡gracias por tu respuesta! He añadido mis condiciones, pero el código todavía no funciona... add_action('woocommerce_order_status_changed','status_changed_processsing'); function status_changed_processsing( $order_id, $checkout = null ) { global $woocommerce; $order = new WC_Order( $order_id );
if( $order->status == 'on-hold' && $order->fulfillment_status == 'fulfilled' ){

       //asignar estado a esa orden
       $order->status = 'pending';
    }

}

Gill Gill
1 mar 2017 15:27:17

¿Está entrando en la condición if, lo has comprobado?

Sonali Sonali
2 mar 2017 06:44:17

Lo he probado usando solo la condición de estado 'on-hold' y funciona si cambio la asignación de estado a la orden por: $order->update_status('pending'). ¿Puedo preguntarte? Necesito obtener el fulfillment_status de la tabla woocommerce_order_itemmeta, ¿sabes cómo puedo hacer esto usando el mismo order_id?

Gill Gill
2 mar 2017 10:27:41

No sé qué plugin estás usando para 'fulfillment_status', así que simplemente intenta imprimir $order y revisar el objeto de pedido. La mayoría de veces el objeto $order guarda ese fulfillment_status. Imprime esto antes de la condición: echo '<pre>';print_r($order);exit; . Inténtalo y te dará el objeto de pedido.

Sonali Sonali
2 mar 2017 10:54:15

El plugin es Woocommerce product vendor, de donde viene el fulfillment_status. ¿Cómo puedo ver dónde están los resultados de la impresión para obtener el objeto de pedido?

Gill Gill
2 mar 2017 11:42:30

¿Es un plugin de pago verdad? No lo tengo. Así que simplemente añade esta línea: echo '<pre>';print_r($order);exit; después de esta línea: $order = new WC_Order( $order_id ); y verifica actualizando el estado. Este es el objeto donde debería estar agregado el 'fulfillment_status'.

Sonali Sonali
2 mar 2017 12:16:39

Sí, es un plugin de pago. He agregado este código, pero no puedo ver nada cuando lo ejecuto. ¿Cómo o dónde puedo ver los resultados del print_r echo?

Gill Gill
2 mar 2017 13:39:10

¿Has verificado en la base de datos que tu ID de pedido tiene 'fulfillment_status' en la tabla woocommerce_order_itemmeta?... Porque la tabla woocommerce_order_itemmeta guarda los datos de los artículos del pedido, no de ese pedido en particular.

Sonali Sonali
3 mar 2017 07:44:22
Mostrar los 3 comentarios restantes