Recientemente en un proyecto en el que participé hubo un problema con el sitio web y algunos pedidos no se terminaron de completar, quedando en estado de espera o cancelados, sin embargo en la pasarela figuraban como completados.
Generalidades
Lo que se requiere es que los pedidos que se han pagado en la pasarela figuren como completados en WooCommerce.
Una solución seria corregir esto de manera manual el estado de los pedidos de WooCommerce, sin embargo esto se complica si son muchos pedidos.
En este artículo veremos cómo realizar esto a través de código.
Código para cambiar a completado los pedidos
Nos basaremos en un archivo .csv que la pasarela de pago nos brinda en la primera columna de este archivo figuran los IDs de los pedidos que se han pagado.
Recorreremos este archivo línea a línea y extraeremos el ID del pedido, para posteriormente con las funciones de WooCommerce, crear un objeto Order y luego cambiar el estado.
add_filter( 'the_content', 'dcms_process_orders' );
function dcms_process_orders( $content ) {
$file_path = ABSPATH . 'lista_ordenes.csv'; //Cambiar por el nombre de tu archivo
$page_slug = 'procesar-pedidos'; //Cambiar por el slug de tu página
if ( ! is_page( $page_slug ) || ! file_exists( $file_path ) ) {
return $content;
}
// Open file
$f = fopen( $file_path, "r" );
// Get header
$header = fgetcsv( $f, 1000 );
// Get body
while ( $line = fgetcsv( $f ) ) {
$order_id = $line[0];
$order = wc_get_order( $order_id );
if ( ! $order ) {
continue;
}
$order->set_status('completed');
$order->save();
}
fclose( $f );
return $content;
}
En el código anterior:
- Usaremos la carga de una página con slug «procesar-pedidos» para ejecutar el código
- Usamos el filtro «the_content» para antes que se muestre el contenido se ejecute el código
- Necesitaremos cambiar la variable $file_path que indica la ruta del archivo .csv
- Validamos si estamos en la página correcta y si el archivo .csv existe
- Abrimos el archivo para lectura, obviamos la primera línea que es la cabecera
- Leemos el archivo a través de un while, vamos obteniendo por cada línea el ID del pedido
- Obtenemos el objeto de orden, cambiamos el estado y grabamos los cambios
- Finalmente cerramos el archivo y retornamos el contenido de la página
Conclusión
Como has podido comprobar es posible realizar cambios a las órdenes de WooCommerce desde un listado en un archivo .csv, en este artículo hemos visto como cambiar el estado, pero de manera similar podemos realizar otro tipo de cambios.
La entrada Cambiar el estado de pedidos de WooCommerce a través de código es un artículo reciente del sitio DecodeCMS.
0 Commentaires