Come aggiungere la colonna metodo di pagamento in WooCommerce giovedì, 27 Dicembre 2018 Diciamoci la verità, ogni e-commerce ha esigenze diverse e la gestione di un negozio online non segue sempre le stesse regole. Ma in tutti gli e-commerce che abbiano la possibilità di utilizzare più di un metodo di pagamento, c'è un'esigenza comune: visualizzare già nell'elenco degli ordini di WooCommerce, nella sezione admin, il metodo di pagamento utilizzato dal cliente, senza dover necessariamente aprire la pagina di dettaglio relativa all'ordine stesso. Sarebbe comodo, non trovi? Sommario Aggiungiamo la nuova colonna Filtrare gli ordini per metodo di pagamento Pagina 1 di 5
Aggiungiamo la nuova colonna Il primo passo da eseguire è aggiungere una nuova colonna alla pagina di elenco ordini presente nella sezione admin del tuo WordPress/WooCommerce. Per farlo, basta modificare il file functions.php del tuo tema, che trovi in: wp-content/themes/{nome_del_tema/ che trovi nello spazio FTP del tuo sito ed inserire queste piccole porzioni di codice: // Aggiunge la colonna Metodo di pagamento add_filter( 'manage_edit-shop_order_columns', function( $columns ) { $columns['payment'] = ( 'Payment Method', 'code4life' ); return $columns;, 20 ); // Aggiunge il contenuto della colonna Metodo di pagamento add_action( 'manage_shop_order_posts_custom_column', function( $column ) { global $post; if ( 'payment' === $column ) { $order = wc_get_order( $post->id ); echo $order->get_payment_method_title(); ); // Rende la colonna ordinabile add_filter( 'manage_edit-shop_order_sortable_columns', function( $columns ) { $columns['payment'] = 'payment'; return $columns; ); Qualche assiduo lettore starà avendo una strana sensazione di deja-vu. Se sei tra questi, non hai tutti i torti. Effettivamente, abbiamo già visto come aggiungere una colonna personalizzata in WordPress, ecco perché mi sono limitato a riportarne solamente il codice (con le dovute variazioni); se desideri approfondire o rinfrescare l'argomento, dai un'occhiata a: Aggiungere una colonna personalizzata in WordPress Ecco il risultato finale: Pagina 2 di 5
Pagina 3 di 5
Filtrare gli ordini per metodo di pagamento Abbiamo appena imparato ad aggiungere la colonna Metodo di pagamento all'elenco degli ordini di WooCommerce nel pannello admin di WordPress, ma non sarebbe bello poter filtrare gli ordini proprio in base al metodo di pagamento utilizzato dal cliente? Io lo trovo davvero molto comodo, ecco perché ti spiegherò come fare. Per aggiungere il filtro, è sufficiente inserire sempre nel file functions.php del tuo tema, che trovi in: wp-content/themes/{nome_del_tema/ il seguente codice: // Aggiungo il filtro per argomenti agli articoli add_action( 'restrict_manage_posts', function( $post_type, $which ) { // Applico solamente agli articoli if ( 'shop_order'!== $post_type ) { return; // Recupero i termini della tassonomia $payments = WC()->payment_gateways->get_available_payment_gateways(); // Visualizzo il filtro echo '<select name="payment" id="payment" class="postform">'; echo '<option value="">'. esc_html ( 'All payment methods', 'code4life' ). '</option>'; // Visualizzo le opzioni foreach ( $payments as $payment ) { printf( '<option value="%1$s" %2$s>%3$s</option>', $payment->id, ( ( isset( $_GET['payment'] ) && ( $_GET['payment'] == $payment->id ) )? ' selected="selected"' : '' ), $payment->title ); echo '</select>';, 10, 2 ); Anche in questo caso, una guida simile è stata già approfondita e spiegata in passato: Come filtrare gli articoli di WordPress per tassonomia personalizzata ma nel caso degli ordini di WooCommerce la situazione è leggermente diversa. Infatti, vedrai Pagina 4 di 5
comparire il menu a tendina contenente i metodi di pagamento, ma provando a sceglierne uno, non c'è alcun cambiamento. Come mai? Semplice, rispetto a quanto succede per gli articoli, è necessario aggiungere un'altra funzione, sempre nel file functions.php: // Filtra gli ordini in base al metodo di pagamento scelto add_filter( 'pre_get_posts', function( $query ) { if (! $query->is_main_query()! isset( $_GET['payment'] ) ) { return; $payment = sanitize_text_field( $_GET['payment'] ); $query->set( 'meta_query', array( array( 'key' => '_payment_method', 'compare' => '=', 'value' => $payment, ) ) ); ); ed il gioco è fatto! Ecco finalmente il risultato finale: Pagina 5 di 5