Saltar al contenido

Ariapsa - Diseño de páginas web México

¿Cómo cambiar estado del pedido en WooCommerce automáticamente?

Dos maneras de hacerlo

PLUGIN

Autocomplete WooCommerce Orders
Por QuadLayers

Instala este plugin y completa automáticamente tus pedidos de WooCommerce. Este plugin es compatible con WooCommerce 2 y 3 y superiores y funciona con todos los principales proveedores de pago, incluidos PayPal, SagePay y Stripe.

Solo pedidos pagados de productos virtuales: solo los pedidos que contengan productos «virtuales» se completarán con el pago correcto.
Todos los pedidos pagados de cualquier producto: los pedidos de cualquier producto (incluso físicos) se convertirán en «Completado» tras el pago correcto.
Todos los pedidos: todos y cada uno de los pedidos se convertirán en «Completados» independientemente del estado del pago.
Ten en cuenta que al activar este plugin en todos los pedidos puede permitir al usuario acceder al producto antes de que haya sido pagado.

 

CÓDIGO

Con el plugin de code snippets 

Acceder al apartado Fragmento de Código Añadir nuevo

Dos maneras:

Autocompletar todas las órdenes en woocommerce

[code]

/**
* Autocompletar todas las órdenes en woocommerce
*/
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' );
}

[/code]

Actualiza automáticamente el estado de los pedidos a Completado con ID’s de Pasarela

Para saber cual es el ID de nuestras pasarelas de pago, para localizar esta información tenemos que ir a WooCommerce Ajustes Pagos donde veremos el listado completo de las pasarelas de pago.

Dos maneras para identificar el ID de nuestras pasarelas, la primera será posicionando el puntero sobre alguna donde veremos una URL que se muestra en la parte inferior izquierda de nuestras pantallas, dentro de esta URL tendremos el ID de nuestra pasarela al final del todo.

La segunda, editando, el ID de nuestras pasarelas es editando el metodo de pago e identificarla desde la URL que nos indica el navegador.

ID populares que se añaden por defecto en WooCOommece

WooCommerce Payments (ID = ‘product‘)
Transferencia Bancaria Directa (ID = ‘bacs‘)
Pago mediante cheques (ID = ‘cheque‘)
Pago en entrega (ID = ‘cod‘)
Paypal (ID = ‘paypal‘)
Redsys (ID = ‘redsys‘)

 

[code]

// 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( 'redsys', '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' );
}

[/code]

 

De esta manera es posible marcar como completado todos los métodos de pago que tenemos disponibles o solo algunos.

Como autocompletar pedidos Virtuales

[code]

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

[/code]

Código alterno

[code]

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();
// Solo queremos actualizar el estado a 'completado' si proviene de uno de los siguientes estados:
$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();

// Crear una matriz de productos en el pedido
$order_products = array_filter( array_map( function( $item ) {
// Obtenga el producto asociado para cada artículo de línea
return $item->get_product();
}, $order_items ), function( $product ) {
// Eliminar no productos
return !! $product;
} );

if ( count( $order_products > 0 ) ) {
// Comprobar si cada producto es '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;
}

[/code]

 

Si deseas modificar el estado por otro texto, solo debes modificar la línea que indica ” $order->update_status( ‘completed’ ); “

Puedes configurar el estado que quieras:

Completo (completed): Pedido finalizado y completo.
Pendiente (pending payment): Pedido recibido, sin recibir aún el pago
Procesando (processing): El pago se ha recibido y se ha actualizado el inventario para eliminar la unidad de artículo. El pedido está pendiente de completar manualmente
En espera (on hold): Pendiente de que se realice el pago. El artículo se descuenta del inventario, pero antes de que se complete hay que confirmar el pago y completarlo (manualmente)
Cancelado (cancelled): Pedido cancelado, ya sea por parte del cliente o de un gestor de la tienda

 

Fuentes: WebEmpresa

 

QR Code
¡Enfoca el QR con tu cámara de fotos!