Ticker

6/recent/ticker-posts

Ad Code

Responsive Advertisement

Cómo cancelar automáticamente pedidos en WooCommerce

Cuando tienes una tienda online y no quieres quedarte sin stock de ciertos productos puede ser un problema que haya clientes que no terminen de procesar sus pedidos, con lo que estarían bloqueando inventario del que ni ellos, ni otros clientes, pueden comprar.

estados de pedido woocommerce

Imagina que tienes un producto del que solo tienes 5 existencias y un cliente realiza un pedido justo por esas 5 existencias que quedan. Hasta que no termine el proceso de pago completo, hasta que no se procese o complete el pedido, tu producto quedaría sin existencias, sin que lo pueda comprar nadie más. Ahora imagina que ese cliente te deja bloqueado, sin terminar de procesar (pagar) el pedido varias horas, o incluso varios días.

Vamos a ver cómo evitar este tipo de situaciones…

Cómo poner un límite máximo de tiempo de retención de pedidos

Un ajuste que debemos configurar siempre, teniendo claro para qué sirve, es el del periodo de retención de pedidos, de manera que nadie pueda dejarte sin stock de productos por motivos como los descritos anteriormente.

Para ello, en los ajustes de inventario de productos de WooCommerce, hay una juste llamado «Mantener el inventario (para pedidos pendientes de pago) durante x minutos» que sirve para definir a partir de cuánto tiempo un pedido se marcará como cancelado, en el caso de que el cliente no termine de procesar el pago del mismo.

ajustes woocommerce mantener inventario

Si dejas el ajuste a cero no habrá ningún tiempo máximo de retención, y te puedes quedar sin existencias, sin vender nada, pero por otra parte, si pones un periodo de retención demasiado breve, podrías estar impidiendo que tus clientes realicen el pago normalmente. Esto es especialmente importante en el caso de pasarelas de pago offline, como la transferencia bancaria, cheque, contra reembolso, etc.

Lo que hace este ajuste es que, si un pedido excede el límite de tiempo (en minutos) establecido, se cancela automáticamente el pedido, y se restituye la cantidad de existencias del pedido al inventario de stock del producto, quedando disponible para otros clientes.

Así que revisa estos ajustes de WooCommerce, piensa en qué pasarelas de pago tienes activas, o sea, cuánto tiempo necesitarán tus clientes para terminar normalmente un pedido y si, por ejemplo, solo tienes pasarelas de pago puramente online (tarjetas, PayPal, etc.) puedes con seguridad poner un periodo de retención de menos de 1 hora, por ejemplo.

Ahora bien, si tus clientes pueden pagar contra reembolso, o por transferencia, entonces tendrás que asumir el riesgo y utilizar otras técnicas para evitar quedarte sin existencias, como tener siempre de sobra, o limitar la cantidad de productos por pedido.

Perooooo … aunque este ajuste es una muy buena herramienta para cancelar automáticamente pedidos, hay situaciones en las que no podrás usarlo…

Cómo poner un límite máximo de tiempo de retención de pedidos según el estado del pedido

Un ejemplo muy claro es que con el ajuste de WooCommerce no puedes especificar para qué estado del pedido cancelarlo tras el periodo de tiempo definido, pero para eso tenemos el power del código.

En este tipo de situaciones aplicaremos las maravillosas funciones de WooCommerce, que nos permiten aplicar condiciones, como en el siguiente código:

/* Cancelar automaticamente pedidos pendientes tras 1 hora */
add_action( 'woocommerce_order_status_pending', 'ayudawp_cancelar_pedidos_pendientes' );

function ayudawp_cancelar_pedidos_pendientes( $order_id ) {
if ( ! wp_next_scheduled( 'ayudawp_cancelar_pedidos_pendientes_una_hora', array( $order_id ) ) ) {
wp_schedule_single_event( time() + 3600, 'ayudawp_cancelar_pedidos_pendientes_una_hora', array( $order_id ) );
}
}

add_action( 'ayudawp_cancelar_pedidos_pendientes_una_hora', 'bbloomer_cancel_order' );

function bbloomer_cancel_order( $order_id ) {
$order = wc_get_order( $order_id );
wp_clear_scheduled_hook( 'ayudawp_cancelar_pedidos_pendientes_una_hora', array( $order_id ) );
if ( $order->has_status( array( 'pending' ) ) ) { 
$order->update_status( 'cancelled', 'Pedido pendiente cancelado tras 1 hora' );
}
}

En este ejemplo de código, si un pedido está en el estado de pendiente (wp_schedule_single_event( time() + 3600) y ha pasado más de 1 hora (if ( $order->has_status( array( 'pending' )), el pedido se cancelará automáticamente.

Cómo no, puedes cambiar las condicionales del código para adaptarlos a tus necesidades.

Enregistrer un commentaire

0 Commentaires