Come aggiungere la colonna metodo di pagamento in WooCommerce

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?
- Leggi l'articolo, ti bastano solo 1 minuto, 19 secondi
Sei di fretta? Scarica il PDF e consultalo quando vuoi!
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:
Ecco il risultato finale:
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:
ma nel caso degli ordini di WooCommerce la situazione è leggermente diversa. Infatti, vedrai 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:
ho inserito il codice ma si è rotto il sito.
Forse va aggiornato?