Oggi parleremo di un interessante snippet, che permette di visualizzare singolarmente, per ogni utente, l’importo di ordini non ancora saldati.
Un utente mi ha fatto notare che attualmente, in woocommerce, si riesce a filtrare tutti gli ordini ma non si riesce a visualizzare il totale complessivo degli ordini non ancora saldati.
Ovviamente ognuno lo gestisce a proprio piacimento, in base agli stati (IN SOSPESO/ IN ATTESA PAGAMENTO/IN LAVORAZIONE)
Allora ho pensato di sfruttare la tabella della lista degli utenti nativa di wordpress, ed aggiungere una funzione che inserisce una colonna con tutti gli importi che un singolo cliente potrebbe aver maturato e non saldato nei vostri ordini.
/** * @snippet Creazione colonna e calcolo somme inevasi ordini woocommerce*/ add_filter( 'manage_users_columns', 'aggiungi_colonna_somma_inevasi_ordini' ); function aggiungi_colonna_somma_inevasi_ordini( $columns ) { $columns['somma_inevasi'] = 'Ordini non pagati'; return $columns; } add_filter( 'manage_users_custom_column', 'aggiungi_colonna_somma_inevasi_ordini_contenuto', 10, 3 ); function aggiungi_colonna_somma_inevasi_ordini_contenuto( $total, $column, $user_id ) { if ( 'somma_inevasi' === $column ) { $customer_orders = get_posts( array( 'numberposts' => - 1, 'meta_key' => '_customer_user', 'meta_value' => $user_id, 'post_type' => array( 'shop_order' ), 'post_status' => array( 'wc-on-hold' )//puoi sostituire o aggiungere con la virgola, in base a come gestisci il non incassato //'wc-on-hold' IN SOSPESO //'wc-pending' IN ATTESA PAGAMENTO //'wc-processing' IN LAVORAZIONE ) ); $total = 0; foreach ( $customer_orders as $customer_order ) { $order = wc_get_order( $customer_order ); $total += $order->get_total(); $orders_count = '<strong style="color:#ca1f1f">' . __( ' € ' ) . $total . '</strong>'; } return $orders_count; } }
Se invece vogliamo far apparire il promemoria della somma di inevasi ogni qualvolta che si entra in un qualsiasi ordine, potete applicare questo snippet
/** * @snippet Creazione e calcolo somme inevasi nel singolo ordine in admin*/ add_action( 'woocommerce_admin_order_data_after_order_details', 'somma_importi_ordini_in_sospeso_per_cliente', 10, 1 ); function somma_importi_ordini_in_sospeso_per_cliente( $order ) { $customer_orders = get_posts( array( 'numberposts' => -1, 'meta_key' => '_customer_user', 'meta_value' => $order->get_customer_id(), 'post_type' => 'shop_order', 'post_status' => array('wc-on-hold'),//puoi sostituire o aggiungere la virgola, in base a come gestisci il non incassato //'wc-on-hold' IN SOSPESO //'wc-pending' IN ATTESA PAGAMENTO //'wc-processing' IN LAVORAZIONE ) ); $count = 0; $total = 0; if (!empty($customer_orders)) { foreach ($customer_orders as $customer_order){ $order = wc_get_order($customer_order->ID); $total += $order->total; } $orders_count = '<strong style="color:#ca1f1f">' . __( 'Complessivo in EURO di ordini non ancora pagati: € ' ) . $total . '</strong>'; echo'<br clear="all"> <p>' . $orders_count . '</p>'; ?> <p class="form-field form-field-wide wc-customer-custom">Si riferisce allo stato sospeso <?php echo wc_help_tip("Stato wc-on-hold"); ?></p> <?php } else { return 0; } }
Sostanzialmente, a differenza del primo snippet, abbiamo dichiarato in $order->get_customer_id()
Lascia un commento