Oferta SiteGround Black Friday

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í

¿De cuánta utilidad te ha parecido este contenido?

¡Haz clic en los emoticonos para valorarlo!

Promedio de puntuación 5 / 5. Total de votos: 6

Hasta ahora ¡no hay votos!. Sé el primero en valorar este contenido.

Ya que has encontrado útil este contenido...

¡Sígueme en los medios sociales!

¡Siento que este contenido no te haya sido útil!

¡Ayúdame a mejorar este contenido!

Por favor, dime, ¿cómo puedo mejorarlo?

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

Sobre el autor

4 comentarios en “Cómo permitir a los clientes cancelar sus pedidos en WooCommerce”

  1. Hola Fernado, espero que te encuentres muy bien.
    Primeramente felicitarte por el pedazo de aporte que haces a la comunidad Wordpress.

    Implementé tus indicaciones para el botón de cancelar y funciona de mil maravillas…
    Ahora estoy intentando que el botón aparezca siempre, pero que sólo se encuentre habilitado cuando se cumpla la condición. Entiendo que podría cambiar la apariencia del botón deshabilitado via css, pero de momento no he conseguido generar la instancia. Podrías por favor ayudarme?
    Muchas gracias.

    Saludos!

  2. Hola Fernando!
    Muchas gracias por esta aportación, es de gran ayuda 🙂
    Una pregunta, ¿sería posible que en vez de poner un número días, como plazo para la cancelación, se pusiese un fecha concreta para todos los pedidos?
    Saludos!

  3. Hola fernando lo primero felicitarte por todos los artículos que creas me han salvado en más de una ocasión jejeje.

    Te queria preguntar como podria poner para que en vez de ser 30 días la duracion del botón de cancelación sean 6 horas por ejemplo.

    Y si se podría añadir algún código al mismo tiempo para que cuando se le terminen esas 6 horas se ejecute otro proceso para que cambie el estado de procesando a enviado por ejemplo.

    Un saludo gracias de antemano

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