Como vimos hace poco, hay diversos estados de pedido en WooCommerce, y también aprendimos que, por defecto, las pasarelas de pago suelen asignar un estado de pedido por defecto a los pedidos realizados por los clientes.
Estos estados de pedido por defecto asignados por las pasarelas de pago más populares son los siguientes:
- Transferencia bancaria – En espera
- Cheque – En espera
- Contra reembolso – En espera
- Stripe – Procesando
- PayPal – Procesando
- RedSys – Procesando
Pero ¿y si tú prefieres cambiar esos estados de pedido por defecto de las distintas pasarelas?
Podrías por ejemplo, cambiarlas a:
- Transferencia bancaria – Pendiente
- Cheque – Pendiente
- Contra reembolso – Pendiente
- Stripe – Completado
- PayPal – Completado
- RedSys – Completado
Y simplificarías procesos a la hora de gestionar los pedidos de WooCommerce.
Cómo cambiar el estado de pedido de las pasarelas de pago
Si estás decidido, solo necesitarás añadir unas líneas de código a tu instalación de WooCommerce, como explicaba en esta sencilla guía de cómo y dónde copiar y pegar códigos en WordPress.
El código sería como este:
/* Cambiar estado de pedido de transferencias bancarias */ add_filter( 'woocommerce_bacs_process_payment_order_status', 'ayudawp_cambiar_estado_pedido_transferencias', 9999, 2 ); function ayudawp_cambiar_estado_pedido_transferencias( $status, $order ) { return 'pending'; }
Este código en concreto cambiará el estado de pedido por defecto de los pagos mediante transferencia bancaria (woocommerce_bacs_process_payment_order_status) al estado de pendiente (pending).
Cómo adaptar el código de ejemplo
En el código de ejemplo anterior, además del nombre de la función personalizada que hace referencia a la utilidad del código (ayudawp_cambiar_estado_pedido_transferencias), que deberías cambiar de nombre según el uso que vaya a tener, lo importante son estos 2 elementos:
- El filtro
woocommerce_ID-DE-LA-PASARELA-DE-PAGO_process_payment_order_status, en el que deberás cambiar el ID de la pasarela de ejemplo (bacs, para las transferencias bancarias, por el ID adecuado de cada pasarela. - La acción de retorno, que será el nuevo estado (en el ejemplo
pending)
Los IDs de las pasarelas de pago más habituales, y el filtro para cada una, que puedes adivinar en la URL cuando la estás gestionando, son estos:
- Transferencia bancaria (
bacs) –woocommerce_bacs_process_payment_order_status - Contra reembolso (
cod) –woocommerce_cod_process_payment_order_status - Cheque (
cheque) –woocommerce_cheque_process_payment_order_status - PayPal (
paypal) –woocommerce_paypal_process_payment_order_status - Stripe (
stripe) –woocommerce_stripe_process_payment_order_status - RedSys (
redsys) –woocommerce_redsys_process_payment_order_status - Bizum (
bizumredsys) –woocommerce_bizumredsys_process_payment_order_status
Y los códigos de estados de pedido a los que puedes cambiar son estos:
- En espera –
on-hold - Pendiente –
pending - Procesando –
processing - Completado –
completed - Cancelado –
cancelled - Reembolsado –
refunded - Falló –
failed
Y aquí tienes unas capturas de dónde puedes verlos:
Otro ejemplo de cambio de estado de pedido de pasarela de pago
Para que veas cómo aplicar el código para cambiar el estado de otra pasarela de pago, aquí tienes cómo haríamos para que los pedidos realizados con Stripe, en vez de quedar en estado de procesando, su estado por defecto después del pedido sea el de completado.
/* Cambiar estado de pedido de Stripe */ add_filter( 'woocommerce_stripe_process_payment_order_status', 'ayudawp_cambiar_estado_pedido_stripe', 9999, 2 ); function ayudawp_cambiar_estado_pedido_stripe( $status, $order ) { return 'completed'; }
Espero haberlo explicado bien y de manera sencilla, y que con esta sencilla guía seas capaz de decidir tú el estado de pedido por defecto para la distintas pasarelas de pago activas en tu tienda online con WooCommerce.
¿Te gustó este artículo? ¡Ni te imaginas lo que te estás perdiendo en YouTube!








Hola Fernando, gracias por tu ayuda.
Puse mi código al final del functions.php de mi plantilla hija de la siguiente forma:
add_filter( ‘woocommerce_wompi_process_payment_order_status’, ‘cambiar_estado_pedidos_wompi’, 9999, 2 );
function cambiar_estado_pedidos_wompi( $status, $order ) {
return ‘on-hold’;
}
Estoy usando una pasarela de pagos llamada Wompi y quiero que cuando se cree el pedido con ésta pasarela quede inicialmente con estado ON-HOLD y no como PENDIENTE DE PAGO.
Pero no me funcionó.
Hay algo más que deba colocar o de pronto algo que haya puesto mal?
Quedo pendiente
Hola, me paso lo mismo, puse el codigo para pago contrareembolso, pero no me funcionó. yo lo puse en CSS adicional:
/* Cambiar estado de pedido de contra reembolso */
add_filter( ‘woocommerce_cod_process_payment_order_status’, ‘ayudawp_cambiar_estado_pedido_reembolso’, 9999, 2 );
function ayudawp_cambiar_estado_pedido_reembolso( $status, $order ) {
return ‘on-hold’;
}
Hola Andrés, en CSS adicional no creo que te funcione.
A mi me funcionó colocándolo en el functions.php del tema hijo (del child). El código que puse fue el siguiente por si te sirve:
function change_order_status( $order_id ) {
if ( ! $order_id ) {return;}
$order = wc_get_order( $order_id );
if( ‘pending’== $order->get_status() ) {
$order->update_status( ‘wc-on-hold’ );
}
}
add_action(‘woocommerce_thankyou’,’change_order_status’);
De esa forma me quedan siempre en ESPERA (on hold) para los pedidos que son aprobados por la pasarela de pagos. Ya tendrías que buscar es cómo se debe llamar para lo del contraentrega y cambiar lo que yo tengo de wc-on-hold.
Espero que te sirva