Cambiar estado del pedido en WooCommerce automáticamente

Cuando alguien hace una compra en tu tienda, WooCommerce añade esa compra automáticamente a la lista de pedidos y le asigna un estado en función del método de pago que haya usado el cliente.

Los estados de los pedidos te permiten identificar en qué fase se encuentra cada uno de ellos, por ejemplo; si un pedido está «En espera«, quiere decir que los productos de ese pedido se han descontado del stock, pero aún no se ha recibido el pago del mismo.

WooCommerce asocia un estado por defecto de pedido a cada pedido recibido, pero no actualiza ese estado aunque tú hayas recibido el dinero y el cliente ya tenga el paquete en su domicilio. Al final eres tú quien tiene que actualizar el estado del pedido a «Completado» de forma manual.

En esta entrada te voy a mostrar un sencillo método para cambiar el estado del pedido en WooCommerce de forma automática.

Truco para actualizar automáticamente el estado de un pedido en WooCommerce a COMPLETADO.

Exceptuando la pasarela de pago de Paypal (si se ha configurado correctamente), todas las demás no actualizan el estado del pedido a «Completado«, sino que lo dejan «En espera» o «Procesando«.

En este caso, lo que buscamos es que todo pedido recibido se considere directamente como un pedido completado. Bien sea porque trabajas con pasarelas de pago instantáneas -es decir, el pago se recibe por adelantado- o porque simplemente no quieres preocuparte de marcar manualmente los pedidos que ya se hayan completado. (Una tarea un tanto engorrosa si recibes un número de pedidos elevado)

Obviamente esta opción se puede configurar a través de plugins, pero los que he encontrado son plugins de pago muy completos que incluyen multitud de funciones más y para el caso que nos ocupa, creo sinceramente que no merece la pena.

La solución que yo te propongo se basa en usar un sencillo código snippet, ahorrándonos así añadir más carga de plugins a la tienda online. Si aún no estás familiarizado con estos códigos y no estás seguro de cómo usarlos, te recomiendo que leas antes este artículo en el que te hablo de cómo hacerlo de forma correcta; Añadir códigos snippet en WooCommerce de forma correcta.

// Actualiza automáticamente el estado de los pedidos a COMPLETADO
add_action( 'woocommerce_order_status_processing', 'actualiza_estado_pedidos_a_completado' );
add_action( 'woocommerce_order_status_on-hold', 'actualiza_estado_pedidos_a_completado' );
function actualiza_estado_pedidos_a_completado( $order_id ) {
    global $woocommerce;
    
    //ID's de las pasarelas de pago a las que afecta
    $paymentMethods = array( 'bacs', 'cheque', 'cod', 'paypal' );
    
    if ( !$order_id ) return;
    $order = new WC_Order( $order_id );

    if ( !in_array( $order->payment_method, $paymentMethods ) ) return;
    $order->update_status( 'completed' );
}

El código anterior se activa en la página de agradecimiento, cuando el cliente ya ha finalizado la compra y se le muestra toda la información con el resumen de su pedido. En ese momento, el código anterior toma el ID del pedido y automáticamente cambia su estado a «Completado«.

El código anterior está configurado para aplicar el cambio de estado a todos los pedidos que se hayan pagado usando cualquiera de las siguientes pasarelas de pago:

  • Transferencia Bancaria Directa (ID = ‘bacs‘)
  • Pago mediante cheques (ID = ‘cheque‘)
  • Pago en entrega (ID = ‘cod‘)
  • Paypal (ID = ‘paypal‘)

Si quieres quitar o añadir nuevos métodos de pago al código anterior, simplemente modifica la siguiente línea:


     $paymentMethods = array( 'bacs', 'cheque', 'cod', 'paypal' );

Por ejemplo, si quieres añadir un nuevo método de pago que estés usando en tú tienda, tendrías que modificar el código de la siguiente manera:


     $paymentMethods = array( 'bacs', 'cheque', 'cod', 'paypal', 'ID_nuevo_método_pago' );

Donde ID_nuevo_método_pago será el ID de la nueva pasarela de pago.

Para saber qué ID corresponde a cada pasarela, simplemente entra en «WooCommerce > Ajustes > Finalizar compra > Opciones de pago» y justo al final de la página verás todas las pasarelas habilitadas y sus IDs.

Actualizar estado pedidos WooCommerce según método de pago

Con esto ya sería suficiente para hacer el cambio automático del estado del pedido.

Sin embargo, si dejamos los ajustes generales de WooCommerce tal cual están, cuando un cliente realice su pedido, recibirá dos emails al mismo tiempo; uno diciendo que su pedido se está procesando y otro avisando de que su pedido se ha completado.

