Cómo permitir a los clientes cancelar sus pedidos en WooCommerce

El problema

Por defecto, WooCommerce permite a los clientes cancelar ellos mismos sus pedidos solo si están pendientes, pero no lo permite si el pedido está en cualquier otro estado: procesando, completado, en espera, etc.

Ahora bien, se pierde mucho tiempo si el cliente quiere cancelar un pedido en cualquier otro estado, al no permitirle hacerlo a él mismo. Tendría que contactar con el gestor de la tienda – si está visible algún método de contacto – y luego tener que buscar el pedido, cancelarlo manualmente, etc.

Si tu tienda tiene muchas ventas y quieres permitir a los clientes la posibilidad de cancelar sus pedidos ellos mismos en otros estados del pedido distintos del de «Pendiente» te toca añadir esta funcionalidad, no incluida en WooCommerce como te decía.

La solución

Para incluir esta funcionalidad tenemos que usar un código que permita la cancelación de pedidos para otros estados de pedido, aparte del de «pendiente», y que, además, nos permita definir algunos límites, como por ejemplo un límite de tiempo para poder cancelar un pedido.

Aquí tienes un código de ejemplo:

/* Permitir al cliente cancelar el pedido */
add_filter( 'woocommerce_valid_order_statuses_for_cancel', 'ayudawp_cancelar_pedidos', 10, 2 );
function ayudawp_cancelar_pedidos( $statuses, $order ){
$custom_statuses = array( 'completed', 'pending', 'processing', 'on-hold', 'failed' ); //Estados permitidos para cancelar
$duration = 30; //Antiguedad maxima del pedido en dias
if( isset($_GET['order_id']))
$order = wc_get_order( absint( $_GET['order_id'] ) );
$delay = $duration*24*60*60;
$date_created_time = strtotime($order->get_date_created());
$date_modified_time = strtotime($order->get_date_modified());
$now = strtotime("now");
if ( ( $date_created_time + $delay ) >= $now ) return $custom_statuses;
else return $statuses;
}

En el código anterior hay 2 líneas que seguramente querrás modificar para adecuarlas a tus necesidades:

  • $duration = 30; – Esta es la antigüedad en días del pedido para que el cliente vea el botón de cancelación y pueda cancelar fácilmente el pedido.
  • $custom_statuses = array( 'valor' , 'valor'); – Aquí debes poner un valor para cada estado del pedido en el que se mostrará el botón, y la posibilidad de cancelar el pedido.

Dependiendo de los límites que definas en estos campos se mostrarán o no los botones de cancelar los pedidos en la página de la cuenta del cliente.

Dónde puedo pegar este código

Puedes añadir este código en varios sitios de tu instalación WordPress y hacerlo de varias maneras. En esta guía te explico todas las posibilidades:

Cómo y dónde pegar en WordPress códigos PHP, JS, CSS y funciones que encuentres por ahí

(4 votos, promedio: 5) Valora este artículo para ayudar a mejorar la calidad del blog

¿Te gustó este artículo? ¡Ni te imaginas lo que te estás perdiendo en YouTube!

Sobre el autor

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Información base sobre privacidad:
  • Responsable: Fernando Tellado ([email protected])
  • Fin del tratamiento: Moderación de comentarios para evitar spam
  • Legitimación: Tu consentimiento
  • Comunicación de los datos: No se comunicarán los datos a terceros salvo por obligación legal
  • Derechos: Acceso, rectificación, portabilidad, olvido

 

Ir arriba Ir al contenido