Avisos
Vaciar todo

Consulta  

 
Isi
 Isi
Honorable Member

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

Citar
Respondido : 28/10/2023 3:57 pm
Isi
 Isi
Honorable Member

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. 

ResponderCitar
Respondido : 28/10/2023 4:00 pm

Cursos Gratuitos WordPress

Pepe
 Pepe
Soporte CMS Webempresa Admin

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

ResponderCitar
Respondido : 28/10/2023 4:09 pm
Isi
 Isi
Honorable Member

@pepesolerh

Hola Pepe, gracias por tu ayuda. Seguiré tu recomendación.

Saludos!

ResponderCitar
Respondido : 28/10/2023 4:13 pm

Isi
 Isi
Honorable Member

@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)

 

ResponderCitar
Respondido : 28/10/2023 4:21 pm
Isi
 Isi
Honorable Member

Ésta es la línea 838:

function actualiza_estado_pedidos_a_completado( $order_id ) {

ResponderCitar
Respondido : 28/10/2023 4:27 pm

optimiza-automaticamente-todas-las-imagenes-de-tu-wordpress

Pepe
 Pepe
Soporte CMS Webempresa Admin

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

 

ResponderCitar
Respondido : 28/10/2023 5:02 pm
Isi
 Isi
Honorable Member

@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?

ResponderCitar
Respondido : 28/10/2023 7:36 pm

wpdoctor-revisa-la-salud-de-tu-wordpress

Bruno
 Bruno
Soporte CMS Webempresa Moderator

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!

ResponderCitar
Respondido : 28/10/2023 7:56 pm
Isi
 Isi
Honorable Member

@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' );
}

ResponderCitar
Respondido : 28/10/2023 8:44 pm

Gestor de Contraseñas - VPN Conexión Segura - Gestor 2FA (Segundo Factor de Autenticación

Bruno
 Bruno
Soporte CMS Webempresa Moderator

Hola Isi,

He probado el codigo que nos compartes y se implementa sin problemas con Code Snippets

image

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!

ResponderCitar
Respondido : 29/10/2023 1:48 am
Isi
 Isi
Honorable Member

@bruno-vichetti

Hola Bruno, gracias por tu ayuda.  Haré una nueva revisión, y ante cualquier consulta regreso a este ticket.

Gracias, saludos! 

ResponderCitar
Respondido : 29/10/2023 1:23 pm

Cursos Gratuitos WordPress

Pepe
 Pepe
Soporte CMS Webempresa Admin

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
ResponderCitar
Respondido : 29/10/2023 2:43 pm