Avisos
Vaciar todo

Pedidos virtuales en completado y pedidos físicos procesando  

 
Ana
 Ana
Honorable Member

Hola,

Espero que esteis bien. 🙂

 

Hay alguna forma de que cuando alguien compre un producto virtual en la web (como un servicio) al pagar, el estado del pedido quede en completado, pero si compra un articulo físico (para enviar por correo) despues del pago de éste el pedido que de en procesando?

Es para controlar los pedidos de productos reales.

Los virtuales con que quede en completado es suficiente.

 

Quedo a la espera de vuestra ayuda.

Gracias!

Ana

 

 

 

 

Contenido solo visible a usuarios registrados

Citar
Respondido : 25/05/2022 12:36 pm
Karen Rios
 Karen Rios
Soporte CMS Webempresa Moderator

Hola Ana, 

En este caso puedes verificar si el siguiente plugin te permite completar los pedidos virtuales automáticamente como deseas -> https://wordpress.org/plugins/autocomplete-woocommerce-orders/

Una vez lo instalas ve al apartado de WooCommerce -> Ajustes Completar automáticamente los pedidos y configurar que tipo de pedidos se deben autocompletar, en tu caso pedidos pagos virtuales

image

Guarda los cambios y revisa si al resalizarse un pedido virtual este se marca como completado automaticamente. 

Un Saludo 

ResponderCitar
Respondido : 25/05/2022 1:12 pm

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

Ana
 Ana
Honorable Member

Hola Karen, 😊 

Gracias por tu ayuda.

He puesto el plugin y activado como has dicho, pero tanto si hago pedidos virtuales como no virtuales me aparece el pedido

como completado.  Debería salir el producto virtual completado y el fisico como pendiente, pero no los dos completados.

Que puede fallar? 

cobro productos
config plugin pago

 

Quedo pendiente de tu ayuda.

Muchas gracias por adelantado  🙂

Ana

 

 

ResponderCitar
Respondido : 25/05/2022 3:42 pm
Karen Rios
 Karen Rios
Soporte CMS Webempresa Moderator

Hola Ana, 

Entiendo, en este caso probemos lo siguiente, desactiva el plugin de autocompletar órdenes y prueba añadir el siguiente código en el function.php de tu tema (preferiblemente un tema hijo) o a través de un plugin como code snippets

add_filter( 'woocommerce_payment_complete_order_status', 'auto_complete_virtual_orders', 10, 3 );

function auto_complete_virtual_orders( $payment_complete_status, $order_id, $order ) {
$current_status = $order->get_status();
// We only want to update the status to 'completed' if it's coming from one of the following statuses:
$allowed_current_statuses = array( 'on-hold', 'pending', 'failed' );

if ( 'processing' === $payment_complete_status && in_array( $current_status, $allowed_current_statuses ) ) {

$order_items = $order->get_items();

// Create an array of products in the order
$order_products = array_filter( array_map( function( $item ) {
// Get associated product for each line item
return $item->get_product();
}, $order_items ), function( $product ) {
// Remove non-products
return !! $product;
} );

if ( count( $order_products > 0 ) ) {
// Check if each product is 'virtual'
$is_virtual_order = array_reduce( $order_products, function( $virtual_order_so_far, $product ) {
return $virtual_order_so_far && $product->is_virtual();
}, true );

if ( $is_virtual_order ) {
$payment_complete_status = 'completed';
}
}
}
return $payment_complete_status;
}

Guarda los cambios y revisa si con ello solo se marca como completado los productos que se encuentren asignado como virtual

Revisa esto y nos comentas como ha ido todo

Un Saludo 

 

ResponderCitar
Respondido : 25/05/2022 4:01 pm

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

Ana
 Ana
Honorable Member

Hola Karen,

Puse el código en functions.php del theme child, pero no funciona  🙁

Pasa igual

Que puede pasar?

modo pago
filezilla 1
code functions

 En la pasarela de pago Redsys tengo configurado en completado, no se si eso influye en algo.

pagos woo

 

Gracias

Ana

 

ResponderCitar
Respondido : 25/05/2022 4:31 pm
Bruno
 Bruno
Soporte CMS Webempresa Moderator

Hola Ana,

Para poder validar el código anteriormente compartido por mi compañera si no ha ejecutado su acción como lo esperado editando el archivo functions.php te sugiero que lo agregues por medio de un fragmento de código con el plugin ya sugerido https://es.wordpress.org/plugins/code-snippets/

Si aun asi sigue sin funcionar puedes probar 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' );
}
}

Por ultimo si ninguna de estas 3 opciones soluciona del todo lo que deseas puede que la configuración de Redsys tenga que ver y de cierta manera omita los cambios de estatus de los productos y en este caso estaríamos condicionados por esta acción.

image

Saludos!

ResponderCitar
Respondido : 25/05/2022 4:49 pm

Cursos Gratuitos WordPress

Ana
 Ana
Honorable Member

Hola Bruno,

Pues no hay manera 😤 

Lo he probado con el plugin code-snippets, con el otro código en functions.php, e incluso por si acaso he configurado el redsys a "procesando", por si así lo cambiaba en los productos virtuales a "Completado" y ese fuese el motivo, pero nada, entonces lo que pasa es que me marca los dos (virtuales y reales) como "Procesando".

Vaya tela.

 

Cual podría ser el motivo de que no haga caso?

Que desespero 🙄 

Gracias,

Ana

 

 

ResponderCitar
Respondido : 25/05/2022 5:25 pm
Karen Rios
 Karen Rios
Soporte CMS Webempresa Moderator

Hola Ana, 

Es muy raro que no funcione, he realizado varias pruebas y veo que los códigos funciona de forma correcta marcado solo como completado los pedidos procesados, si analizamos el código este añade específicamente una comprobación para marcar como completado solo productos virtuales o descargables, es posible que el plugin de redsys no esté tomando este código. 

En este caso consulta con el soporte del plugin si existe alguna función específica para su complemento que permita completar de forma automática únicamente pedidos virtuales. 

Revisa esto y nos comentas como ha ido todo

Un saludo 

ResponderCitar
Respondido : 25/05/2022 5:32 pm