Ticker

6/recent/ticker-posts

Ad Code

Responsive Advertisement

Cambiar el estado de pedidos de WooCommerce a través de código

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.

Desde la pasarela podemos exportar un archivo .csv con los IDs de los pedidos pagados.

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.

Tener en cuenta que el cambio de estado envía un correo, por lo que te recomiendo que revises los límites de envío de correos de tu hosting, o usar un proceso de cron, o un plugin de encolado de correos.
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.

Enregistrer un commentaire

0 Commentaires