Lo ideal sería notificarle directamente de que su pedido está completado y no enviarle el primer email para no crear confusión.

¿Cómo se hace esto? Muy sencillo.

Desde tu panel de administración entra en «WooCommerce > Ajustes > Emails > Procesando tu pedido» y desmarca la casilla «Habilitar«. Con esto conseguirás que no se envíe el primer email.

Como ves, la solución que te he propuesto para cambiar el estado del pedido en WooCommerce de forma automática es bien sencilla y sin necesidad de plugins adicionales.

Ni que decir tiene, que si en algún momento quieres volver a modificar el estado de un pedido, lo podrás hacer sin problema desde el panel de edición del pedido.

96 comentarios en “Cambiar estado del pedido en WooCommerce automáticamente”

  1. Hola, vendo cursos online y me gustaría que cuando compraran un curso el estado se quedara en procesando y sea yo quien lo marque manualmente a completado ya que tengo que comprobar unos datos de los alumnos antes de dejarles pagar. Ahora cuando hago las pruebas no encuentro la manera de que no se complete automáticamente, ¿sabrías ayudarme?

  2. Hola Antonio. Me quedo muy claro todo, pero tengo una pregunta.
    Esto funciona para webpay plus y webpay oneclick? Intente introducir estos medios de pago con los ID que creo yo eran de la siguiente manera:
    $paymentMethods = array( ‘bacs’, ‘Transbank_Webpay_Plus’, ‘Webpay_Oneclick’ );
    Pero no resultó.
    Sabes cual es el ID para estos medios de pagos?
    Gracias.
    Diego Duran

  3. Buenos días, muchas gracias por el post! Efectivamente Woocommerce ya no muestra las IDs, por lo que he tratado de buscar el ID para el pago con tarjeta de crédito, y he encontrado esta dirección en Woocommerce > Ajustes > Pagos > Todos los métodos de pago > Woocommerce Payments > Gestionar:
    admin.php?page=wc-settings&tab=checkout&section=woocommerce_payments

    Por lo que he deducido que el ID a utilizar es: woocommerce_payments

    Por lo que he modificado el código con esta línea así:
    $paymentMethods = array( ‘bacs’, ‘cheque’, ‘cod’, ‘paypal’, ‘woocommerce_payments’ );

    Y al ir a hacer un pedido, no se ha podido realizar y me ha saltado este mensaje:
    You specified «never» for fields.billing_details.phone when creating the payment Element, but did not pass confirmParams.payment_method_data.billing_details.phone when calling stripe.confirmPayment or stripe.confirmSetup. If you opt out of collecting data via the payment Element using the fields option, the data must be passed at confirm-time.

    Supongo que algo he debido hacer mal… 🙁 Gracias!

    1. Buenas, Santiago
      Tengo el mismo problema con las «ID’s» y *CREO* que es debido a que el ID del metodo de pago se asocia a una pasarela como Stripe o Redsys:
      Siendo entonces la línea:
      $paymentMethods = array( ‘bacs’, ‘cheque’, ‘cod’, ‘paypal’, ‘stripe’, ’redsys’ );

      Dime si te ha funcionado, pero es una suposición, despues de haber trabajado con Prestashop que se complique configurar este punto, hasta llevarlo a código PHP me parece demencial.

      Yo igualmente voy a hacerlo así y te comentaré.

  4. Calamuchita Portátil

    Hola, antes que nada agradecerte por compartir esta excelente función. Necesitaría que para los pedidos hechos en efectivo, cheque o transferencia bancaria queden como pendientes de pago, para que, según tengo configurado, luego de 24hs, si no se cambio el estado, libere el stock. Dime por favor que debería cambiar en este código.
    Saludos.

    1. hola, viene en el listado de las opciones de pago cuando lo configuras en woocomerce, por ejemplo yo utilizo esta forma de pago woo-mercado-pago-basic y con eso resolvi el problema.
      saludos

  5. Buenas tardes,
    me ha sido muy útil, pero una duda: al activar el código, se envía primero el mail de pedido completado y después el de pedido realizado. Habría alguna forma de poder cambiar el orden y que el de pedido completado pasara a ser segundo, que sería el orden «normal»?

    ¡Muchas gracias!

  6. Buen día, habrá alguna manera de que este código sea compatilbe con Tutor LMS? Ya que Tutor LMS no habilita la vista del curso comprado al usuario inmediatamente con el código en este blog, hay que hacerlo manualmente cambiando el estado de pedido de procesando a completado para que recorra el pedido y me imagino que envía algún registro a la base de datos para que habilite el curso comprado por el cliente.

    Desde ya gracias por tu respuesta.

  7. Hola,

    Genial este código. Me surge otra necesidad que me gustaría saber si es posible modificando este código. ¿Se puede automatizar el cambio de estado en función a si se ha comprado un producto en concreto o si se ha aplicado una cuota manual?

    Saludos y gracias

  8. Hola Antonio,
    Enhorabuena por el trabajo que realizas.
    Tengo un plugin de Subscriptio para realizar suscripciones a la web con Woocommerce. El problema es que cuando el cliente paga por Transferencia bancaria el sistema etiqueta el pedido como «Procesando» en lugar de «Pendiente de pago» y el usuario accede a todos los contenidos hasta que manualmente modificamos el estado. He probado el código que facilitas pero no surte efecto.
    Gracias

  9. Hola antonio muchas gracias por el código me es de gran ayuda, te queria consultar hay alguna forma de que este código se ejecute pasado por ejemplo 3 horas después de la compra, un saludo y gracias de nuevo.

    1. Hola Sergio!

      No conozco plugins que lo permitan (eso no quiere decir que no existan), pero se me ocurre que se podría hacer con uno a medida que programe por cada pedido una tarea cron para que se ejecute 3 horas más tarde y en esa tarea se añada ese snippet.

      También te digo que eso no es una buena solución si recibes muchos pedidos al día, porque puedes petar el servidor con tantas tareas programadas.

      Saludos!

  10. Hola,
    Genial tus aportes, quisiera hacer una consulta ya que tengo gestión de stock y necesito que no me reste de «en espera» o que se pase automáticamente a «pendiente de pago» para que luego me vuelva el stock al inventario si el cliente no paga.

  11. Muy interesante y gran aportación!

    Tengo una necesidad adicional…cuando se usa el método de pago «cod» necesito que el email que se envía al cliente, en vez de decir en el título «Tu pedido #XXXX ha sido pagado» diga «Tu pedido #XXXX se ha registrado» pero sólo para este tipo de pago, no en los demás casos.

    Gracias por adelantado

  12. Hola Antonio, llego a woocommerce y redsys hace poco y tengo el problema con los pedidos que me quedan como pendientes de pago y no recibo email ni yo ni el cliente, he provado el codigo (la funcion) y tampoco ha funcionado.
    Uso el woocommerce 4.8.0 y plugin de redsys woocommerce (3.1.1).
    Si me puedes echar un cable, con que me mande un correo seria suficiente, ya me enteraria de que tengo pedidos y manualmente los procesaria pero…

  13. Hola, Antonio.
    Muchas gracias por esta información. Quería hacerte una consulta: he seguido todos los pasos que has dicho (excepto la ruta para llegar a functions.php, que en mi caso es en el editor del tema: wp-admin/theme-editor.php, ¿es correcto hacerlo así?), pero al añadir el código me sale un mensaje que dice que no se puede actualizar y que tal vez haya que usar un archivo FTP. ¿Qué puedo hacer?
    ¡Gracias de nuevo!
    Ramón

  14. Hola, ¿cómo estás? Estoy teniendo un problema con mercadopago y woocommerce.
    El cliente realiza el pago el estado queda como procesado, cuando despacho el producto lo paso a completado manualmente, así tengo registro que este pedido ya está enviado. Pero después de 14 días cuando el dinero se encuentra disponible en mercadopago el estado del pedido vuelve a procesado. Me está generando muchísimos inconvenientes, ya hablé con mercadopago y no tengo respuesta. Por favor si puedes ayudarme te lo agradecería mucho.

    1. Hola Lucas, ¿cómo estás? Tengo el mismo inconveniente que vos en mi web. Productos que manualmente había marcado como «completados» vuelven a figurar como «procesando». Además hace que si era el último producto que tenía en stock vuelva a figurar disponible en la tienda.
      ¿Pudiste solucionarlo? Me sería de gran ayuda saber cómo.
      Desde ya, muchas gracias.

  15. hola antonio, primero que nada quiero agradecerte porque he estado configurando el woocommerce con las ayudas y post de woodemia, asique gracias, y ahora quiera hacerte una pregunta a ver si me podes ayudar… yo tengo una pagina con producto virtual/descargable, y aun no he lanzado el producto, y cuando hago la prueba de pago de paypal sandbox todo funciona bien, exepto que nunca llega un e-mail con el libro pdf de descarga, me explico? osea en la parte de notificaciones del email de prueba me llega el recibo de pago, pero nunca un link con la info para descargar, entonces como puedo hacer para que luego del pago se descargue el producto ? mil gracias, estoy desesperado por lanzar mi producto.

  16. Hola Antonio,
    muchas gracias por tu ayuda!
    Mi duda es sobre dónde incluir el snippet ya que no consigo ver ninguna página de agradecimiento…
    Yo tengo la tienda con pago a la entrega, estoy de pruebas para lanzar ya pero cuando hago compra se queda en procesando y no recibo email…
    Entiendo que tu solución arreglaría esto pero… no sé dónde añadir el snippet.
    Gracias de nuevo, un saludo, Ana

  17. Muy buenas Antonio, buen artículo..

    Tengo una duda, parecida al primer comentario que aparece. La web de una amiga es un woocommerce, y tiene todo bien configurado, envios, emails… El caso es que según ella, antes al realizar un pedido manual, desde el backend, le llegaba un email y ahora no le llega. Yo he estado mirando y no veo nada de que eso sea posible. Le he comentado que igual se podría pasar automáticamente ese pendiente de pago a en espera, como lo ves? Sabrías alguna forma de solucionar este problema?

    También le he comentado que a la derecha, a la hora de crear el pedido, sale la opción de enviar un correo al administrador, o algo así… Se podría tener esa opción marcada por defecto?

    La verdad es que le está volviendo loca, porque si o si quiere recibir ese correo siempre.

    1. Hola Jose!

      Si el pedido está «En espera», no se envío ningún email ni al cliente ni al administrador. Solo se les envía si el pedido pasa a «Procesando» o «Completado».

      Y en esos dos últimos estados si que se envía automáticamente.

      Saludos!

  18. Excelente la info, tu blog ha sido mi mentor! tengo una duda… hay alguna manera de que el administrador reciba un correo, en el primer estado de Pendiente de Pago?, por ejemplo que apenas el cliente le de clic a realizar el pedido y salga la pagina con los detalles de la compre con el boton que te dirije a la pasarela de pago de paypal o payu, ya el administrador este recibiendo un correo sin necesidad de esperar que se complete o decline el pago, por ejemplo cuando el pago es offline y el primer estado es En Espera, tanto el admin como el cliente reciben correos automaticamente.

    1. Hola Alberto!

      Que yo sepa no se puede hacer porque justo ese estado «Pendiente de pago» se activa cuando un pedido se ha realizado, pero el pago aún no se ha recibido. Es decir, si el cliente no clica en el botón de pagar, no llega a activarse ese estado.

      Otra cosa a tener en cuenta es que aunque se pudiese enviar ese email cuando tú dices, si un cliente llegase a la página de pago y no introdujese sus datos, ese email no tendría ninguna información que mostrar salvo las unidades de productos del carrito.

      Saludos!

      1. Hola! Tengo una combinación de learn dash y woocommerce (con la integración)+ woocommerce suscription… cuando el cliente llena el formulario de pedido automaticamente queda logueado o sea puede ver los cursos. Su pedido esta en procesando, le envía el email con usuario sin la contraseña y la orden de pedido.
        He revisado la configuración de la integración en learn dash y tengo todo tal cual.
        Necesito que una vez que complete la orden solo cree el usuario cuando to le de completado y no al realizar la orden. Me ayudas?

  19. Hola Antonio, primero que nada gracias por esta información que nos das, tu trabajo es excelente, yo realmente estoy comenzando con esto de una tienda online a petición de una amiga y sus hermanos, no soy muy diestro en esto, la estamos trabajando con woocomerce en wordpress, y tenemos problemas o una duda no sé si podrías ayudarnos o darnos algún tip, me gustaría saber si existe alguna manera de deshabilitar el botón de COMPRAR que hay en la página del producto de woocommerce una vez pulsado, ya que si por ejemplo alguien pulsa dos veces, se acumula el producto en el carrito, con lo que de esta manera, si al pulsar la primera vez ya quedase el botón como en gris o deshabilitado….ya no haría efecto el que pulsase más veces.

  20. Hola gracias por el tutorial! una pregunta se puede configurar el woocommerce para que todos los pedidos que queden en «pendiente de pago» se cancelen automáticamente tras pasar 1 hora? O sea si el cliente no hace el pago antes de 1 hora el pedido pase a cancelado automaticamente

    1. Hola Junior!

      Para hacer eso basta con que entres en «WooCommerce > Ajustes > Productos > Inventario» y en el campo «Mantener en inventario (en minutos)» pongas 60.

      Espero que te sirva.

      Saludos!

  21. Hola, de antemano muchas gracias esta super bueno este snippet, solo tengo una duda, tengo un modulo PayU Latam para pagos, y la página de respuesta es diferente a la de WooCommerce, es posible cambiar la página de respuesta en el snippet, de que manera se podría hacer?.

    1. Hola Fabian!

      Si deberías de poder hacerlo siempre que PayU Latam te redirija a WooCommerce después de finalizar el pago.

      Solo tendrías que añadir el ID de la pasarela de PayU Latam al snippet.

      Como el panel de los ajustes de las opciones de pago de WooCommerce han cambiado bastante desde que publiqué este post, ahora no se puede ver el ID directamente en el listado de pasarelas.

      Para saber cuál es el ID de una pasarela, simplemente haz clic sobre ella para entrar a su panel de configuración y en la url podrás ver el ID precedido del parámetro section=.

      Por ejemplo, para la pasarela de transferencia bancaria, la url sería así y en negrita te marco el ID:

      /wp-admin/admin.php?page=wc-settings&tab=checkout&section=bacs

      Saludos!

  22. Hola Antonio,

    Tengo un problema en la web y es que cuando se compra con PayPal el estado se pone como «Pendiente de pago». ¿Con este código se soluciona el problema?

    1. Hola Ángel!

      Podría ser una solución, pero debes tener en cuenta que solo funciona si el cliente termina llegando a la página de pedido completado después de pagar en Paypal. Hay casos en los que puede no darse esa situación.

      Saludos!

  23. Hola yo tengo el problema que mis suscriptores realizan el pago de su membresia correctamente mensualmente y dicha membresia se pone en pausa no se activa y tengo que activarla yo cada vez que se cobra una suscripción. Pues esta suscripción se activa pero la membresia se pone en pausa. Por favor necesito ayuda nadie me soluciona el problema.
    Trabajo con woocomerce membresia y Suscripcion. Pasarela de pago stripe.
    Tengo otra web en otro hosting configurada igual y no me da problemas. Saludos y muchas gracias

  24. Hola, tengo una duda, espero puedan ayudarme, ¿hay alguna manera de que la pagina de pedidos de woocommerce se actualice cada que entra un pedido nuevo? ya que para ver los pedidos nuevos tengo que actualizar la pagina manualmente para que aparezca. Gracias.

  25. Hola,
    muchas gracias por ayudarnos con estos tips, tengo puesto este código y en los descargables funciona, pero en un producto variable se queda en pendiente de pago pese a que Paypal dice que lo he recibido, y al intentar cambiarlo manual a completado sale HTTP ERROR 500

    1. Me contesto yo misma, se había cambiado una línea de código, he vuelto a copiar tal cual está aquí y se ha solucionado el problema, mil gracias por compartirlo.

    1. Hola Ángel!

      Así es. El estado «Procesando» quiere decir que el pago se ha recibido correctamente y que se está preparando el pedido para el envío.

      Sien embargo, cuando alguien termina una compra pagando con transferencia o contra reembolso, ese pedido se marca como «En espera» porque aún no se ha recibido el dinero.

      Espero haberte aclarado la duda.

      Un saludo!

  26. Hola,
    Antes que nada felicitarte por tu labor divulgativa. Tengo una duda sobre un proyecto que quiero realizar con WordPress y WooCommerce. Desconozco si existe esta prestación nativa en WooCommerce, lo que quisiera es que cada vez que reciba un pedido se actualice la lista de pedidos, pues por lo que he visto, si tengo la pantalla de pedidos de WooCommerce abierta y recibo un pedido éste no se añade, recibo un email con el nuevo pedido pero quisera poderlo ver también en la pantalla de pedidios sin tener que hacer F5 o refrescar manualmente la pantalla.
    Mil gracias por tu ayuda y una vez más, muchas gracias por tu trabajo!

    1. Hola Héctor!

      Si claro. Sería algo así:

      // Actualiza automáticamente el estado de los pedidos en espera a procesando
      add_action( 'woocommerce_order_status_on-hold', 'actualiza_estado_pedidos_a_procesando' );
      function actualiza_estado_pedidos_a_procesando( $order_id ) {
      global $woocommerce;

      //ID's de las pasarelas de pago a las que afecta
      $paymentMethods = array( 'bacs', 'cheque', 'cod', 'paypal' );

      if ( !$order_id ) return;
      $order = new WC_Order( $order_id );

      if ( !in_array( $order->payment_method, $paymentMethods ) ) return;
      $order->update_status( 'processing' );
      }

      IMPORTANTE: Añade el código usando el plugin Code Snippet para evitar problemas si lo copias mal o el código genera algún error.

      Saludos!

  27. Hola, muy buena la información, tengo una pregunta. Es posible auto completar los pedidos por un articulo o producto en especifico? Gracias

  28. Hola Antonio, quería hacerte una pregunta sobre esta materia.

    A mi me gustaría cambiar el estado de una orden en automático pero en vez de cuando se finalice un pago, se haga efectiva cuando pase un numero determinado de días.

    Por ejemplo: Un estado «Completado» que a los 10 días siguientes de estar completado se pase a estado «Finalizado», o algo así.

    Esto es posible con un código parecido al que enseñas aquí?

    Gracias!!

    1. Hola Victor!

      No conozco ningún plugin que haga eso. Tendrías que desarrollarlo a medida y salvo que sea algo de vital importancia para tu negocio, no creo que te merezca la pena :-/

      Saludos!

  29. Buenas, soy fiel seguidor de rus posts incluso compre tu plugins para configurar envíos y es genial. Tengo un problema y queria saber si sabes a que puede deberse.
    En una web el cliente cuando paga con tarjeta le sale el siguiente mensaje:
    error 501. Mensaje: esta transacción(2031-1)ya se ha procesado, si crees que se trató de un error por favor ponte en contacto con el comercio
    Y en woocommerce sale Pendiente de Pago y luego cancelado, sabes por que puede ser?

    1. Hola Vicente!

      No sabría decirte solo con esa info y sin ni siquiera saber qué pasarela de pago estás usando ni con qué plugin la has integrado en WooCommerce.

      Yo iría a lo fácil, preguntar directamente al soporte técnico del plugin. Ellos te van a resolver la duda mucho más rápido.

      Un saludo!

  30. Hola, ¿cómo puedo hacerlo cuando el método de compra es un cupón?
    he añadido los métodos de compra ‘coupon’ y ‘coupons’, pero no funciona…

    Gracias

  31. Muchas gracias por el aporte. He logrado poner mis pedidos entrantes «En espera»

    add_action( ‘woocommerce_order_status_processing’, ‘actualiza_estado_pedidos_a_completado’ );
    add_action( ‘woocommerce_order_status_on-hold’, ‘actualiza_estado_pedidos_a_completado’ );
    function actualiza_estado_pedidos_a_completado( $order_id ) {
    global $woocommerce;
    //Pasarelas de pago
    $paymentMethods = array( ‘cod’ );
    if ( !$order_id ) return;
    $order = new WC_Order( $order_id );
    if ( !in_array( $order->payment_method, $paymentMethods ) ) return;
    $order->update_status( ‘on-hold’ );
    }

  32. Hola, gran articulo,

    Una pregunta necesito saber los slug de los estados de pedidos y no se donde encontrarlos, sabes donde puedo obtener los slugs de los estados del pedido?

  33. Hola,

    ¿Se podría automatizar el pago con Stripe? Uso tu código para automatizar pagos con paypal, pero he añadido stripe y no funciona. ¿Se podrían añadir Paypay express checkout y stripe?

    Por otro lado, ¿sería posible automatizar los pagos que son de 0€? Las descargas gratuitas que están como productos.

    Muchas gracias.
    Un saludo

    1. Hola Laila,

      Si se debería de poder hacer exactamente igual que con Paypal, pero añadiendo también el ID de la pasarela de pago de Stripe. Asegúrate de que el ID sea el correcto, de lo contrario, no se aplicará.

      Este truco solo sirve cuando están habilitadas las pasarelas de pago. Si el producto es gratuito, entonces no hay pasarelas de pago disponibles y por tanto, no sirve 🙁

      Un saludo!

  34. A mi no me ha funcionado, pero con este otro lo he solucionado:

    /**
    * Auto Complete all WooCommerce orders.
    */
    add_action( ‘woocommerce_thankyou’, ‘custom_woocommerce_auto_complete_order’ );
    function custom_woocommerce_auto_complete_order( $order_id ) {
    if ( ! $order_id ) {
    return;
    }

    $order = wc_get_order( $order_id );
    $order->update_status( ‘completed’ );
    }

    Saludos

      1. utilizando mercado pago, el woocommerce me deja el status de la compra en «procesando pago». Ninguno de los dos snippets me funcionó. Saludos.

  35. Hola William, antes que nada gracias por el articulo. Te consulto, justamente estoy trabajando con la venta de tickets usando como pasarela de pago Mercado Pago de Argentina y todos las compras quedan en «Procesando» (el pago es recibido correctamente), con este código debería cubrir esa falencia y ponerlos en estado «terminado»? Gracias

  36. Hola Antonio,
    Como siempre buen aporte!
    Tengo una duda y creo que puedes orientarme.
    Cuando el cliente paga mediante Paypal, aparte de regresar a la página que se especifique en la configuración de Paypal, ¿sabes si hay alguna forma de saber si el pago fue exitoso? para aprovechar éste valioso código y sólo si el pago fue exitoso cambiar el estado de la orden a completado, además de que al cliente ya no le aparecería el botón de pagar cuando en el listado de pedidos.

    De antemano muchísimas gracias!

    1. Hola William,

      Tendrías que configurar el «Código Identificación de Paypal» tal y como explico aquí.

      El Código de identificación de Paypal es lo que permite a WooCommerce saber si el pago se realizón con éxito o no.

      Saludos!

  37. Hola Antonio,

    Es la primera vez que entro a este blog y por lo visto tiene un excelente contenido, muchas felicidades por tu blog 🙂

    Estuve probando hoy el código, solo que no logré del todo poder cambiar el estatus de mis pedidos cuando hacen la compra via PayPal (‘paypal’) de «Pendiente de Pago» a «Completado» o «Procesando» de forma automática, uso el plugin de «Code Snippets» donde hiciste referencia en el otro post.

    Lo que pude notar fue que al momento de poner una venta en «Procesando» esta se cambiaba automáticamente a «Completado» sin estar en estatus «Procesando» esto lo hice de forma manual lo que puedo sospechar que funciona el Snippet pero no de forma automática.

    Al menos que no este re-direccionando a la página de agradecimiento que en mi caso se muestra algo así(https://imgur.com/a/csSUC)

    No estoy seguro si podría ser el error que no tomará el N° de orden por no redireccionar a esa página.

    Saludos y muchas gracias por tu excelente contenido.

  38. Buenas tardes,

    Lo primero agradecerte tu generosidad por compartir tus conocimientos.
    He seguido tus instrucciones, y no me funciona, incluso he instalado el plugin que dice Iván (woocommerce-autocomplete-order/) y me he quedado atascado en «…ten en cuenta que para que el código haga su trabajo, el cliente debe de llegar a la página de agradecimiento una vez haya completado el pedido.» Ya que comentas que es importante. Al realizar el pedido me sale una pantalla de que el pedido se ha recibido con un resumen de los datos.
    Por favor, ¿Cómo puedo comprobar la pantalla de agradecimiento con el pedido completado?

    1. Hola Luis,

      El código funciona sin problema para las pasarelas de pago que indico en el post, siempre y cuando el cliente termine en la página de pedido recibido (la de agradecimiento). Ten en cuenta que si la pasarela con la que paga el cliente, no coincide con ninguna de las mencionadas en el post, el snippet no hará nada.

      La página que comentas, es la de agradecimiento, así que está bien.

      Yo quitaría el plugin que has mencionado y dejaría solo el snippet para evitar incompatibilidad.

      Saludos!

  39. Hola Antonio muchas gracias aprendo mucho con tus post, tengo un problema con una tienda y es que se completa todo el proceso no se descuenta el inventario, la pasarela de pagos que us es payulatam no se si tenga algo que ver, gracias por tu ayuda

    1. Hola David,

      Eso puede deberse a que el estado de los pedidos sea «Pendiente de pago», el cual no reduce el stock de productos. Tienes que cambiar el estado de los pedidos a «Procesando» y cuando los hayas enviado marcarlos como «Completados». De esta forma se actualizará el stock.

      Saludos!

  40. Genial aporte, Antonio, gracias por simplificarnos un poco la vida para ayudarnos a ir al grano 😉 Lo he usado para un sistema de venta de entradas, los tickets se tenían que enviar automáticamente y no lo hacían hasta estar el pedido completado. Ahora ya funciona. Eres un crack!

    1. Genial! Me alegra mucho que te haya servido 😀

      Por cierto, me gustaría contactar contigo para una colaboración. Te mando un mail hoy.

      Saludos!

  41. Hola Antonio, genial artículo.
    Tengo un problema, a ver si me puedes ayudar. Utilizo el plugin gratuito para el TPV CECA y funciona correctamente pero si cancelo el pago en la página del TPV me dirige igualmente a la página de agradecimiento, contando el pedido como pagado y enviando todos los correos como si el pedido se hubiera realizado.
    ¿Alguna idea de cómo solucionarlo?
    Muchas gracias.

  42. Hola.
    Maravilloso todo lo que compartes. Gracias por todo ello.
    Una pregunta que me nace. Estoy probando un sistema de reserva para un hotel, el plugin es Awebooking y es compatible con Woocommerce, lo cual me sirve para integrar una pasarela de pagos en Colombia. El hecho es que el plugin permite crear las habitaciones como entradas personalizadas y no como productos. Cuando se realiza el checkout, la reserva que se realiza es procesada por woocommerce sin ningún problema. En los informes de Woocommerce no queda traza de ninguna de estas operaciones, todo queda en «Reservas» un apartado del plugin. El hecho es que las transacciones que se realizan por transferencia directa, pagos en el hotel, etc quedan como «pendientes» y la idea es que se procese y queden como «completas». He colocado el código que describes en el post y no me funciona, pero me imagino que se debe a que estas habitaciones no son consideradas como productos y por eso no trabaja bien el codigo, pero como hablas de que aplica para el id de la transacción no se si se pueda hacer alguna modificación o que solución se podría conseguir trabajando estas habitaciones como custom post.
    No se si me he hecho entender y te confundido con la pregunta. Agradezco tu feedback.

    1. Hola Eduardo,

      Tu principal problema reside en que el plugin del que hablas no crea las aplicaciones como productos. Esto limita muchísimo las funcionalidades de WooCommerce.

      Lo único que te puedo decir, es que contactes con el desarrollador del plugin y le expliques tu problema para que lo resuelva en próximas versiones.

      Como digo, no es un problema de WooCommerce sino del plugin Awebooking.

      Siento no poder hacer más.

      Saludos!

    1. Hola esteve,

      El código funciona correctamente.

      ¿Donde lo has insertado? y para ¿qué pasarelas?

      Ten en cuenta que si después de hacer el pago a través de una pasarela externa (tipo Paypal o TPV virtual), el cliente no es redirigido a la página de pedido completado, entonces el código no se ejecuta.

      Saludos!

  43. Te agradezco antionio por este aporte… he estado trabjndo en ellos sin ningun exito, pero tu codigo fue el apropiado, lo implemente en el archivo functions.php del tema que uso.

    Verdaderamente ¡gracias por tu aporte!

  44. Hola Antonio, buenas

    Un gran descubrimiento tu blog.

    Te hago una consulta, en mi caso gestiono una tienda online que tiene algunos productos gratuitos (informes) y tengo el problema de que no se autogestiona de procesando a completado, aunque son gratuitos y debería ser automático.

    ¿Habría alguna forma de adaptar ese código para los que son gratuitos que no pasan por ninguna pasarela de pago? O Woocommerce no lo permite?

    Gracias

  45. Hola Antonio, buenos días.
    Lo primero felicitarte por la web. Es una fuente de consulta permanente y nos ayudas un montón.

    Sobre este post, decirte que lo he implementado en dos web y en una funciona a la perfección pero en otra no. El administrador debe cambiar manualmente el estado del pedido.
    Recientemente hemos instalado y funciona perfectamente un certificado SSL en este site (en el otro también) y no sabemos exactamente cual es el motivo del NO cambio de estado.

    Nos podrías dar un poco de luz, gracias de antemano.

    Saludos y enhorabuena de nuevo.

    1. Hola David,

      Yo lo acabo de probar y el código funciona bien si lo configuras tal y como explico.

      Eso si, ten en cuenta que para que el código haga su trabajo, el cliente debe de llegar a la página de agradecimiento una vez haya completado el pedido.

      Saludos!

  46. Creo que se debería tener en cuenta que muchas compras no llegan a la página de agradecimeinto, puesto que el cliente cierra el navegador tras la confimación del TPV.

    Una solución sería https://wordpress.org/plugins/woocommerce-autocomplete-order/

  47. Hola Antonio muy buen post , quería preguntarte preguntarte si la programación funciona con otros sistemas de pago como «webpayplus» y si la transacción falla o es rechazada esta saldrá aprobada o no .
    saludos.
    gracias.

  48. Buenas, llevo mucho siguiendo esta web pero siempre hay una duda que me invade.. y son los transportistas, intenté por muchos metodos pero no consigo poner transportes como por ejemplo SEUR o Correos para internacional/local, vi el curso de woocommerce tuyo y no figuraba.. algún tip para controlar los transportistas? Muchas gracias, He aprendido mucho contigo.

  49. Hola Antonio de nuevo muy acertado, gracias a tus publicaciones estoy aprendiendo u montón..
    Bueno tengo un pequeño problema si me puedes echar una mano te estaría muy agradecido..

    en mi tienda Online cuando el cliente llega a la hora de pagar en la que tengo 3 métodos de pago que son, Trasferencia bancaria, pago con paypal y contra reembolso: Bueno pues antes cuando pinchabas en cada uno de los métodos de pago y se desplegaba una pestaña y se leía las condiciones de pago de cada una. Pues ahora no me funciona, solo cuando el cliente termina el pago le llega el E-mail de confirmación y las condiciones, si me puedes decir donde hay que tocar. gracias.

Deja un comentario

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

Responsable: Antonio Cantero, siendo la Finalidad; envío de mis publicaciones así como correos comerciales. La Legitimación; es gracias a tu consentimiento. Destinatarios: tus datos se encuentran alojados en mi plataforma de email marketing Active Campaign ubicada en EEUU y acogida al Privacy Shield. Podrás ejercer Tus Derechos de Acceso, Rectificación, Limitación o Suprimir tus datos en contacto@woodemia.com

Scroll al inicio