Home>Guide>Come aggiungere la colonna metodo di pagamento in WooCommerce

Come aggiungere la colonna metodo di pagamento in WooCommerce


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:



Ti è piaciuto questo articolo? Regalami un click per ripagarmi dello sforzo



Code4Life ti è stato utile? Sostienici con una donazione!

Dona con PayPal

Hai trovato interessante l’articolo? Allora ti consiglio di leggere:

Come disattivare Gutenberg su WordPress

Come disattivare Gutenberg su WordPress


Scopri come disattivare Gutenberg ed abilitare nuovamente l’editor “classico”

Come importare i prodotti in WooCommerce

Come importare i prodotti in WooCommerce


Scopri come importare massivamente un gran numero di prodotti in WooCommerce in un solo colpo!


Qualche dubbio? Ecco le opinioni degli altri utenti

ho inserito il codice ma si è rotto il sito.
Forse va aggiornato?

In risposta a Alessandro

Salve Alessandro, che tipo di errore hai riscontrato? Se non lo hai già fatto, prova ad arrivare la modalità debug per capire il tipo di errore:
https://code4life.it/guide/come-fare-il-debug-su-wordpress/

Ciao! Anche io ho usato il tuo metodo e non ha funzionato. Sarebbe utile aggiornare il codice così possiamo usarlo senza problemi. 🙂

In risposta a anna

Ciao Anna, grazie mille per la segnalazione, ma il codice è attualmente funzionante, testato anche su WP 5.4.x e WC 4.x.
Le nostre guide sono uno spunto per aiutare gli utenti, ma è chiaro che ogni sito ha diverse caratteristiche (versione di WordPress, dei plugins, temi, ecc) e quindi in alcuni casi potrebbe essere necessario modificare il codice fornito e non solo fare copia-incolla. Sapere cosa “non ha funzionato”, magari analizzando il log di WordPress, potrebbe essere di aiuto agli altri utenti per non incorrere nelle stesse problematiche. Ogni spunto di riflessione è sempre gradito!

Hai Perfettamente ragione, ho copiato e incollato senza cambiare il nome del dominio e non funzionava. Ho ripetuto tutti i passaggi, stando attenta a inserire il mio dominio nel codice e adesso funziona alla grande!!! Grazie mille!!!

In risposta a anna

Di nulla, figurati! E grazie per aver condiviso la tua esperienza

Ciao! Sono un utente alle prime armi. Mi chiedevo se le righe di codice inserite ai file sorgenti non venissero cancellate dagli aggiornamenti successivi. Inoltre, la procedura è quella di copiarle all'inizio del file in sequenza, così come sono state riportate? Non esistono plug in che danno questa possibilità senza modificare i file di programma? Ringrazio in anticipo scusandomi per la mia inesperienza.

In risposta a Ugo

Ciao Ugo, si, in caso di aggiornamenti del tema, i files dello stesso (compreso il file functions.php) vengono sovrascritti. È bene sempre utilizzare un tema child di WordPress per ovviare a questo problema, ti suggerisco di leggere:
Come creare un tema child per WordPress

Il posizionamento del codice all’interno del file è indifferente, in quanto il meccanismo degli hooks di WordPress gestisce le funzioni “agganciate” attraverso il terzo parametro che stabilisce la priorità di esecuzione:

add_filter( string $tag, callable $function_to_add, int $priority = 10, int $accepted_args = 1 );

in questo modo, se ci sono più funzioni sullo stesso hook, verranno eseguite in ordine di priorità.

Riguardo il plugin, sicuramente ce ne sono, ma in generale lo scopo di Code4Life è di guidare all’utilizzo di snippets di codice senza l’ausilio di plugins, in quanto l’abuso degli stessi può causare degrado delle performance.

Spero che queste informazioni riescano a sciogliere i tuoi dubbi!

Grazie per i suggerimenti, sei stato chiarissimo anche per me che sono principiante! Potresti indicarmi da dove cominciare per muovere i primi passi? Più che altro sul mondo wordpress in generale ma anche per i rudimenti di html, php e comprensione dei vari meccanismi senza affrontare linguaggi estremamente tecnici e complicati?

In risposta a Ugo

Di nulla e grazie a te!
In generale, per un primo approccio trovo molto interessanti alcuni corsi su Udemy, ce ne sono di completi e chiari:

Corsi Udemy

Potrebbe essere una buona idea partire da lì.

Ciao!
Dopo la modifica mi sono accorta che il campo "ricerca ordini" non funziona più. Esattamente quando inserisco questo codice smette di funzionare:
// 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,
)
) );
} );
Come posso risolvere? Grazie

In risposta a anna

Salve Anna,
in che modo “non funziona”? Il codice fornito si integra con la ricerca, non dovrebbe crearti problemi. Considera che il “cerca” degli ordini di default agisce solamente sul campo “Ordini”, che solitamente reca nome del cliente e numero di ordine. Potresti partire facendoti stampare il valore dell’array $query dopo il filter su “pre_get_posts”, così da poter debuggare e comprendere la problematica.

Ciao, ho osservato la tab console ma non ci sono errori, come posso far funzionare tutte e due le ricerche (sia la ricerca di default e sia il codice copiato da te)

In risposta a anna

Ciao Anna,
cosa intendi con “tab console”? Come detto in precedenza, il consiglio è di utilizzare il filtro “pre_get_posts” per far stampare il contenuto della variabile $query, per comprendere in che modo, sul tuo sito, si verifica l’eccezione. Il codice così come fornito nella guida, non crea problemi con la ricerca di default, è necessario da parte tua una attività di debug più mirata per scoprire l’eventuale problema

E tu cosa ne pensi? Condividi la tua opinione e discutiamone insieme
La tua email non sarà resa pubblico o utilizzata per inviarti spam, te lo prometto

Iscrivimi alla newsletter per ricevere news ed aggiornamenti
Utilizziamo piattaforme di terze parti per l’invio di newsletter. (Informativa sulla privacy)
Tienimi aggiornato su questo articolo
Ricevi una email di notifica quando qualcuno scriverà un commento a questo articolo. (Informativa sulla privacy)
Ricorda i miei dati per la prossima volta che scriverò un commento
Il tuo nome e la tua email verranno salvati in un cookie in questo browser. (Informativa sulla privacy)