Hola, buenos días,
Tengo un sitio con productos digitales en venta, pero sucede que las compras que son realizadas por Paypal no se completan, quedan en "pendiente de pago" y ya están pagadas.
Quisiera saber si es necesario utilizar un plugin o agregar un código para que este proceso quede automatizado? Utilizo Woocommerce.
Muchas gracias.
Contenido solo visible a usuarios registrados
Como dato adicional al ticket enviado. Son productos digitales para descargar. Como quedan en "pendiente de pago" y no "completado" no llegan al email del cliente para su descarga. Por lo tanto, este proceso hay que hacerlo manualmente. Necesito que quede automatizado.
Gracias.
Hola Isi
Puedes añadir lo siguiente en el archivo functions.php o si utilizas algún plugin para añadir código como puede ser Code Snippets
// 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( 'paypal' ); if ( !$order_id ) return; $order = new WC_Order( $order_id ); if ( !in_array( $order->payment_method, $paymentMethods ) ) return; $order->update_status( 'completed' ); }
Tienes más información en esta entrada del blog:
-> Cambiar estado del pedido en WooCommerce automáticamente
Un Saludo
@pepesolerh
Hola Pepe, gracias por tu ayuda. Seguiré tu recomendación.
Saludos!
@pepesolerh
Hola Pepe, me salé error. Copié todo el texto de código tal cual.
Error:
Los cambios en tu código PHP se han revertido debido a un error en la línea 838 del archivo wp-content/themes/cocco/functions.php. Por favor, arréglalo y trata de guardar de nuevo.
Cannot redeclare actualiza_estado_pedidos_a_completado() (previously declared in wp-content/plugins/code-snippets/php/snippet-ops.php(581) : eval()'d code:4)
Ésta es la línea 838:
function actualiza_estado_pedidos_a_completado( $order_id ) {
Hola Isi
Este es el error:
PHP Fatal error: Cannot redeclare actualiza_estado_pedidos_a_completado()
Lo que te indica es que ya está declarada esa función, es posible que la tengas en el plugin de Code Snippets para otra pasarela o que la tengas en el archivo functions.php
Revisa los códigos que tienes en Code Snippets y comprueba si ya esta declarada esa función en algún otro bloque de código.
Para que dominio es la consulta ? porque no veo que tengas instalado Code Snippets en el dominio miapsicologiainfantil
Un Saludo
@pepesolerh
Hola Pepe, efectivamente tengo el plugin de Code Snippets instalado en este dominio, está activo y tiene el mismo texto de código que me compartiste. Entonces, por qué no funciona? Cuál podría ser la causa?
Hola Isi,
Por favor muestranos como estas colocando el codigo, ademas tal como menciona mi compañero puede que ya estes empleando un fragmento de codigo que declare dicha funcion, es por ello el motivo del error, puedes validar que este no sea el caso?
Quedamos atento
Saludos!
@bruno-vichettih
Hola Bruno, gracias por tu respuesta. Comparto el código que tengo:
// 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( 'paypal', 'transbank_webpay_plus_rest' );
if ( !$order_id ) return;
$order = new WC_Order( $order_id );
if ( !in_array( $order->payment_method, $paymentMethods ) ) return;
$order->update_status( 'completed' );
}
Hola Isi,
He probado el codigo que nos compartes y se implementa sin problemas con Code Snippets
Has validado si tienes otros fragmentos de codigo que puedan declarar una funcion igual a la que ya esta presentada en el codigo actual?
Tambien puede ser algun conflicto de plugins o tema activo, es necesario descartar para encontrar la causa
Saludos!
Hola Bruno, gracias por tu ayuda. Haré una nueva revisión, y ante cualquier consulta regreso a este ticket.
Gracias, saludos!
Hola Isi.
Por lo que comentas son productos Virtuales.
Prueba añadiendo lo siguiente :
add_action('woocommerce_thankyou', 'we_autocomplete_virtual_orders', 10, 1 ); function we_autocomplete_virtual_orders( $order_id ) { if( ! $order_id ) return; // Get order $order = wc_get_order( $order_id ); // get order items = each product in the order $items = $order->get_items(); // Set variable $only_virtual = true; foreach ( $items as $item ) { // Get product id $product = wc_get_product( $item['product_id'] ); // Is virtual $is_virtual = $product->is_virtual(); // Is_downloadable $is_downloadable = $product->is_downloadable(); if ( ! $is_virtual && ! $is_downloadable ) { $only_virtual = false; } } // true if ( $only_virtual ) { $order->update_status( 'completed' ); } }
Un saludo