Hay una forma nativa y útil de obtener el último pedido de un cliente de WooCommerce: wc_get_customer_last_order ($ customer_id)
Esta vez, quiero escribir algún código personalizado para obtener el segundo último pedido. De hecho, reutilizaremos la mayoría del código de función anterior y lo cambiaremos ligeramente. ¡Disfrutar!
Php Snippet: Obtenga el segundo pedido de WooCommerce Cliente último
Tenga en cuenta la única diferencia menor del código «Última orden»:
LIMIT 1 , 1
Este obtiene el segundo último registro dentro de la base de datos (el segundo «1» es el desplazamiento).
Para devolver el segundo último pedido, use bbloomer_get_second_last_order_cot (123)donde «123» es la identificación del cliente. Este fragmento ya es compatible con HPO.
/** * @snippet Get Customer Second Last Order * @how-to businessbloomer.com/woocommerce-customization * @author Rodolfo Melogli, Business Bloomer * @compatible WooCommerce 8 * @community https://businessbloomer.com/club/ */ use AutomatticWooCommerceUtilitiesOrderUtil; function bbloomer_get_second_last_order_cot( $customer_id ) { global $wpdb; $order_statuses_sql = "( '" . implode( "','", array_map( 'esc_sql', array_keys( wc_get_order_statuses() ) ) ) . "' )"; if ( OrderUtil::custom_orders_table_usage_is_enabled() ) { $sql = $wpdb->prepare( 'SELECT id FROM ' . OrdersTableDataStore::get_orders_table_name() . " WHERE customer_id = %d AND status in $order_statuses_sql ORDER BY id DESC LIMIT 1 , 1", $customer_id ); $second_last_order_id = $wpdb->get_var( $sql ); } else { $second_last_order_id = $wpdb->get_var( "SELECT posts.ID FROM $wpdb->posts AS posts LEFT JOIN {$wpdb->postmeta} AS meta on posts.ID = meta.post_id WHERE meta.meta_key = '_customer_user' AND meta.meta_value = '" . esc_sql( $customer_id ) . "' AND posts.post_type = 'shop_order' AND posts.post_status IN $order_statuses_sql ORDER BY posts.ID DESC LIMIT 1 , 1" ); } if ( ! $second_last_order_id ) { return false; } return wc_get_order( absint( $second_last_order_id ) ); }